Inline Deklaration – FIELD-SYMBOL( ) Empfehlung

  • Freitag, 19. Februar 2016 14:42
Artikel bewerten
(3 Stimmen)

Der neue Deklarationsoperator FIELD-SYMBOL und seine Deklarationspositionen.

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.

Letzte Änderung am %AM, %08. %473 %2016 %10:%Jun
Kommentare einblenden

Copyright © 2017 ABAP-Workbench.de