[ABAP] Variablen im ABAP-Programmspeicher zwischenspeichern, IMPORT / EXPORT FROM MEMORY ID

Die Objekte sind solange im Zwischenspeicher vorhanden, wie die aktuelle Session aktiv ist.

Beispiel 1 (String)

* Name für Speicherobjekt definieren
CONSTANTS: c_mem_str TYPE char10 VALUE 'STR_TEST1'.

DATA: lv_s TYPE string VALUE 'Test123'.

INITIALIZATION.
* Variable aus dem Zwischenspeicher holen
  IMPORT lv_s FROM MEMORY ID c_mem_str.

START-OF-SELECTION.

  WRITE: / 'Alt:', lv_s.

* Speicherinhalt löschen
  DELETE FROM MEMORY ID c_mem_str.

  lv_s = ''.

* Speicherinhalt importieren
* -> Es werden nur INITIAL-Variablen überschrieben!
  IMPORT lv_s FROM MEMORY ID c_mem_str.

  WRITE: / 'Leer: ', lv_s.

* Variable verändern
  lv_s = sy-uzeit.

* Variable im Zwischenspeicher ablegen
  EXPORT lv_s TO MEMORY ID c_mem_str.

  WRITE: / 'Neu:', lv_s.

Beispiel 2 (interne Tabelle)

* Name für Speicherobjekt definieren
CONSTANTS: c_mem_itab TYPE char10 VALUE 'ITAB_STR'.

DATA: it_strings TYPE STANDARD TABLE OF string WITH DEFAULT KEY.

INITIALIZATION.
* iTab aus dem Zwischenspeicher holen
  IMPORT it_strings FROM MEMORY ID c_mem_itab.

START-OF-SELECTION.

  WRITE: / 'Alt:'.

  LOOP AT it_strings ASSIGNING FIELD-SYMBOL(<fs_line1>).
    WRITE: / <fs_line1>.
  ENDLOOP.

* Speicherinhalt löschen
  DELETE FROM MEMORY ID c_mem_itab.

  CLEAR: it_strings.

* Speicherinhalt importieren
* -> Es werden nur INITIAL-Variablen überschrieben!
  IMPORT it_strings FROM MEMORY ID c_mem_itab.

  ULINE.
  WRITE: / 'Leer:'.

  LOOP AT it_strings ASSIGNING FIELD-SYMBOL(<fs_line2>).
    WRITE: / <fs_line2>.
  ENDLOOP.

* itab mit neuen Daten füllen
  DATA: lv_tsl TYPE timestampl.
  GET TIME STAMP FIELD lv_tsl.

  it_strings = VALUE #( ( |{ lv_tsl TIMESTAMP = USER }| ) ( |{ lv_tsl TIMESTAMP = USER }| ) ( |{ lv_tsl TIMESTAMP = USER }| ) ).

* iTab im Zwischenspeicher ablegen
  EXPORT it_strings TO MEMORY ID c_mem_itab.

  ULINE.
  WRITE: / 'Neu:'.

  LOOP AT it_strings ASSIGNING FIELD-SYMBOL(<fs_line3>).
    WRITE: / <fs_line3>.
  ENDLOOP.

Weiterführende Links: Link und Link

[ABAP] Breakpoints im Code setzen

* Breakpoint im Code setzen, immer aktivieren
BREAK-POINT.

* wenn Benutzer 'XYZ' angemeldet ist, Breakpoint auslösen 
BREAK XYZ.

* wenn Benutzer 'XYZ' angemeldet ist, Breakpoint auslösen
IF sy-uname EQ 'XYZ'.
  BREAK-POINT.
ENDIF.

* Transaktion SAAB: Editieren von Checkpoint-Gruppen und zugehörigen Aktivierungsvarianten.
BREAK-POINT ID ZTEST.

[ABAP] Eindeutige ID (GUID / UUID) generieren

DATA: l_uuid_x16 TYPE sysuuid_x16.
DATA: l_uuid_c22 TYPE sysuuid_c22.
DATA: l_uuid_c26 TYPE sysuuid_c26.
DATA: l_uuid_c32 TYPE sysuuid_c32.

TRY.
    " verschiedene GUIDs / UUIDs erzeugen
    l_uuid_x16 = cl_system_uuid=>create_uuid_x16_static( ).
    l_uuid_c22 = cl_system_uuid=>create_uuid_c22_static( ).
    l_uuid_c26 = cl_system_uuid=>create_uuid_c26_static( ).
    l_uuid_c32 = cl_system_uuid=>create_uuid_c32_static( ).

  CATCH cx_uuid_error INTO DATA(e_text).
    MESSAGE e_text->get_text( ) TYPE 'I'.
ENDTRY.

WRITE: / | uuid_x16: { l_uuid_x16 } |.
WRITE: / | uuid_c22: { l_uuid_c22 } |.
WRITE: / | uuid_c26: { l_uuid_c26 } |.
WRITE: / | uuid_c32: { l_uuid_c32 } |.

[ABAP] Logische Operatoren

Bedeutung                       Operator  Ausdruck

gleich / equal                  =         a EQ '100'
ungleich / not equal            <>        a NE '100'
größer als / greater than       >         a GT '100'
größer gleich / greater equal   >=        a GE '100'
kleiner / less than             <         a LT '100'
kleiner gleich / less equal     <=        a LE '100'
zwischen, between                         a BETWEEN b and c
Initialwert                               a IS INITIAL
UND / AND                                 a = b AND c < d
ODER / OR                                 a = b OR c < d
NICHT / NOT                               a NOT IS INITIAL

* logische Ausdrücke immer in Klammern setzen und Leerzeichen beachten
NOT ( ( a < b ) OR ( d < '2.5' ) )