From e3e20c72c6e0188336757990ca1c829a85f72c47 Mon Sep 17 00:00:00 2001 From: danrega <16720986+danrega@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:06:43 +0200 Subject: [PATCH] Update --- 02_Structures.md | 215 +++++++++++++++++++++++++++++++------- 03_ABAP_SQL.md | 30 ++++-- 06_Dynamic_Programming.md | 3 +- 08_EML_ABAP_for_RAP.md | 25 ++--- 4 files changed, 211 insertions(+), 62 deletions(-) diff --git a/02_Structures.md b/02_Structures.md index 5e0dc08..63bdc68 100644 --- a/02_Structures.md +++ b/02_Structures.md @@ -19,6 +19,8 @@ - [Using the CORRESPONDING Operator and MOVE-CORRESPONDING Statements](#using-the-corresponding-operator-and-move-corresponding-statements) - [Clearing Structures](#clearing-structures) - [Processing Structures](#processing-structures) + - [Structures in ABAP SQL Statements](#structures-in-abap-sql-statements) + - [Structures in Statements for Processing Internal Tables](#structures-in-statements-for-processing-internal-tables) - [Including Structures](#including-structures) - [Getting Structured Type Information and Creating Structures at Runtime](#getting-structured-type-information-and-creating-structures-at-runtime) - [Executable Example](#executable-example) @@ -631,7 +633,23 @@ struc_ref = NEW #( ). Structures are primarily used to process data from tables. In this context, structures often take on the role of a [work area](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenwork_area_glosry.htm "Glossary Entry"). The following code snippets cover only a selection. For more examples, see the cheat sheets about internal tables and ABAP SQL. -**Reading a row from a database table into a structure that has a compatible type**. Note that, since database tables are flat, the +### Structures in ABAP SQL Statements + +The following code snippets cover a selection. Find more information and code snippets in the [ABAP SQL](03_ABAP_SQL.md) cheat sheet. + + + + + + + + + + + + + + + + -... using a `SELECT` statement. Note the specified alias name and that ABAP variables like internal tables must be escaped with `@`. The addition `INTO CORRESPONDING FIELDS OF` also applies here. + + + + -READ TABLE itab ASSIGNING FIELD-SYMBOL() INDEX 2. -READ TABLE itab REFERENCE INTO DATA(dref) INDEX 3. -``` -... using a [table expression](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abentable_expression_glosry.htm "Glossary Entry"). -The code snippet shows how to read a line into a structure declared inline. The index is given in square brackets. -``` abap -DATA(ls_table_exp) = itab[ 3 ]. -``` + + + + -**Inserting a single row into a database table from a structure** using ABAP SQL statements with -[`INSERT`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapinsert_dbtab.htm). The following statements can be considered as alternatives. The third statement shows that instead of inserting a row from an existing structure, you can create and fill a structure directly. + + + + + + + + + + + + + + + + + + + + +
Subject Notes
+Reading a row from a database table into a structure that has a compatible type + + +Note that, since database tables are flat, the target structure must also be flat. In the example below, the [`SINGLE`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapselect_single.htm) addition reads only a single row into the structure. It returns the first entry that matches the `WHERE` condition. @@ -650,7 +668,15 @@ SELECT SINGLE FROM zdemo_abap_fli WHERE carrid = 'LH' INTO @DATA(ls_fli2). ``` -**Reading a row from a database table into a structure that has an incompatible type**. +
+Reading a row from a database table into a structure that has an incompatible type + + Components in the structure with identical names are filled. ``` abap @@ -658,10 +684,18 @@ SELECT SINGLE FROM zdemo_abap_fli FIELDS * WHERE carrid = 'AA' INTO CORRESPONDING FIELDS OF @ls_fli_diff. -``` -**Reading a line from an internal table into a structure** ... +``` +
+ +Reading a line from an internal table into a structure using an ABAP SQL `SELECT` statement + + +Note the specified alias name and that ABAP variables like internal tables must be escaped with `@`. The addition `INTO CORRESPONDING FIELDS OF` also applies here. ``` abap SELECT SINGLE FROM @itab AS itab_alias FIELDS * @@ -669,25 +703,17 @@ SELECT SINGLE FROM @itab AS itab_alias INTO @DATA(ls_struc). "INTO CORRESPONDING FIELDS OF @some_existing_struc. ``` -... using a `READ TABLE` statement. The code snippet below shows the reading of a line into a [work area](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenwork_area_glosry.htm "Glossary Entry"), a [field symbol](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenfield_symbol_glosry.htm "Glossary Entry"), and a [data reference variable](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abendata_reference_variable_glosry.htm "Glossary Entry"), all of which -represent structured data objects that are declared inline. In the following example, a line is read based on the line number by -specifying `INDEX`. For more details, see the section *Determining the target area* in the cheat sheet [Internal Tables](01_Internal_Tables.md#). -``` abap -READ TABLE itab INTO DATA(wa) INDEX 1. +
+Sequentially reading a row from a database table into a structure + -**Sequentially reading** ... - -... a row from a database table into a structure. A `SELECT` loop can be specified with the syntax `SELECT ... ENDSELECT.`. +A `SELECT` loop can be specified with the syntax `SELECT ... ENDSELECT.`. In the following example, the row found and returned in a structure declared inline can be processed further. ``` abap SELECT FROM zdemo_abap_fli @@ -700,16 +726,18 @@ SELECT FROM zdemo_abap_fli ENDIF. ENDSELECT. ``` -... a line from an internal table into a structure using a [`LOOP AT`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaploop_at_itab_variants.htm) statement. There are many ways to specify the condition on which the loop is based. The following example covers the option of reading all lines sequentially into a field symbol declared inline. When using a field symbol, you can, for example, directly modify components. -``` abap -LOOP AT itab ASSIGNING FIELD-SYMBOL(). - -comp1 = ... - ... -ENDLOOP. -``` +
+ +Inserting a single row into a database table from a structure using ABAP SQL statements with +[`INSERT`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapinsert_dbtab.htm) + + +The following statements can be considered as alternatives. The third statement shows that instead of inserting a row from an existing structure, you can create and fill a structure directly. Note that you should avoid inserting a row with a particular key into the database table if a row with the same key already exists. Note that with this and the followig syntax, various options/expressions are possible. ``` abap INSERT INTO dbtab VALUES @struc. @@ -718,7 +746,17 @@ INSERT dbtab FROM @struc. INSERT dbtab FROM @( VALUE #( comp1 = ... comp2 = ... ) ). ``` -**Updating a single row in a database table from a structure** using ABAP SQL statements with [`UPDATE`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapupdate.htm). Note that this syntax changes the entire row and all of its components. +
+ +Updating a single row in a database table from a structure using ABAP SQL statements with [`UPDATE`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapupdate.htm) + + +Note that this syntax changes the entire row and all of its components. ``` abap UPDATE dbtab FROM @struc. @@ -733,15 +771,117 @@ SELECT SINGLE * UPDATE dbtab FROM @( VALUE #( BASE wa comp2 = ... comp4 = ... ) ). ``` -**Updating or creating a single row in a database table from a structure** using ABAP SQL statements with -[`MODIFY`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapmodify_dbtab.htm). If a row with the same key as specified in the structure already exists in the database table, the row is updated. If no row with the keys specified in the structure exists, a new row is created in the database table. +
+ +Updating or creating a single row in a database table from a structure using ABAP SQL statements with +[`MODIFY`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapmodify_dbtab.htm) + + +If a row with the same key as specified in the structure already exists in the database table, the row is updated. If no row with the keys specified in the structure exists, a new row is created in the database table. ``` abap MODIFY dbtab FROM @struc. MODIFY dbtab FROM @( VALUE #( comp1 = ... comp2 = ... ) ). ``` -**Adding lines to and updating single lines in an internal table from a structure** using `INSERT`, -`APPEND`, and `MODIFY` statements. +
+ +Deleting a single row in a database table from a structure using ABAP SQL statements with +[`DELETE`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abapdelete_dbtab.htm) + + +If a row with the same key as specified in the structure already exists in the database table, the row is updated. If no row with the keys specified in the structure exists, a new row is created in the database table. +``` abap +DELETE dbtab FROM @struc. + +DELETE dbtab FROM @( VALUE #( comp1 = ... ) ). +``` +
+ +### Structures in Statements for Processing Internal Tables + +The following code snippets cover a selection. Find more information and code snippets in the [Internal Tables](01_Internal_Tables.md) cheat sheet. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subject Notes
+ +Reading a line from an internal table into a structure using a `READ TABLE` statement + + +The code snippet below shows the reading of a line into a [work area](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenwork_area_glosry.htm "Glossary Entry"), a [field symbol](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenfield_symbol_glosry.htm "Glossary Entry"), and a [data reference variable](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abendata_reference_variable_glosry.htm "Glossary Entry"), all of which +represent structured data objects that are declared inline. In the following example, a line is read based on the line number by +specifying `INDEX`. For more details, see the section *Determining the target area* in the cheat sheet [Internal Tables](01_Internal_Tables.md#). +``` abap +READ TABLE itab INTO DATA(wa) INDEX 1. + +READ TABLE itab ASSIGNING FIELD-SYMBOL() INDEX 2. + +READ TABLE itab REFERENCE INTO DATA(dref) INDEX 3. +``` +
+ +Reading a line from an internal table into a structure using a [table expression](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abentable_expression_glosry.htm "Glossary Entry") + + +The code snippet shows how to read a line into a structure declared inline. The index is given in square brackets. You can also specify table keys and free keys. +``` abap +DATA(ls_table_exp) = itab[ 3 ]. +``` +
+ +Sequentially reading a line from an internal table into a structure using a [`LOOP AT`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaploop_at_itab_variants.htm) statement + + +There are many ways to specify the condition on which the loop is based. The following example covers the option of reading all lines sequentially into a field symbol declared inline. When using a field symbol, you can, for example, directly modify components. +``` abap +LOOP AT itab ASSIGNING FIELD-SYMBOL(). + -comp1 = ... + ... +ENDLOOP. +``` +
+ +Adding lines to and updating single lines in an internal table from a structure using `INSERT`, +`APPEND`, and `MODIFY` statements + + - Note that all statements, including `INSERT` and `MODIFY`, are ABAP statements in this context, not ABAP SQL statements. - Both `INSERT` and `APPEND` add one or more lines to an internal table. While `APPEND` adds at the bottom of the internal table, `INSERT` can be used to add lines at a specific position in the table. If you do not specify the position, the lines are also added at the bottom of the table. However, unlike `APPEND`, `INSERT` does not set `sy-tabix`. @@ -755,6 +895,11 @@ APPEND struc TO itab. MODIFY TABLE itab FROM struc. ``` +
+

⬆️ back to top

diff --git a/03_ABAP_SQL.md b/03_ABAP_SQL.md index d1fb514..890ca68 100644 --- a/03_ABAP_SQL.md +++ b/03_ABAP_SQL.md @@ -8,7 +8,7 @@ - [Read Operations Using SELECT](#read-operations-using-select) - [Basic Syntax](#basic-syntax) - [Notes on Modern SELECT Statements](#notes-on-modern-select-statements) - - [Specifying the SELECT List and FIELDS Clause](#specifying-the-select-list-and-fields-clause) + - [Specifying the SELECT List or FIELDS Clause](#specifying-the-select-list-or-fields-clause) - [Specifying the FROM Clause](#specifying-the-from-clause) - [Specifying the Target and Related Additions](#specifying-the-target-and-related-additions) - [Specifying Clauses to Order, Group and Set Conditions for the Result Set](#specifying-clauses-to-order-group-and-set-conditions-for-the-result-set) @@ -194,9 +194,9 @@ SELECT FROM source "What data source read from

⬆️ back to top

-### Specifying the SELECT List and FIELDS Clause +### Specifying the SELECT List or FIELDS Clause -- Using the `SELECT` list/`FIELDS` clause, you define the structure of the result set. +- Using the `SELECT` list or `FIELDS` clause, you define the structure of the result set. - You can do this by specifying the columns to be read from the data source individually, or by specifying `*` to read all columns. - Syntax variants are possible. - Note that you can specify the addition `SINGLE` after `SELECT`. With `SINGLE`, it means the result set is a single row result set. Otherwise, it is a multirow result set. An appropriate data object must be specified in the `INTO` clause. @@ -321,7 +321,7 @@ SELECT * INTO .... ``` -Example using cheat sheet repository objects and demo internal table: +Example using cheat sheet repository objects, a demo internal table, and the `FIELDS` addition: ``` abap "Database table @@ -384,6 +384,11 @@ SELECT FROM dbtab FIELDS * WHERE ... INTO TABLE @itab. + +SELECT FROM dbtab + FIELDS * + WHERE ... + INTO TABLE @DATA(itab_inl). ``` @@ -403,6 +408,11 @@ SELECT SINGLE comp1, comp2, comp3 FROM dbtab WHERE ... INTO @struc. + +SELECT SINGLE comp1, comp2, comp3 + FROM dbtab + WHERE ... + INTO @DATA(struc_inl). ``` @@ -2724,15 +2734,15 @@ ENDCLASS. ### Evaluating ABAP System Fields after ABAP SQL Statements -As mentioned in several sections above, ABAP system fields such as `sy-subrc` and `sy-dbcnt` are set in the context of ABAP SQL statements, which can be evaluated. +As mentioned in several sections above, ABAP system fields such as `sy-subrc` and `sy-dbcnt` are set in the context of ABAP SQL statements, which can be evaluated, e.g. using a subsequent statement `IF sy-subrc = ...`. The following table shows a selection of values. | Statement | sy-subrc | sy-dbcnt | |---|---|---| -| `SELECT` | 0 = Values were passed successfully to a target data object
4 = Result set is empty. Typically, this means that there are no entries found (matching conditions specified). | The number of rows that were passed. | -| `INSERT` | 0 = Single row (work area specified) or all rows (internal table specified) inserted
4 = Row not or not all rows inserted (in case of multiple rows to be inserted, `ACCEPTING DUPLICATE KEYS` was specified) | The number of rows that were inserted. | -| `MODIFY` | 0 = Single row (work area specified) or all rows (internal table specified) inserted or modified
4 = Row not or not all rows inserted or modified | The number of rows that were processed. | -| `UPDATE` | 0 = Single row (work area specified) or all rows updated
4 = Row not or not all rows updated | The number of rows that were updated. | -| `DELETE` | `DELETE FROM target` variant:
0 = At least one row deleted (with `WHERE` clause specified), all or n rows deleted (without `WHERE` clause specified)
4 = No row deleted

`DELETE target FROM` variant:
0 = Row deleted (work area specified), all rows deleted (internal table specified)
4 = Row not deleted (work area specified), not all specified rows deleted (internal table specified) | The number of rows that were deleted. | +| `SELECT` | *0*: Values were passed successfully to a target data object

*4*: Result set is empty. Typically, this means that there are no entries found (matching conditions specified). | The number of rows that were passed. | +| `INSERT` | *0*: Single row (work area specified) or all rows (internal table specified) inserted

*4*: Row not or not all rows inserted (in case of multiple rows to be inserted, `ACCEPTING DUPLICATE KEYS` was specified) | The number of rows that were inserted. | +| `MODIFY` | *0*: Single row (work area specified) or all rows (internal table specified) inserted or modified

*4*: Row not or not all rows inserted or modified | The number of rows that were processed. | +| `UPDATE` | *0*: Single row (work area specified) or all rows updated

*4*: Row not or not all rows updated | The number of rows that were updated. | +| `DELETE` | `DELETE FROM target` variant:
*0*: At least one row deleted (with `WHERE` clause specified), all or n rows deleted (without `WHERE` clause specified)

*4*: No row deleted

`DELETE target FROM` variant:
*0*: Row deleted (work area specified), all rows deleted (internal table specified)

*4*: Row not deleted (work area specified), not all specified rows deleted (internal table specified) | The number of rows that were deleted. | The following example explores the setting of `sy-subrc` and `sy-dbcnt` by ABAP SQL statements using a demo database table from the cheat sheet repository. diff --git a/06_Dynamic_Programming.md b/06_Dynamic_Programming.md index 2f7eb24..09511b8 100644 --- a/06_Dynamic_Programming.md +++ b/06_Dynamic_Programming.md @@ -69,7 +69,7 @@ INTO TABLE @DATA(some_itab). ``` -- Further aspects for dynamic programming in ABAP enter the picture if you want to determine information about data types and data objects at runtime ([RTTI](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrun_time_type_identific_glosry.htm)) or even create them ([RTTC](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrun_time_type_creation_glosry.htm)). +- Further aspects of dynamic programming in ABAP enter the picture if you want to determine information about data types and data objects at runtime ([RTTI](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrun_time_type_identific_glosry.htm)) or even create them ([RTTC](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrun_time_type_creation_glosry.htm)). - In general, dynamic programming also comes with some downsides. For example: - The ABAP compiler cannot check the dynamic programming feature like the `SELECT` statement mentioned above. There is no syntax warning or suchlike. @@ -182,7 +182,6 @@ ASSIGN num TO FIELD-SYMBOL(). "symbol when assigning memory areas TYPES c_len_3 TYPE c LENGTH 3. DATA(chars) = 'abcdefg'. -table_linebetween FIELD-SYMBOLS TYPE c_len_3. "Implicit casting diff --git a/08_EML_ABAP_for_RAP.md b/08_EML_ABAP_for_RAP.md index fc10844..3f2121b 100644 --- a/08_EML_ABAP_for_RAP.md +++ b/08_EML_ABAP_for_RAP.md @@ -661,19 +661,15 @@ ENDCLASS. ## BDEF Derived Types -The operands of EML statements and parameters of handler and saver -methods are mainly special messenger tables for passing data and -receiving results or messages, i. e. the communication between a RAP BO -consumer and the RAP BO provider using EML consists (in most cases) of -exchanging data stored in internal tables that have special ABAP types - -[BDEF derived -types](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrap_derived_type_glosry.htm "Glossary Entry"). +The operands of EML statements and parameters of handler and saver methods are mainly special messenger tables for passing data and receiving results or messages, i. e. the communication between a [RAP BO consumer](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrap_bo_consumer_glosry.htm) and the [RAP BO provider](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrap_bo_provider_glosry.htm) using EML consists (in most cases) of exchanging data stored in internal tables that have special ABAP types - [BDEF derived types](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrap_derived_type_glosry.htm "Glossary Entry"). These types are tailor-made for RAP purposes. -As the name implies, the types are derived by the [ABAP runtime -framework](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_runtime_frmwk_glosry.htm "Glossary Entry") -from CDS entities and their behavior definition in the BDEF. With these -special types, a type-safe access to RAP BOs is guaranteed. +As the name implies, the types are derived by the [ABAP runtime framework](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_runtime_frmwk_glosry.htm "Glossary Entry") +from CDS entities and their behavior definition in the BDEF. With these special types, a type-safe access to RAP BOs is guaranteed. + +> **💡 Note**
+> - To explore BDEF derived types in your RAP BO, you can access the CCIMP include (*Local Types* tab in ADT) of your ABAP behavior pool, position the cursor on the methods, choose F2 and check the parameters typed with BDEF derived types. +> - As mentioned, CRUD operations are implicitly supported in managed scenarios (when specified in the BDEF). So, there will not be method declarations and implementations for CRUD operation methods.

⬆️ back to top

@@ -690,7 +686,7 @@ special types, a type-safe access to RAP BOs is guaranteed. | [`TYPE TABLE FOR`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaptype_table_for.htm) | For creating internal tables with BDEF derived types. Most RAP handler method parameters use tabular BDEF derived types. | | [`TYPE STRUCTURE FOR`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaptype_structure_for.htm) | In many cases, structures of type `TYPE STRUCTURE FOR` serve as both the [work area](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenwork_area_glosry.htm "Glossary Entry") and the line type of the internal tables. There are also structured BDEF derived types that function as types for RAP handler method parameters. | | [`TYPE RESPONSE FOR`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaptype_response_for.htm) | These types refer to the RAP response parameters `mapped`, `failed`, and `reported`. They are deep structures containing information for individual RAP BO entities. The components of these structures are internal tables of appropriate types with `TYPE TABLE FOR`. | - | [`TYPE REQUEST FOR`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaptype_request_for.htm) | The types `TYPE REQUEST FOR CHANGE` and `TYPE REQUEST FOR DELETE` are relevant for importing parameters of the save_modified RAP saver method in the context of RAP additional and unmanaged save. These BDEF derived types are deep structures containing internal tables with RAP BO instance keys and/or data for create, update, or delete operations. | + | [`TYPE REQUEST FOR`](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abaptype_request_for.htm) | The types `TYPE REQUEST FOR CHANGE` and `TYPE REQUEST FOR DELETE` are relevant for importing parameters of the `save_modified` RAP saver method in the context of RAP additional and unmanaged save. These BDEF derived types are deep structures containing internal tables with RAP BO instance keys and/or data for create, update, or delete operations. | - Find an overview of available BDEF derived types [here](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenrpm_derived_types.htm). @@ -706,7 +702,7 @@ special types, a type-safe access to RAP BOs is guaranteed. - Specifying associations defined in a BDEF preceded by `\`: For example, `DATA d4 TYPE TABLE FOR CREATE zdemo_abap_rap_ro_m\_child.`. The long form with `\\` followed by an entity name, `\`, and an association is also possible. > **💡 Note**
-> Certain types derived from BDEF can only be specified and used within implementation classes, not beyond. These types include the following: `FOR CHANGE`, `FOR DETERMINATION`, `FOR VALIDATION`, `FOR ... FEATURES`, `FOR ... AUTHORIZATION`. +> Certain types derived from the BDEF can only be specified and used within implementation classes, not beyond. These types include the following: `FOR CHANGE`, `FOR DETERMINATION`, `FOR VALIDATION`, `FOR ... FEATURES`, `FOR ... AUTHORIZATION`. BDEF derived type examples: @@ -855,10 +851,9 @@ DATA map_tab_late TYPE TABLE FOR MAPPED LATE zdemo_abap_rap_ro_m. "--------------------------------------------------------------------- "---- Excursion: Typing method parameters with BDEF derived types ---- "--------------------------------------------------------------------- -... + "TYPES tab_type TYPE TABLE FOR CREATE zdemo_abap_rap_ro_m. "METHODS some_meth IMPORTING itab TYPE tab_type. -... ```