einfache Wertänderung über Referenz
* int-Variable anlegen, Wert 1
DATA(lv_int) = 1.
* Referenz auf int
DATA(o_int) = REF #( lv_int ).
* Änderung auf Wert 2
lv_int = 2.
* Ausgabe Wert 2
WRITE: / o_int->*.
* Änderung auf 3
o_int->* = 3.
* Ausgabe Wert 3
WRITE: / lv_int.
mehrfache Wertänderung über Referenz
* int-Variable anlegen, Wert 1
DATA(lv_int) = 1.
* generische Referenz auf die int-Variable
DATA(o_int) = REF data( lv_int ).
* Variable auf Wert 2 ändern
lv_int = 2.
* Zwei Feldsymbole (<i1> und <i2>) mit der Referenz verknüpfen
ASSIGN o_int->* TO FIELD-SYMBOL(<i1>).
ASSIGN o_int->* TO FIELD-SYMBOL(<i2>).
* den Wert eines der Feldsymbole ändern
<i1> = 4.
* es ändern sich durch den Bezug sogleich alle anderen Feldsymbole und Variablen mit :)
WRITE: / lv_int.
WRITE: / <i1>.
WRITE: / <i2>.
generische Referenz auf interne Tabelle
* Stringtable aus DDIC (gefüllt)
DATA(it_stringtab) = VALUE stringtab( ( |Udo| )
( |Heinz| )
( |Klaus| ) ).
* generische Referenz auf die Stringtable
DATA(o_tab) = REF data( it_stringtab ).
* Feldsymbol explizit als generische Table definieren
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.
* Feldsymbol auf die interne Tabelle mit der generischen Referenz verknüpfen
ASSIGN o_tab->* TO <tab>.
* Tabelleninhalt darstellen
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<l>).
WRITE: / <l>.
ENDLOOP.
referentieller Zugriff auf eine interne Tabelle
* Typdeklaration
TYPES: ty_it_sflight TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY.
* Tabelle anlegen
DATA(it_sflight) = VALUE ty_it_sflight( ( carrid = 'AA' connid = '0123' )
( carrid = 'LH' connid = '3210' ) ).
* generische Referenz auf die Table
DATA(o_tab) = REF data( it_sflight ).
* Feldsymbol explizit als generische Table definieren
FIELD-SYMBOLS: <tab> TYPE ty_it_sflight. " hier auch STANDARD TABLE möglich
* Feldsymbol auf die interne Tabelle mit der generischen Referenz verknüpfen
ASSIGN o_tab->* TO <tab>.
* wenn Zeilen in der Tabelle vorhanden
IF lines( <tab> ) > 0.
* erste Zeile holen und mit Feldsymbol verknüpfen
ASSIGN <tab>[ 1 ] TO FIELD-SYMBOL(<row>).
* Struktur (Felder) der ersten Zeile ermitteln
DATA(o_struct) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_data( <row> ) ).
* Anzahl Felder in der Struktur ermitteln
DATA(lv_cnt) = lines( o_struct->get_components( ) ).
* Tabelleninhalt darstellen
LOOP AT <tab> ASSIGNING <row>.
DATA(lv_row) = ||.
* Felder durchgehen
DO lv_cnt TIMES.
* Zellen einer zeile holen
ASSIGN COMPONENT sy-index OF STRUCTURE <row> TO FIELD-SYMBOL(<cell>).
* Zellinhalt ausgeben
IF sy-index = 0.
lv_row = |{ <cell> }|.
ELSE.
lv_row = |{ lv_row } \| { <cell> }|.
ENDIF.
ENDDO.
WRITE: / lv_row.
ENDLOOP.
ENDIF.