[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 mem_str = 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 mem_str = lv_s FROM MEMORY ID c_mem_str.

  WRITE: / 'Leer: ', lv_s.

* Variable verändern
  lv_s = sy-uzeit.

* Variable im Zwischenspeicher ablegen
  EXPORT mem_str = 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 mem_itab = 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 mem_itab = 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 mem_itab = it_strings TO MEMORY ID c_mem_itab.

  ULINE.
  WRITE: / 'Neu:'.

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

Links

[ABAP] Verwendung von Tabstips auf dem Selektionsbildschirm

Variante 1 (Tabstrip (TabControl) verwenden)

* Tabstrip erzeugen, 10 Zeilen hoch
SELECTION-SCREEN BEGIN OF TABBED BLOCK tbl FOR 10 LINES.
SELECTION-SCREEN TAB (15) tbl_tab1 USER-COMMAND tab1 DEFAULT SCREEN 9001.
SELECTION-SCREEN TAB (15) tbl_tab2 USER-COMMAND tab2 DEFAULT SCREEN 9002.
SELECTION-SCREEN END OF BLOCK tbl.

* Subscreen 9001 für Tab1
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.
PARAMETERS: pa_test.
SELECTION-SCREEN END OF SCREEN 9001.

* Subscreen 9002 für Tab2
SELECTION-SCREEN BEGIN OF SCREEN 9002 AS SUBSCREEN.
PARAMETERS: pa_test2.
SELECTION-SCREEN END OF SCREEN 9002.

INITIALIZATION.
* Tabnamen vergeben
  tbl_tab1 = 'Tab1'.
  tbl_tab2 = 'Tab2'.

* aktiven Tab setzen, Großbuchstaben beachten
  tbl-activetab = 'TAB1'.
  tbl-dynnr = 9001.
  tbl-prog  = sy-repid.

AT SELECTION-SCREEN.
* Ereignis bei Klick auf Tabstrip abfangen
  CASE sy-ucomm.
    WHEN 'TAB1'.
      MESSAGE 'TAB1' TYPE 'S'.
    WHEN 'TAB2'.
      MESSAGE 'TAB2' TYPE 'S'.
  ENDCASE.

START-OF-SELECTION.
  WRITE: / 'Aktiver Tab:', tbl-activetab.
  WRITE: / 'Aktiver Tab Subscreen:', tbl-dynnr.
  WRITE: / 'Programmname:', tbl-prog.

Variante 2 (zuletzt gewählen Tabstrip zwischenspeichern)

* nach Listenverarbeitung wieder zurück zum Selektionsbildschirm
* und dort den letzten gewählten Tab anzeigen
CONSTANTS: gv_tbl_memory TYPE c LENGTH 10 VALUE 'TBL_ACTIVE'.

* Tabstrip erzeugen, 20 Zeilen hoch
SELECTION-SCREEN BEGIN OF TABBED BLOCK tbl FOR 10 LINES.
SELECTION-SCREEN TAB (15) tbl_tab1 USER-COMMAND tab1 DEFAULT SCREEN 9001.
SELECTION-SCREEN TAB (15) tbl_tab2 USER-COMMAND tab2 DEFAULT SCREEN 9002.
SELECTION-SCREEN END OF BLOCK tbl.

* Subscreen 9001 für Tab1
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.
PARAMETERS: pa_test.
SELECTION-SCREEN END OF SCREEN 9001.

* Subscreen 9002 für Tab2
SELECTION-SCREEN BEGIN OF SCREEN 9002 AS SUBSCREEN.
PARAMETERS: pa_test2.
SELECTION-SCREEN END OF SCREEN 9002.

INITIALIZATION.
* Tabnamen vergeben
  tbl_tab1 = 'Tab1'.
  tbl_tab2 = 'Tab2'.

* Zustand des Tabstrips aus dem Zwischenspeicher holen
  IMPORT tbl FROM MEMORY ID gv_tbl_memory.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'TAB1'.
      MESSAGE 'TAB1' TYPE 'I'.
    WHEN 'TAB2'.
      MESSAGE 'TAB2' TYPE 'I'.
  ENDCASE.

START-OF-SELECTION.
* Zustand des Tabstrips in den Zwischenspeicher ablegen
  EXPORT tbl TO MEMORY ID gv_tbl_memory.

  WRITE: / 'Aktiver Tab:', tbl-activetab.
  WRITE: / 'Aktiver Tab Subscreen:', tbl-dynnr.
  WRITE: / 'Programmname:', tbl-prog.