ABAP Data Dictionary (SE11) Deep Dive: Tables, Views, Domains, Data Elements & Structures – Hands-On Tutorial | Part 32 | FreeLearning365

  

ABAP Data Dictionary (SE11) Deep Dive: Tables, Views, Domains, Data Elements & Structures – Hands-On Tutorial | Part 32 | FreeLearning365


ABAP Data Dictionary (SE11) – Tables, Views, Domains, Data Elements & Structures: A Hands-On Deep Dive

Day 2 of the S/4HANA ABAP Development & Fiori Track

By @FreeLearning365 and Tech Partner @techbook24

Introduction: The Invisible Backbone of Every SAP Transaction

Every time you execute a SELECT statement in ABAP, a function module processes data, or a Fiori app displays a value, the Data Dictionary (DDIC) is quietly working behind the scenes. Without it, SAP would be a collection of disconnected programs. The Data Dictionary provides the central, structured description of all data objects — tables, views, data types, and their relationships. It enforces consistency, integrity, and documentation. When you define a table in SE11, you aren’t just creating a place to store records; you’re building a reusable component that can be referenced by hundreds of programs, authorizations, and services.

In today’s deep dive, you’ll join Arjun, our ABAP developer at TechBook24, as he receives a new requirement: the procurement department wants to store internal approval notes against purchase orders. These notes are not standard SAP, so a custom table is needed. Arjun must design it professionally, using domains and data elements for consistency, a foreign key to EKKO for referential integrity, and a maintenance view so the functional team can view and maintain the data without programming. Through this real-world scenario, we’ll explore every major object type in SE11, compare legacy concepts with S/4HANA realities, and end with a working report that brings it all together.

No theoretical slides. You’ll learn by doing — and by the end, you’ll be able to open SE11 with confidence and design robust data models that follow SAP standards. Let’s enter the dictionary.

1. The Core of SE11: Transparent Tables vs Pooled/Cluster Tables in S/4HANA

1.1 What Is a Transparent Table?

transparent table is the standard table type in ABAP Dictionary. It has a one-to-one mapping to a physical database table in the underlying database (in S/4HANA, this is SAP HANA). The table’s fields, data types, and keys are directly represented in the HANA column store. When you create a transparent table in SE11, the system automatically generates a corresponding # table in the database with the same structure. You can access it with Open SQL (SELECTINSERTUPDATEMODIFYDELETE) just as you would with any native SQL table, though ABAP’s Open SQL shields you from the physical implementation.

In S/4HANA, transparent tables are optimized for the HANA engine. They support advanced features like column store, compression, and are automatically buffered if configured. The majority of custom tables in any S/4HANA system are transparent.

1.2 The Obsolete Pooled and Cluster Tables

Before HANA, to save disk space, SAP introduced pooled tables and cluster tables. Pooled tables stored data from many small customizing tables in a single physical database table (like ATAB). Cluster tables packed related data from multiple logical tables into one clustered record (e.g., BSEG cluster). These were heavily used in ECC for things like BSEGBSEC, etc. However, they had severe performance and transparency limitations: you couldn’t do arbitrary joins, and maintenance was complex.

S/4HANA simplified this dramatically. All core tables like BSEG are now transparent. Pooled and cluster tables are considered legacy and are not supported for new developments. When you create a table in SE11 today, the only option you should use is “Transparent table”. In fact, SAP has converted many of the old cluster tables into transparent tables in S/4HANA, which improves reporting performance immensely. Arjun will only work with transparent tables.

Key Takeaway: Forget pooled/cluster. If you encounter them in legacy code, understand that they are going away. Always design transparent tables.

1.3 TechBook24’s Table Design – The Requirement

The procurement department wants to store up to five approval notes per purchase order. They need a way to enter notes (via a maintenance view) and later display them in a report alongside PO header information. Arjun suggests a custom table ZAPPROVAL_NOTES with fields: client (MANDT), purchase order number (EBELN), approval sequence (APROV_SEQ), approver user ID (APROV_USER), approval date (APROV_DATE), and note text (APROV_TEXT). He’ll also need a foreign key to EKKO so that only valid PO numbers are accepted.

Before creating the table, he must first define the domains and data elements that will give the table professional polish and enforce consistency. Let’s build from the ground up.

2. Domains: The Foundation of Data Integrity

2.1 What Is a Domain?

domain defines the technical characteristics of a field — its data type, length, number of decimal places, and optionally, its value range or fixed values. It does not carry semantic meaning (that’s the data element’s job). Domains are reusable; you can create one domain and attach it to many data elements, ensuring consistent length and type across the system. For example, domain EBELN (purchasing document number) has data type CHAR length 10. All purchase order fields in SAP that use data element EBELN share this same domain.

2.2 Creating a Domain in SE11 – Arjun’s Walkthrough

Transaction code: SE11 → Select “Domain” radio button → enter ZAPROV_SEQ → click Create.

Screenshot Description: SE11 initial screen with Domain selected and name ZAPROV_SEQ entered.

In the domain editor, Arjun specifies:

  • Data Type: NUMC – character string with only digits.
  • No. of Characters: 2 – because there will be at most 5 notes (01–05).
  • Output Length: 2.
  • Decimal Places: 0 (not applicable).

He then goes to the “Value Range” tab. Here he can define fixed values that the field can take. For approval sequence, he wants only values 01 to 05. He clicks the “Fixed Values” icon (or tab) and enters:

ValueDescription
01First Approval
02Second Approval
03Third Approval
04Fourth Approval
05Fifth Approval

These fixed values will appear in F4 help and can be used in domain value checks. The system will automatically reject any entry not in this list (if the domain is used with value check active).

Best practice: Use fixed values when the set of allowed entries is small and stable. It eliminates the need for separate check tables and keeps the business logic in the dictionary.

2.3 Domain Conversion Routines – The ALPHA Example

Domains can have an associated conversion routine. The most famous is ALPHA, which handles leading zeros for number fields like document numbers. When you define a domain like EBELN, it has conversion routine ALPHA. This means that if you enter ‘12345’, the system stores ‘0000012345’ internally (if the field length is 10). When you display it, the routine strips leading zeros. In ABAP, you often need to use CONVERSION_EXIT_ALPHA_INPUT to convert user input to internal format and CONVERSION_EXIT_ALPHA_OUTPUT for output.

Arjun’s domain for purchase order number will reference the standard domain EBELN (which he will reuse via a data element). He doesn’t need to create a new domain; he can simply use the standard one. That’s the power of domains — reusability. For his custom fields, he creates his own.

2.4 Additional Domain: Approval User ID

For the approver user ID, he wants a domain based on standard user ID XUBNAME. He opens that standard domain to see its definition: CHAR 12, output length 12. He’ll use it directly for his data element, or create a custom domain if he needs specific fixed values (not in this case). He decides to use standard domain to maintain consistency.

3. Data Elements: Adding Meaning and Documentation

3.1 The Role of a Data Element

data element gives semantic meaning to a field. It references a domain for the technical attributes, but it also adds field labels (short, medium, long, and heading), documentation (F1 help), and a search help if needed. Every table field should have its own data element, unless you are reusing an existing one from a standard table.

Data elements are the difference between a field called APROV_USER showing in a report as “APROV_USER” and showing as “Approver User ID” with readable column headers and F1 documentation.

3.2 Creating Data Elements for the Approval Table

Transaction: SE11 → Data type → enter ZAPROV_SEQ_DTE (Arjun’s naming: prefix Z, field description, suffix _DTE for data element). Click Create.

  • Domain: ZAPROV_SEQ (the domain he created).
  • Short Description: “Approval Sequence Number”.

Now the most important part: the Field Label tab. He enters:

  • Short: “Seq.”
  • Medium: “Approval Seq.”
  • Long: “Approval Sequence”
  • Heading: “Approval Sequence No.”

These labels automatically appear in ALV outputs, SE16N, and maintenance views. They save hours of manual column header coding.

Next, he creates data element ZAPROV_DATE_DTE using standard domain DATUM (date). Field labels: “Appr. Date”, etc. Data element ZAPROV_TEXT_DTE using domain TEXT132 (character 132). He also uses the standard data element EBELN for the purchase order field — no need to reinvent that.

Documentation: In the data element screen, there’s a “Documentation” button (or menu). Here he writes a short text explaining what this field contains and any business rules. This will appear as F1 help. For approval sequence: “Sequence number of the approval step. Valid values: 01 (First) to 05 (Fifth).”

3.3 Parameter ID and Search Help

A data element can also store a Parameter ID (like BUK for company code). When a user sets a parameter ID in their user profile, the system automatically fills that field in transactions. For approval user, Arjun could set parameter ID USR but that’s already for user. He leaves it blank.

Search Help: If you attach a search help to a data element, the F4 help will use it. For user ID, standard data element XUBNAME already has search help USER_ADDR attached. So if he reused that standard data element, he’d inherit the search help. But since he might want a custom data element for documentation reasons, he could also attach a search help manually. He decides to reuse standard XUBNAME as the data element for his user ID field to automatically get the standard user search help. That’s smart.

4. Creating the Transparent Table ZAPPROVAL_NOTES

4.1 Table Definition in SE11

Arjun opens SE11, selects “Database table”, enters ZAPPROVAL_NOTES, and clicks Create. In the delivery and maintenance tab:

  • Delivery Class: ‘A’ (Application table for master data or transaction data) – this is the normal choice for custom transactional tables.
  • Data Browser / Table View Maintenance: ‘Display/Maintenance Allowed’ – he plans to generate a maintenance view later, so he sets this to ‘X’ to allow maintenance.

Now the field list:

FieldKeyData ElementData TypeLengthShort Description
MANDTXMANDTCLNT3Client
EBELNXEBELNCHAR10Purchasing Document Number
APROV_SEQXZAPROV_SEQ_DTENUMC2Approval Sequence Number
APROV_USERXUBNAMECHAR12User Name
APROV_DATEZAPROV_DATE_DTEDATS8Approval Date
APROV_TEXTZAPROV_TEXT_DTECHAR132Approval Note Text

He marks MANDT, EBELN, APROV_SEQ as key fields, forming the primary key. This ensures uniqueness — you can’t have two notes with the same sequence for the same PO in the same client.

Screenshot Description: SE11 table maintenance screen with the fields and keys listed above.

4.2 Foreign Key Relationship to EKKO

Click on the EBELN line, then the “Foreign Key” icon (or press the button). He creates a foreign key with:

  • Check table: EKKO (purchasing document header).
  • Field mapping: ZAPPROVAL_NOTES-EBELN → EKKO-EBELN.
  • Cardinality: 1: N (one EKKO record can have many approval notes).
  • Screen check: Checked (enforce at UI level).

With this foreign key, any entry in ZAPPROVAL_NOTES with a PO number that doesn’t exist in EKKO will be rejected. Also, it enables the system to perform value help automatically. This is critical for data integrity.

4.3 Technical Settings – Table Storage and Buffering

After saving the fields, SE11 prompts for Technical Settings. Arjun chooses:

  • Data class: APPL0 (master data) – though it’s transactional, the table is small and often read. APPL0 is fine.
  • Size category: 0 (0 to 8,000 records expected). It’s a safe estimate; they expect hundreds, not millions.
  • Buffering: “Buffering allowed but not switched on” – for tables that will be maintained via a maintenance view, buffering can cause inconsistencies if multiple users update via SM30. So he leaves it off. Alternatively, he could set buffering to single-record but only if he never used SM30 for maintenance. He sticks to no buffering.

Pro tip: For customizing tables (delivery class C or G), buffering is common because changes are rare. For application tables, be cautious.

Activate the table. The system creates the physical table in HANA. Now it can be populated.

5. Views: Database, Projection, Maintenance, Help – The Complete Picture

5.1 Database Views (SE11 → View → Database view)

database view is a logical view that joins multiple transparent tables. In S/4HANA, it is implemented as a SQL view on the HANA database itself, meaning it can be accessed with Open SQL like a normal table. This is extremely powerful because you can define a complex join once and let all programs use it without repeating the join conditions.

For Arjun, the procurement team wants a report that shows PO header info along with approval notes. He could write a SELECT with JOIN, but creating a database view makes it reusable. He creates view ZAPPRV_NOTE_V:

  1. SE11 → View → Database view → enter name → Create.
  2. Add tables: EKKO (primary), ZAPPROVAL_NOTES (secondary).
  3. Join conditions: EKKO-EBELN = ZAPPROVAL_NOTES-EBELN.
  4. Select fields: from EKKO: EBELN, LIFNR, AEDAT, WAERS. From ZAPPROVAL_NOTES: APROV_SEQ, APROV_USER, APROV_DATE, APROV_TEXT.
  5. Activate.

Now any ABAP program can simply SELECT * FROM zapprv_note_v to get a combined result set. This centralizes the join logic. When the business asks for an additional field from EKKO, Arjun only needs to modify the view, not every report.

Limitations: Database views are read-only if they contain a join (you cannot INSERT/UPDATE directly). They also cannot have aggregation or grouping. For that, you need a CDS view (covered in Part 37). But for simple joins, they are perfectly adequate.

5.2 Projection Views

projection view is a subset of fields from a single table. It’s rarely used nowadays because you can simply select the fields you need. In the past, projection views were used to hide sensitive fields or for authorization objects. But with CDS and DCL (Data Control Language) in S/4HANA, projection views are becoming obsolete. Arjun won’t use one.

5.3 Maintenance Views – The No-Code Data Maintenance Solution

This is a game-changer for functional consultants. A maintenance view allows you to maintain data in one or two related tables (inner/outer join) via transaction SM30. It automatically generates table maintenance dialogs, with transport recording if the table has delivery class that supports transports. For Arjun’s approval notes table, creating a maintenance view means the procurement team can directly add, edit, and delete notes without any ABAP program.

Steps to create a maintenance view for ZAPPROVAL_NOTES:

  1. SE11 → View → Maintenance view → enter ZAPPROVAL_NOTES_M → Create.
  2. Primary table: ZAPPROVAL_NOTES. Secondary table (optional): He wants to display the vendor name from LFA1, so he could add EKKO to get the vendor number and then LFA1? Maintenance views can only have two tables in an outer join. He decides to include EKKO as secondary table to show vendor number and PO date for context. Join condition: EKKO-EBELN = ZAPPROVAL_NOTES-EBELN, outer join (to show notes even if EKKO entry somehow missing).
  3. Select fields: from primary table all fields; from EKKO: LIFNR, AEDAT.
  4. On the “Maintenance Status” tab, set the primary table’s maintenance to “X” (read and change). For secondary table, set “S” (read only) because he doesn’t want users to change PO header info via this view.
  5. Activate.

Now, from SE11, he can go to Utilities → Table Maintenance Generator. Here he creates a function group (or reuse an existing one) and assigns a maintenance screen. He generates a dialog with one step. Then, the view can be called with SM30 or SE16N with table maintenance. Actually, maintenance views are accessed via SM30 with the view name. He tests it: enters a PO number and adds an approval note. The foreign key to EKKO ensures that invalid PO numbers are rejected.

Screenshot Description: SM30 screen showing the maintenance view with columns for PO, sequence, user, date, text, and read-only LIFNR, AEDAT from EKKO.

Pros: Zero coding, automatic transport recording, authorization checks possible. Cons: Not as flexible as custom UI; can be confusing for users if many fields. For simple tables, it’s the standard.

5.4 Help Views

help view is used exclusively as a F4 search help. It joins tables and defines the display and selection method. For example, you could create a help view on EKKO and LFA1 to show vendor name when searching for a PO. Arjun doesn’t need one now, but he notes that help views are created like other views (SE11 → Help view). They are assigned to data elements as a search help.

6. Structures and Table Types – The Building Blocks Beyond Tables

6.1 Structures in SE11

structure is a non-database object — it has no physical storage. It’s used to define the layout of a work area, the parameters of a function module, or the input/output of a method. In SE11, you can create a structure to centralize common field groupings. For instance, Arjun wants to create a structure for the approval note update data (APROV_SEQ, APROV_USER, APROV_DATE, APROV_TEXT) without the EBELN, so it can be reused in BAPIs. He creates structure ZAPPRV_NOTE_S with those fields, reusing the same data elements. Then in ABAP, he can declare DATA wa_note TYPE zapprv_note_s.

Structures are also heavily used in table enhancements (append structures). We’ll see that next.

6.2 Table Types

table type in SE11 defines a typed internal table, including its access method (standard, sorted, hashed), key, and line type (which can be a structure or a data element). For example, Arjun creates table type ZAPPRV_NOTES_TT as a standard table of line type ZAPPROVAL_NOTES (the database table structure). Then in ABAP, he can write:

DATA lt_notes TYPE zapprv_notes_tt.
SELECT * FROM zapproval_notes INTO TABLE lt_notes.

This enforces consistency across programs and is especially useful in function module interfaces where you need to pass a table of approval notes. You can define the table type in SE11 and then use it as the type of a TABLES parameter.

Best practice: When you create a transparent table, the system automatically generates a structure and table type in the background (names ZAPPROVAL_NOTES for structure, and you can refer to it as TYPE TABLE OF ZAPPROVAL_NOTES). But explicitly creating table types in SE11 gives you control over the key and access method and makes your code self-documenting.

7. Table Enhancements – Append Structures and Include Structures

7.1 The Need to Enhance SAP Standard Tables

TechBook24’s logistics team wants to add a “Quality Inspection Status” field to the standard purchase order item table EKPO. Modifying SAP objects directly is forbidden — you lose the modification during upgrades and it’s against licensing. The solution: append structures and include structures.

7.2 Append Structures (CI_ Include)

When you activate an append structure for a standard table, the system adds a CI_ include structure at the end of the table. The fields you add become part of the table as if they were standard. They are automatically transported and survive upgrades (as long as SAP doesn’t add conflicting fields). This is the approved way to extend SAP tables.

Steps to enhance EKPO:

  1. SE11 → Display table EKPO.
  2. Go to menu Goto → Append Structure (or click the Append Structure button).
  3. Enter a name, e.g., ZAEKPO_QI_STATUS. Press Create.
  4. Now you can add fields. Arjun adds:
    • Field: ZZQI_STATUS (ZZ or YY prefix is common for custom fields).
    • Data element: He creates a new data element ZQI_STATUS_DTE with domain ZQI_STATUS_DOM (CHAR 1, fixed values: ‘P’ (Pass), ‘F’ (Fail), ‘N’ (Not inspected)).
  5. Activate the append structure. Now EKPO has a new field ZZQI_STATUS. It appears in SE16N, in ABAP SELECT *, and in all programs that use EKPO.

Important: Append structures cannot contain nested structures or deep types; only flat fields. You also cannot add foreign keys directly; you must use a separate check table relationship in the domain or via coding. But for simple flags, it’s perfect.

Alternative – Include Structures: Instead of an append, you could create a structure in SE11 (e.g., ZSTR_QI_FIELDS) and then include it in multiple tables via .INCLUDE. For EKPO extension, SAP recommends append because it directly links to the table without needing to modify the table definition. Include structures are more flexible for custom tables: you can add the same set of fields to many tables by including the structure. In Arjun’s custom table, he could create an include structure for common fields like created by, created on, changed by, changed on, and include them in all his custom tables. This is standard practice.

7.3 The CI_ Include and the Upgrade Cycle

When you activate an append, the system inserts a .INCLUDE CI_EKPO at the end of EKPO. If SAP later adds a new field at the end, your custom fields remain after it. However, if SAP adds a field to the structure that matches your field name, you’ll get a conflict. That’s why the naming convention ZZ or YY is used; SAP never uses those prefixes. Upgrades are generally safe.

8. The Full Hands-On Lab – Putting It All Together

Now we’ll follow Arjun through the complete cycle: create domain, data element, table, maintenance view, enhance EKPO with an append, then write a report that uses the database view and the enhanced EKPO.

8.1 Prerequisites

You need a development client with developer key for Z-prefix objects. For the lab, we assume client 200 in TechBook24’s landscape.

8.2 Step 1: Create Domain ZAPROV_SEQ

  • SE11 → Domain → ZAPROV_SEQ → Create.
  • Data Type: NUMC, length 2.
  • Value Range: Fixed Values as listed earlier (01–05).
  • Activate.

8.3 Step 2: Create Data Element ZAPROV_SEQ_DTE

  • SE11 → Data Type → ZAPROV_SEQ_DTE → Create.
  • Domain: ZAPROV_SEQ.
  • Field labels: Short “Seq.”, Medium “Approval Seq.”, Long “Approval Sequence”, Heading “Approval Seq. No.”.
  • Documentation: fill as needed.
  • Activate.

8.4 Step 3: Create Table ZAPPROVAL_NOTES

As per the table definition above. After activation, check in SE16N (empty).

8.5 Step 4: Create Maintenance View ZAPPROVAL_NOTES_M

As described, with EKKO as secondary (outer join, read-only). Generate table maintenance dialog via Utilities → Table Maintenance Generator. Test with SM30.

8.6 Step 5: Enhance EKPO with Append Structure

  • SE11 → EKPO → Append Structure → ZAEKPO_QI_STATUS → Create.
  • Add field ZZQI_STATUS with data element ZQI_STATUS_DTE (you must create this data element and domain with fixed values P, F, N).
  • Activate.

8.7 Step 6: Create Database View ZAPPRV_NOTE_V

Join EKKO and ZAPPROVAL_NOTES. Select fields: EKKO-EBELN, LIFNR, AEDAT; ZAPPROVAL_NOTES-APROV_SEQ, APROV_USER, APROV_DATE, APROV_TEXT. Activate.

8.8 Step 7: Write a Report Using the View and Enhanced EKPO

Arjun writes a simple ABAP program ZR_APPROVAL_REPORT that:

  • Selects all notes from the database view and displays them in a classical list (or ALV).
  • Also fetches EKPO data for a given PO (entered via selection screen) and shows the quality status from the enhanced field ZZQI_STATUS.

The selection screen:

PARAMETERS: p_ebeln TYPE ebeln OBLIGATORY.

Report code:

REPORT zr_approval_report.

START-OF-SELECTION.
  " Fetch approval notes via database view
  SELECT ebeln, lifnr, aedat, aprov_seq, aprov_user, aprov_date, aprov_text
    FROM zapprv_note_v
    WHERE ebeln = @p_ebeln
    INTO TABLE @DATA(lt_notes).

  IF lt_notes IS INITIAL.
    WRITE: / 'No approval notes found for this PO.'.
  ELSE.
    WRITE: / 'Approval Notes for PO:', p_ebeln.
    LOOP AT lt_notes INTO DATA(ls_note).
      WRITE: / ls_note-aprov_seq, ls_note-aprov_user, ls_note-aprov_date, ls_note-aprov_text.
    ENDLOOP.
  ENDIF.

  " Fetch PO items with quality status (enhanced field)
  SELECT ebeln, ebelp, matnr, menge, meins, zzqi_status
    FROM ekpo
    WHERE ebeln = @p_ebeln
    INTO TABLE @DATA(lt_items).

  IF lt_items IS NOT INITIAL.
    SKIP 2.
    WRITE: / 'PO Item Quality Status:'.
    LOOP AT lt_items INTO DATA(ls_item).
      WRITE: / ls_item-ebelp, ls_item-matnr, ls_item-menge, ls_item-meins, ls_item-zzqi_status.
    ENDLOOP.
  ENDIF.

Screenshot Description: The report output showing approval notes block and then item list with the new ZZQI_STATUS field displaying ‘P’ or ‘F’.

8.9 Step 8: Test and Transport

Arjun tests in DEV with several POs. He enters some notes via SM30, then runs the report. Everything works. He records the transport of all objects (table, view, data elements, domain, append structure, program) in a single customizing/workbench request via SE10. Then releases for import to QAS.

9. Best Practices, Pitfalls, and Real-World Advice

9.1 Naming Conventions – A Developer’s Discipline

Always prefix custom objects with Z or Y. Use meaningful suffixes: _DTE for data element, _DOM for domain, _TT for table type, _S for structure. This makes it instantly clear what an object is. Arjun adopted ZAPROV_SEQ for domain, ZAPROV_SEQ_DTE for data element. For include structures, he used ZSTR_QI_FIELDS. Consistency across your project reduces confusion.

9.2 Documentation Is Not Optional

Fill the short description, field labels, and data element documentation. It takes five minutes now and saves hours later when someone asks “What does this field mean?” or when you generate a maintenance view and the column headers are blank. Always imagine a new team member looking at your table.

9.3 Foreign Keys and Check Tables – Use Them

They provide value help, enforce data integrity, and allow the system to perform table buffering correctly. If your custom table references a standard table, always create a foreign key. Even if you think you’ll validate in the application, defensive design prevents bad data from direct DB access or manual uploads.

9.4 Avoid Buffering for Transactional Tables Maintained via SM30

If you buffer a table that is maintained by multiple users via table maintenance, updates may not be visible immediately, leading to data inconsistencies. Only buffer read-only tables or tables that are changed very rarely and never via direct maintenance. When in doubt, leave buffering off.

9.5 The Danger of SELECT * with Append Structures

When you use SELECT * FROM ekpo, your program will return the appended field automatically. This is usually fine, but if you define a structure in your program that matches the old EKPO without the append, you’ll get a dump (CX_SY_DYN_TABLE_ILL_LINE_TYPE) when the structure and actual data don’t align. Always regenerate your structures after applying an append, or use field-specific lists to avoid field mismatches. Arjun used explicit field lists, which is safer.

9.6 Views vs CDS Views – A Glimpse Ahead

In S/4HANA, many new SAP views are built using CDS (Core Data Services) rather than SE11 database views. CDS offers annotations, aggregations, and superior performance. For your custom objects, you can still use SE11 database views for simplicity, but for complex reporting and Fiori scenarios, you will eventually want to use CDS (covered in Part 37). For now, Arjun’s simple join works perfectly as a database view.

10. Pros and Cons of Different Dictionary Objects

ObjectProsCons
Transparent TableDirect DB table, Open SQL, standardRequires domain/data element, transport
Pooled/Cluster Table(Obsolete)Not supported in S/4HANA new developments
DomainReusable, value check, conversion routinesExtra object to maintain
Data ElementLabels, documentation, F4 helpMust be created separately, but worth it
Maintenance ViewZero-code data entry, transport recordingLimited UI, not suitable for complex scenarios
Database ViewReusable join, simple SELECTRead-only for joins, no aggregations
Append StructureSAP-approved extension, upgrade-safeFlat fields only, naming conflicts possible

11. Alternatives to Standard SE11 Approaches

  • Instead of maintenance views: Use a Fiori Elements app generated from a CDS view with BOPF or RAP. This gives a modern UI but requires additional development effort. For small custom tables, maintenance view is often sufficient.
  • Instead of database views: Use CDS views if you need annotations, input parameters, or aggregation. For pure joins, database views are lighter.
  • Instead of append structures on standard tables: Use custom extension tables linked by key. This avoids any potential upgrade issues but adds complexity in joins and maintenance. SAP recommends append structures for small enhancements.

12. Conclusion and Next Steps

Arjun’s Data Dictionary work has given TechBook24 a robust approval notes solution. More importantly, he’s laid a foundation of reusable domains and data elements that will serve future developments. Every table, view, and data element he built is transportable, documented, and aligned with SAP’s best practices. You’ve walked through the same process and, if you followed along, you now have a working custom table, maintenance view, and report.

The Data Dictionary is more than a tool — it’s a language that connects business requirements to technical implementation. Mastering it means you’re no longer just writing code; you’re designing the data backbone of the enterprise. Tomorrow, in Part 33, we’ll tackle ABAP Reports and ALV — transforming raw data into interactive, user-friendly lists that end users love. You’ll learn the SALV framework, OO ALV with editable cells, and drill-down reports that make you the go-to developer for business intelligence within SAP.

Stay connected: @FreeLearning365 and tech partner @techbook24

End of Part 32 – ABAP Data Dictionary Deep Dive

Post a Comment

0 Comments