Multi-window explorer for SAP tables, views and CDS views — with per-window select-options that re-read the data as you type, drag-and-drop links between windows, foreign-key navigation, a join builder, pivot tables and a generated Open SQL statement you can edit and run.
Version 2 (SelecTor) lives in src/ and is the version documented here. The older
single-file viewer is still shipped for old releases — see
History and older documentation.
Also outside SAP GUI. The table grid with its select-options, the join builder and the pivot are available in Eclipse ADT and in VS Code through VERTEX · Marketplace.
- Overview
- Requirements
- Installation
- Quick start
- Selection screen
- The table window
- Links between windows
- HR and HCM plugins
- Tools: joins, pivot tables, SQL
- Repository layout
- Architecture
- History and older documentation
- Author
- License
- Multiple windows. Open as many tables as your screen allows, including the same table several times. Every window is an independent dialog box with its own data and filters.
- A selection panel per window. It opens and closes with the arrow icon. All standard search
helps are connected, including the special ones for personnel numbers (
PAxxxx-PERNR) and organizational management objects (HRPxxxx). - Reactivity. Data is re-read as soon as a filter changes — no round-trip through a separate selection screen, no loss of context.
- Empty columns are hidden by default, because most SAP tables are mostly empty. One menu entry brings them back.
- Multilingualism. All languages installed in the system are supported: column and table names are translated on the fly, and technical field names are one of the options.
- Navigation. Double-click a value to open the checked table behind the foreign key; drag values from one window into the filters of another; look at the link graph as in SE11.
- HR/HCM plugins. Jumps to PA20/PP01, infotype long texts, wage type texts, organizational management links, payroll cluster viewer.
- Tools. Build joins from the foreign keys the dictionary already knows, build pivot tables, read the generated Open SQL, edit it, run it, and save the whole layout to a file.
- Tables, views and CDS. Transparent and cluster tables, DDIC views (including the maintenance views of SM30) and the SQL views generated for CDS entities.
- SAP GUI for Windows. The whole UI is built on
CL_GUI_*controls (ALV grid, HTML viewer, splitter, dialog boxes); layouts are saved through frontend services. - SAP_BASIS 7.50 or higher for the sources in
src/. For older systems use the legacy one-file versions. - Display rights on the data you open. SDE reads with plain Open SQL and performs no
S_TABU_*authority checks of its own — treat it as a developer/support tool and install it accordingly.
- In abapGit, create an online repository for
https://github.com/ysichov/Simple-Data-Explorer.gitand assign it to a package (for example$ZSDEfor a local one). - Pull, then activate all objects.
- Run program
ZSDE2(SE38 / SA38).
No package, no abapGit, nothing to activate except one report:
- Create a report (for example
Z_SDE_STANDALONE) in SE38. - Paste the contents of
src/z_sde_standalone.prog.abap. - Activate and run.
The file is generated from the sources in src/ — do not edit it by hand.
Generation 1 of the viewer, kept for old systems and for the HR flavour:
| File | Target | Notes |
|---|---|---|
SDE_702.abap |
SAP_BASIS 7.02 | Report YS_SDE |
SDE_750_HR.abap |
SAP_BASIS 7.50 | HR/HCM build, infotype texts (PAxxxx-ITXEX) |
- Run
ZSDE2. - Pick the object type with the buttons in the toolbar of the selection screen: Tables, Views, CDS.
- Type a name and press Enter — a window opens. Type the next name and press Enter again to open another window; the selection screen stays where it is.
- Filter in the left panel of a window; the grid follows every change.
- Press the Tools icon in a window to build joins and pivot tables on top of it.
| Field | Meaning |
|---|---|
| Tables / Views / CDS | Switches the input field. Tables accepts transparent and cluster tables, Views any DDIC view (F4 lists the maintenance views of SM30), CDS the SQL view generated for a CDS entity (application class SDGV). |
| Table / View / CDS name | F4 is available in all three modes. The name is checked before the window opens. |
| Max rows | Row limit of every read, 500 by default. It also caps the statements the Tools area runs. |
| Folder for saved joins | Frontend folder for .sdj layout files, C:\temp\sde\ by default. F4 opens a directory browser. |
A window is a dialog box split into the selection panel (left, collapsible) and the data grid (right). When the Tools area is opened, it is docked below the data.
| Button | Description |
|---|---|
| Show/hide select-options | Collapses the selection panel and gives the width to the grid. |
| Refresh | Re-reads the data with the current filters. |
| Load join layout | Reads a .sdj file; opens the Tools area if needed. |
| Save join layout | Writes the current tables, fields, mode, filters and SQL to a .sdj file. |
| Languages | Menu: Technical name plus every language installed in the system. |
| Empty columns options | Menu: Hide empty columns / Show empty columns. |
| Table links | Opens the graphical link visualization. |
| Tools | Docks the join and pivot builder below the data (click again to hide). |
| Sort ascending / descending | Builds ORDER BY on the marked columns — see Sorting. |
| Standard ALV functions | Shows or hides the standard ALV toolbar (export, layouts, find, …). |
One row per field, with the dictionary information next to it — data element, domain, data type and length. This is meant to save time while writing technical specifications.
- F4 on a row opens the standard search help of the field. Values already entered in other rows are passed to the help, so the proposals stay in the context of the current filter.
- Double-click opens the dictionary: on the
ELEMENTcolumn SE11 with the data element, on theDOMAINcolumn SE11 with the domain, on any other column the documentation of the data element. - The option icon opens the standard sign/option dialog (
EQ,BT,NE,CP, …). - The more icon opens the complex selections dialog — an arbitrary number of ranges per field, exactly as on a normal selection screen. The icon shows whether ranges exist.
- Fields whose search help is a short value list get a drop-down in the input cell.
- The context menu offers Clear Select-Options and Delete receiver (see Drag and drop).
Typing is interpreted the way an experienced user expects:
| Input | Result |
|---|---|
| a value in low | I EQ value |
| values in low and high | I BT low high |
a value containing *, %, + or & |
I CP pattern |
| clearing sign and option | the row is cleared |
| a date or time | converted from the user format into the internal one |
Empty columns are hidden after every read, so a 200-column table shows only what actually carries data. Show empty columns brings them all back.
The Languages menu lists every language installed in the system plus Technical name. The choice re-translates the grid headers and the labels of the selection panel.
The sort buttons do not sort the fetched rows on the frontend — that would sort the wrong 500
rows. They build an ORDER BY and read again from the database. Mark one or more columns (or just
place the cursor in one) and press the sort icon. Because the statement is built by the Tools area,
sorting requires Tools to be open; the program says so if it is not.
The colour of a column tells what a double-click will do:
| Colour | Meaning |
|---|---|
| Blue | The field has a check table: it opens in a new window, filtered by the value you clicked. |
| Green | A plugin handles the field — a transaction, or a related table that no foreign key describes. |
| Grey | A column of the text table, joined to the data automatically so the language-dependent text stands next to the code. |
| White | A plain field. |
Select one or more cells or a whole column in a data grid and drag them onto the selection panel of another window. The dragged column turns into buttons in the source window, an inheritance indicator appears next to the receiving field, and clicking a button in the source re-reads the target window with that value. Dragging between two selection panels works the same way. A data model of several tables comes alive in about a minute.
Delete receiver in the context menu of the selection panel breaks the link again.
The Table links button opens the graphical visualization of the foreign key relations of the current table, the same picture SE11 draws.
Links that no foreign key describes are hard-coded as plugins.
By data element:
| Data element | Action |
|---|---|
PERSNO |
PA20 for the personnel number, with infotype, subtype and validity dates prefilled |
HROBJID |
PP01 for the OM object |
LGART |
Wage type text table T512W |
ITXEX |
Long text of the infotype record, in a text viewer window |
SUBTY |
Subtype table of the infotype |
By table and field:
| From | To |
|---|---|
PA0001-PLANS / ORGEH / STELL |
HRP1000, object type S / O / C |
HRP1001-SCLAS / SOBID |
The related OM object — it is put into the search parameters of the same window, so you can walk the structure link by link |
HRP1001-ADATANR |
The additional data table of the relation |
HRP1002 / HRP1035 / HRP1222, field TABNR |
HRT1002 / HRT1035 / HRT1222 |
PA2006-QUONR |
PTQUODED, and from there back to PA2006 / PA2001 |
HRPY_RGDIR-SEQNR |
Payroll cluster viewer |
A double-click on a sequence number in HRPY_RGDIR opens the payroll result of that personnel
number and sequence number as a tree: every cluster table of the result is a node, and each node
opens in a normal SDE window with filters, empty-column handling and everything else.
The Tools button docks a builder below the data of the window: an HTML canvas on top (the join graph, or the pivot cross), the field list, the generated SQL, and the result grid.
Two cards switch the mode — Join and Pivot table. Clicking the active card again turns the mode off and leaves the plain table behind.
- Candidates are discovered from the dictionary around the base table: outgoing foreign keys, incoming ones and text tables. Any other table can be added by name.
- Selecting a candidate gives it an alias (
T0,T1,T2, …) that never changes afterwards, so filters and sorts stay valid while you rearrange the join. - Each joined table has a join type (
INNER/LEFT OUTER) and an ON condition, filled from the key pairs and editable by hand. - Tables can be reordered; fields can be picked with select all / clear / keys, per table or one by one, reordered by dragging or by click-to-move, and selected with a lasso. The field texts follow a language of your choice.
- The selection panel of the window gains every field of every joined table under its alias
(
T1_CONNID), so filters can be set on any table of the join. Filters of tables that leave the join are dropped instead of breaking the statement.
The pivot mode replaces the canvas with the pivot cross: ROWS run down the left side, COLUMNS across the top, MEASURES fill the body, and the available fields sit below it. The SELECT list of the join is collapsed while pivoting — it has no effect on the pivot beyond deciding which fields are on offer — so the generated statement takes the whole lower half.
- Every section starts with three slots and grows by one more as soon as it fills up, so there is always a free slot to aim at.
- Fill a slot by dragging a field chip into it, or click the chip and then click the slot. Chips can be dragged from one slot to another to reorder them or to move them between sections; the cross on a chip removes it.
- Every measure chip carries an aggregation:
SUM,COUNT,MIN,MAX,AVGfor numeric fields,COUNT/MIN/MAXotherwise. The same field can be measured several times, once per aggregate. - Fields already placed are dimmed in the list below; in a join every chip keeps the color of its table.
One statement does the aggregation: the join is grouped by the row and the column fields
together, so every line of the result is one cell. The matrix itself is spread in ABAP — a
dynamically specified SELECT list cannot carry the CASE expressions a SQL-side matrix would
need, and the parser rejects them. Up to 50 distinct column value combinations become columns;
a blank value is shown as (empty). Pivot works on the base table and on a join alike.
- Fixed values become text. A field whose domain has fixed values (like a status or a class)
shows the domain's short text instead of its raw code, both in a spread column's header and in a
plain row. A checkbox-style field without domain text of its own (a
FLAG) shows its own field name for the checked value instead of a bareX. - Sorting the grid sorts the matrix itself — the pivot's grouped statement has no column that
corresponds to a spread column, so
ORDER BYcannot reach it the way it does for the plain join.
The statement is always visible below the panel. The edit link turns it into a text area: change
anything you like and run it. UP TO n ROWS, ORDER BY and GROUP BY are recognized and applied
separately, and the row limit of the selection screen still applies when the statement does not
carry one. The result appears in the grid next to the field list.
Filters set in the window feed the WHERE clause, so the SQL text and the result follow the
selection panel while you type.
Save join layout / Load join layout in the toolbar write and read .sdj files in the folder
from the selection screen (C:\temp\sde\ by default). A layout is tab-separated plain text —
readable in any editor — and contains the base table, the joined tables with their conditions, the
field list and its order, the mode, the filters, the ORDER BY and a manually edited statement if
there is one. Loading a layout restores all of it, even before the selection panel has been opened.
| Path | Contents |
|---|---|
src/ |
The program: one report, the global classes, one interface, plus the generated standalone report |
SDE_702.abap, SDE_750_HR.abap |
Legacy one-file versions (not part of the abapGit package) |
generate_standalone.sh, generate_standalone.bat, fix_event_order.py |
Developer tooling that regenerates the standalone report from src/ |
AGENTS.md |
Rules for automated contributors |
| Object | Responsibility |
|---|---|
zsde2 (report) |
Selection screen, object type switch, entry point |
zcl_sde_appl |
Global state: list of open windows, languages, icons, parameters |
zcl_sde_table_viewer |
One window — grid, toolbar, data read, navigation, docked tools |
zcl_sde_sel_opt |
Selection panel: rows, options, ranges, F4, drop-downs, dictionary jumps |
zcl_sde_transmitter, zcl_sde_receiver |
Event link that makes one window drive another |
zcl_sde_dragdrop, zcl_sde_dd_data |
Drag and drop between grids and selection panels |
zcl_sde_tools |
Join and pivot builder: HTML UI, SQL generation, result grid, layout files |
zcl_sde_pivot, zif_sde_pivot_types |
Pivot model, builder panel and the grouped statement |
zcl_sde_plugins |
Dictionary and HR navigation rules |
zcl_sde_py_cluster_viewer |
Payroll result as a tree |
zcl_sde_text_viewer |
Infotype long texts |
zcl_sde_rtti |
Dynamic types, field catalogs, drop-down lists |
zcl_sde_sql |
Dynamic reads and existence checks |
zcl_sde_ddic, zcl_sde_common |
Dictionary and ALV helpers |
zcl_sde_popup |
Base class of every dialog window |
z_sde_standalone (report) |
Everything above merged into one file — generated, never edited |
Generation 1 of SDE was a single report for viewing tables and the links between them; this repository is its successor and the description above covers both generations. The wiki of this repository documented generation 1 and is superseded by this file.
The repository used to be called SDE; links of the form github.com/ysichov/SDE/... still
redirect here.
- Simple Data Explorer — feature description in Russian
Yurii Sychov — e-mail · blog · LinkedIn
ALV listbox handling is based on bizhuka/eui.










