Interne Tabelle mit COMPONENTS
Hier wird eine interne Tabelle anhand von einer beliebigen Anzahl Feldern generiert.
Die Tabelle, aus der die Daten gelesen werden sollen, muss angegeben werden. Dann müssen die Felder EINZELN in der Select-Option eingetragen werden. Die Feldnamen müssen mit dem Namen des Datenelements übereinstimmen.
Eine schönere Version wäre die Komponenten der angegebenen Tabelle zu ermitteln (CL_ABAP_STRUCTDESCR->GET_COMPONENTS).
Achtung:
Es erfolgt keine Prüfung ob die Felder in der Tabelle vorhanden sind! Wenn Feldnamen angegeben werden, die nicht in der angegebenen Tabelle existieren, kommt es zu einem Dump!
Es erfolgt keine Ausgabe der Daten!
Coding
*== Create internal table dynamically by given fields DATA: gr_element TYPE REF TO cl_abap_elemdescr, gr_struc TYPE REF TO cl_abap_structdescr, gr_table TYPE REF TO cl_abap_tabledescr, gt_comp TYPE cl_abap_structdescr=>component_table, gs_comp LIKE LINE OF lt_comp, gr_data TYPE REF TO data, gt_fields TYPE STANDARD TABLE OF string, hf_fieldname TYPE fieldname. FIELD-SYMBOLS <table> TYPE ANY TABLE. *== selection screen PARAMETERS p_table TYPE tabname DEFAULT 'MARA'. SELECT-OPTIONS s_fields FOR hf_fieldname. START-OF-SELECTION. LOOP AT s_fields. CLEAR: gs_comp. *== Element Description for field gr_element ?= cl_abap_elemdescr=>describe_by_name( s_fields-low ). *== Field name gs_comp-name = s_fields-low. *== Field type (element) gs_comp-type = gr_element. *== add element to components table APPEND gs_comp TO gt_comp. *== add column to selection table APPEND s_fields-low TO gt_fields. ENDLOOP. *== Create structure/ work area gr_struc = cl_abap_structdescr=>create( gt_comp ). *== create table by structure reference gr_table = cl_abap_tabledescr=>create( p_line_type = gr_struc p_table_kind = cl_abap_tabledescr=>tablekind_std p_unique = abap_false ). *== create data handle for table CREATE DATA gr_data TYPE HANDLE gr_table. *== assign data to table-pointer ASSIGN gr_data->* TO <table>. *== Select data into dynamic internal table SELECT (gt_fields) FROM (p_table) INTO CORRESPONDING FIELDS OF TABLE <table> UP TO 10 ROWS.
Letzte Artikel von Enno Wulff (Alle anzeigen)
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024