Schlüsselbefehl export to memory/import from memory

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Eine einfache Möglichkeit Daten zwischen verschiedenen Programmen zu übertragen, ohne eine direkte Parameterverbindung oder globale Variablen zwischen den Programmen zu haben, besteht in dem Befehl "export to memory", bzw. "import from memory".

Der ABAP-Memory hat eine sehr begrenzte Lebensdauer und es ist nur sinnvoll den Memory zu nutzen, wenn man in einem Prozess ist, dessen Programmeinheiten hintereinander durchlaufen werden. Sonst können die Programmeinheiten ihre Daten nicht über den ABAP-Memory austauschen.

Verwandt mit dem Befehl ABAP-Memory ist der SAP-Memory (SPA/GPA Parameter).

Ein moderneres und objektorientiertes Konzept, um flexibel Daten austauschen zu können, ist ABAP Shared Memory Objects.

Lebensdauer der Daten

Alle Daten, die mit "export to memory" abgelegt sind, stehen nur zur Verfügung

  • für den gleichen SAP-Benutzer
  • In der gleichen SAP-Anmeldung
  • Im gleichen Modus
  • Im gleichen Workprozeß


Oder anders ausgedrückt

  • Ein anderer SAP-User kann nicht auf den ABAP-Memory zugreifen, den ein anderer SAP-User gefüllt hat
  • Meldet sich ein User ab und erneut an, sind alle seine Daten im ABAP-Memory gelöscht
  • Öffnet ein SAP-User einen neuen Modus, steht ihm dort der ABAP-Memory nicht mehr zur Verfügung, den er in einem anderen Modus gefüllt hat.
  • Wird ein Job angelegt und der "Export to Memory" beim Ablegen des Jobs durchlaufen, dann kann beim Ausführen des Jobs nicht mehr mit "Import from Memory" auf den gefüllten Memory zugegriffen werden

Datenstrukturen

Daten können sein

  • Variablen
  • Strukturen
  • Tabellen

Export to memory id/Import from memory id

Es ist dringend zu empfehlen den Zusatz "export to memory id", bzw. "import from memory id" zu verwenden, damit Memory klar einer ID im Memory zugeordnet ist. Ansonsten können unvorhersehbare Effekte eintreten, wenn verschiedene Daten sich gegenseitig überschreiben.

Obsolete Syntax

Export to memory id

Der String "Test" wird im Memory mit der ID "TESTMEMORY" abgelegt

 Data: lv_test type char10.

 lv_test = 'Test'.

 export lv_test to memory id 'TESTMEMORY'.

Import from memory id

Nun kann im anderen Programm der Wert aus dem Memory wieder ausgelesen werden in einer gleichnamige Variable LV_TEST.

 Data: lv_test type char10.

 import lv_test from memory id 'TESTMEMORY'.

Aktuelle Syntax Export/Import memory

Nun werden der "Export" und "Import" etwas anders geschrieben. Vorher mussten die Variablen gleichnamig sein. Das ist mit der neuen Syntax nicht mehr nötig. Die obsolete Syntax (s. o.) ist in Klassen nicht mehr erlaubt.

Export to memory id

Data: lt_ekpo_exp type ZSRMT_VG_EKPO_MARK,

EXPORT ekpo FROM lt_ekpo_exp TO MEMORY ID 'EKPOMARK'.

Import from memory id

Der Name EKPO muss hier gleichnamig zum Namen EKPO beim Export sein und die Memory ID EKPOMARK, aber nicht der Variablenname, der beim Import LT_EKPO_IMP ist, aber beim Export LT_EKPO_EXP. Es würde natürlich auch nicht nachteilig sein, wenn ebenfalls die Variablennamen gleich sind.

Data: lt_ekpo_imp type ZSRMT_VG_EKPO_MARK,

IMPORT ekpo TO lt_ekpo_imp  FROM MEMORY ID 'EKPOMARK'.

free memory

  • Der Befehl "free memory" löscht den gesamten Memory.
  • Der Befehl "free memory id <id>" löscht nur die genannte ID vom Memory.
  • Wird mit dem Befehl "export to memory id <id>" der Memory mit der genannten ID geschrieben, wird der alte Wert im Memory komplett gelöscht. Hier ist ein expliziter "free memory id <id>" also nicht nötig.

Web-Links