z.B. bei der Dereferenzierung:
ASSIGN lr_dref->* to FIELD-SYMBOL()<fs_data>).
oder bei einem Tabellenloop:
LOOP AT itab ASSIGNING FIELD-SYMBOL().
"do something
ENDLOOP.
oder bei einem Tableread:
READ READ TABLE itab ASSIGNING FIELD-SYMBOL()
"do something
Hinweis für die Dereferenzierung
REPORT z_temp_spielwiese.
DATA lr_itab_rows TYPE REF TO data.
ASSIGN lr_itab_rows->* TO FIELD-SYMBOL(<fs_itab_rows>).
LOOP AT <fs_itab_rows> ASSIGNING FIELD-SYMBOL(<fs_itab_line>).
WRITE <fs_itab_line>-matnr.
ENDLOOP.
Warum erhalte ich hier eine Fehlermeldung?
Mir selbst ist es noch nicht ganz klar, aber durch das debugging konnte ich ein wenig Erkenntniss darüber erlangen.
Der Inhalt (Tabelle) lr_itab_rows->* ist derzeit vom Typ "ANY". Es besitzt keine Struktur, demzufolge keine Komponenten. Somit ist die Tabelle derzeit nicht loopbar. Durch die Dereferenzierung habe ich den Typ "ANY" ebenfalls an das Feld Symbol übergeben. Somit kann der Kernel diesen LOOP befehl nicht richtig interpretieren.
Um dieses Problem zu meiden bleibt euch nur die Möglichkeit, in diesem Fall auf die Inline Deklaration zu verzichten bzw. das Feld Symbol vorher zu deklarieren und zu typisieren.
FIELD-SYMBOLS <fs_itab_rows> TYPE ANY TABLE.
durch die Bekanntgabe des Typs any Table kann ich nun über dieses Feldsymbol loope.
ASSIGN lr_itab_rows->* TO <fs_itab_rows>.
LOOP AT <fs_itab_rows> ASSIGNING FIELD-SYMBOL(<line>).
*--> deine weitere Implementierung
ENDLOOP.
Warum funktioniert es im SAP Beispiel?
TYPES t_itab TYPE TABLE OF i
WITH NON-UNIQUE KEY table_line.
DATA(dref) = NEW t_itab( ( 1 ) ( 2 ) ( 3 ) ).
ASSIGN dref->* TO FIELD-SYMBOL(<itab>).
LOOP AT <itab> ASSIGNING FIELD-SYMBOL(<line>).
...
ENDLOOP.
Durch die Funktion DATA() = NEW type () wird der Typ nicht als type ref to data sondern direkt als type des angegebenen Tabellentyps. Somit ist das Feld Symbol nicht vom typ any sondern des Tabellentyps
Ich hoffe ich konnte euch einen kleinen Eindruck verschaffen. Über Feedback würde ich mich freuen.
In diesem Sinne
Blogging is a conversation, not a code.