Interne Tabellen sind eine sehr praktische Erfindung und im Vergleich zu Collections aus anderen Programmiersprachen auch sehr einfach zu benutzen. Leider kommt es aber hin und wieder vor, dass man den Aufbau einer internen Tabelle zum Zeitpunkt der Entwicklung nicht kennt, sondern diese dynamisch zur Laufzeit erzeugen muss. An wirklich üblen Tagen besteht diese Tabelle dann auch noch aus tiefen Strukturen. Also mit Tabellen in Tabellenzeilen. Dieser kleine Report soll kurz und bündig erklären, wie man zur Laufzeit interne Tabellen mit tiefen Strukturen dynamisch erstellen kann.
PROGRAM ZCREATE_TABLE TYPE-POOLS: abap. DATA: obj_table TYPE REF TO cl_abap_tabledescr, obj_struc TYPE REF TO cl_abap_structdescr. DATA: lt_component TYPE abap_component_tab, wa_component TYPE abap_componentdescr. DATA: obj_data TYPE REF TO data. FIELD-SYMBOLS: <lt_table> TYPE ANY TABLE. CLEAR wa_component. wa_component-name = 'STREET'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. CLEAR wa_component. wa_component-name = 'POST_CODE'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. CLEAR wa_component. wa_component-name = 'CITY1'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. obj_struc = cl_abap_structdescr=>create( lt_component ). FREE: lt_component. CLEAR wa_component. wa_component-name = 'PARTNER'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. CLEAR wa_component. wa_component-name = 'NAME_ORG1'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. CLEAR wa_component. wa_component-name = 'NAME_ORG2'. wa_component-type ?= cl_abap_typedescr=>describe_by_name( 'STRING' ). INSERT wa_component INTO TABLE lt_component. CLEAR wa_component. wa_component-name = 'ADDR_TABLE'. wa_component-type ?= cl_abap_tabledescr=>create( obj_struc ). INSERT wa_component INTO TABLE lt_component. obj_struc = cl_abap_structdescr=>create( lt_component ). obj_table ?= cl_abap_tabledescr=>create( obj_struc ). FREE: lt_component. CREATE DATA obj_data TYPE HANDLE obj_table. ASSIGN obj_data->* TO <lt_table>.
Im ersten Teil des Codings wird eine Tabellen zum Aufnehmen von Adressinformationen erzeugt. Danach wird eine weitere Tabelle für Kundeninformationen erstellt. Diese zweite Tabelle inkludiert dann die zuvor erzeugte Adresstabelle.
Comments are closed.