[ABAP] Auf Variablen eines anderen (übergeordneten) Reports zugreifen (Dirty Assign)

* Sinngemäße Übersetzung des Kommentars von Thomas Jung auf Seite: http://www.dataxstream.com/2009/08/use-abap-to-access-any-data-in-memory/
* "Diese Syntax-Variante ("Dirty-Assign") ist nur für den internen Gebrauch. SAP supportet diese Syntax-Variante nicht
*  und kann jederzeit in zukünftigen Releases das Statement entfernen oder die Funktionsweise ändern.
*  Ursprünglich wurde dieses Konzept vom ABAP-Debugger verwendet. Der klassische Debugger lief in der selben
*  Session wie das zu debuggende Programm. Auf diese Art und Weise konnte der Debuggger auf die Speicherwerte zugreifen.
*  Ab Release 6.40 läuft der neue ABAP-Debugger in einer separaten Session.
*  Der ABAP-Debugger greift nun remote in die laufende Debug-Session  und benutzt dazu spezielle Kernel-Methoden.
*  Irgendwann entfernt SAP den klassichen Debugger und damit auch diese Syntax-Variante."

* beliebiger übergeordneter Source-Report Name
DATA: lv_report_name TYPE string VALUE 'ZDEMO1'.

* Variablen
DATA: lv_int TYPE i VALUE 1.
DATA: it_spfli TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.

* Demo-Daten in iTab schreiben
SELECT * from spfli INTO TABLE @it_spfli.

* int-Variable aus Report holen
DATA(lv_var1) = |({ lv_report_name })LV_INT|.

* Feldsymbol zuweisen
ASSIGN (lv_var1) TO FIELD-SYMBOL(<fs_lv_int>).
* Wert ausgeben
IF <fs_lv_int> IS ASSIGNED.
  WRITE: / <fs_lv_int>.
ENDIF.

* iTab aus Report holen
DATA(lv_var2) = |({ lv_report_name })IT_SPFLI|.
* Feldsymbol für iTab kann nicht inline deklariert werden,
* da Typ noch unbekannt und deshalb Fehler bei lines( )
FIELD-SYMBOLS: <fs_it_spfli> TYPE ANY TABLE.

* Feldsymbol zuweisen
ASSIGN (lv_var2) TO <fs_it_spfli>.
* Werte ausgeben
IF <fs_it_spfli> IS ASSIGNED.
  WRITE: / lines( <fs_it_spfli> ).
ENDIF.

Links

[ABAP] OO: Inline-Deklarationen, interne Tabelle als Referenz

* Typ-Deklarationen
* Objekt Person
TYPES: BEGIN OF ty_person,
         name TYPE string,
         age  TYPE i,
       END OF ty_person.

* Tabelle mit Personen
TYPES: ty_it_person TYPE STANDARD TABLE OF ty_person WITH DEFAULT KEY.

* Objekt-Referenz auf interne Tabelle mit Vorbelegung
DATA(it_ref) = NEW ty_it_person( ( age = 10 name = 'Udo' )
                                 ( age = 20 name = 'Horst' )
                                 ( age = 30 name = 'Ulf' ) ).

* Objekt-Referenz auf Feldsymbol
ASSIGN it_ref->* TO FIELD-SYMBOL(<fs_it_person>).

* Datenausgabe
cl_demo_output=>display( <fs_it_person> ).

* Tabelle leeren
FREE: <fs_it_person>.
* Referenz löschen
FREE: it_ref.