You are on page 1of 2

*&

---------------------------------------------------------------------*
*& Report Z01_DEMO_RTTS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z01_demo_rtts.
TYPE-POOLS: abap. "nötig, da diese Typen in RTTI-Klassen verwendet
* Gegenstand des Beispiels:
* es soll eine interne Tabelle erstellt werden
* - Standard Table
* - Zeilenstrukur: comp_c: Typ c Länge 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 für 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 für Schlüsselkomponenten 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>.
* Füllen 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.
*