*& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT z01_demo_rtts. TYPE-POOLS: abap. "ntig, da diese Typen in RTTI-Klassen verwendet * Gegenstand des Beispiels: * es soll eine interne Tabelle erstellt werden * - Standard Table * - Zeilenstrukur: comp_c: Typ c Lnge 10 * comp_i: typ i * Statische Programmierung (Anm.: zum Nachvollziehen der Schritte bei Nutzung * der RTTS-Klassen) TYPES: lvty_c10 TYPE c LENGTH 10, lvty_i TYPE i. TYPES: BEGIN OF lsty_itabline, comp_c TYPE lvty_c10, comp_i TYPE lvty_i, END OF lsty_itabline. TYPES: ltty_itab TYPE STANDARD TABLE OF lsty_itabline WITH NON-UNIQUE KEY comp_c. DATA: gv_itab TYPE ltty_itab. "die geforderte interne Tabelle START-OF-SELECTION. * Dynamische Erzeugung einer internen Tabelle, analog zu gv_itab mittels RTTS * Elementare Komponenten sind mittels Instanzen der Klasse cl_abap_elemdescr zu beschreiben DATA: gr_elem_comp_c TYPE REF TO cl_abap_elemdescr, gr_elem_comp_i TYPE REF TO cl_abap_elemdescr. gr_elem_comp_c = cl_abap_elemdescr=>get_c( p_length = 10 ). "Komponente comp_ c gr_elem_comp_i = cl_abap_elemdescr=>get_i( ). "Komponente comp_ i * Zeilenstruktur ist durch Instanz der Klasse cl_abap_structdescr zu beschreiben DATA: gr_itabline TYPE REF TO cl_abap_structdescr. DATA: gt_components TYPE cl_abap_structdescr=>component_table, gs_components LIKE LINE OF gt_components. * bergabetabelle (Formalparameter fr create-Methode) aufbauen * 1. Komponente gs_components-name = 'COMP_C'. "Neme der Komponente gs_components-type = gr_elem_comp_c. "Instanz der Typbeschreibungsklasse APPEND gs_components TO gt_components. * 2. Komponente gs_components-name = 'COMP_I'. "Neme der Komponente gs_components-type = gr_elem_comp_i. "Instanz der Typbeschreibungsklasse APPEND gs_components TO gt_components. * Zeilenstruktur gr_itabline = cl_abap_structdescr=>create( p_components = gt_components ). * Tabellentyp ist durch Instanz der Klasse cl_abap_tabledescr zu beschreiben DATA: gr_itabdescr TYPE REF TO cl_abap_tabledescr, gt_keys TYPE abap_keydescr_tab, gs_key LIKE LINE OF gt_keys. * bergabetabelle fr Schlsselkomponenten aufbauen gs_key = 'COMP_C'. APPEND gs_key TO gt_keys. * Tabellentyp gr_itabdescr = cl_abap_tabledescr=>create( p_line_type = gr_itabline "Zeilentype via Instanz von cl _abap_strucdescr * p_table_kind = TABLEKIND_STD * p_unique = ABAP_FALSE p_key = gt_keys * p_key_kind = KEYDEFKIND_DEFAULT ). * Erzeugen der internen Tabelle unter Verwendung der Instanz der Beschreibungskl asse DATA: gr_itab TYPE REF TO data. CREATE DATA gr_itab TYPE HANDLE gr_itabdescr. * Verwenden der dynamisch erzeugten internen Tabelle (s. Kurs BC402) FIELD-SYMBOLS: <fs_itab> TYPE ANY TABLE, <fs_line> TYPE ANY, <fs_comp> TYPE ANY. ASSIGN gr_itab->* TO <fs_itab>. * Fllen der internen Tabelle mit Beispieldaten SELECT carrid fltime FROM spfli UP TO 5 ROWS INTO TABLE <fs_itab>. * Ausgeben der internen Tabelle LOOP AT <fs_itab> ASSIGNING <fs_line>. NEW-LINE. DO. ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_comp>. IF sy-subrc EQ 0. WRITE: <fs_comp>. ELSE. EXIT. ENDIF. ENDDO. ENDLOOP. *