Datenstrukturen EXPORT TO MEMORY
Die Befehle EXPORT TO MEMORY und IMPORT FROM MEMORY sind einfach zu benutzen und sind eine große Hilfe bei der Speicherung von Daten jeder Art. Mit dem Medium DATABASE werden die Daten in einer Clustertabelle gespeichert. Die bekannteste ist INDX. Zusätzlich muss ein Gebiet angegeben werden (zweistelliges Kürzel) und eine ID.
Mit folgendem kleinen Testprogramm zeige ich dir, wie du einen strukturierten Datensatz ablegen und wieder laden kannst.
Coding
REPORT. *== Typisierung der Datenstruktur TYPES: BEGIN OF ty_data, key TYPE matnr, mara TYPE mara, t_mard TYPE STANDARD TABLE OF mard WITH DEFAULT KEY, t_makt TYPE STANDARD TABLE OF makt WITH DEFAULT KEY, END OF ty_data. *== Datenstruktur DATA s_data TYPE ty_data. *== Auswahl: Import oder Export der Daten PARAMETERS p_import RADIOBUTTON GROUP mode DEFAULT 'X'. PARAMETERS p_export RADIOBUTTON GROUP mode. *== Zu lesendes Element (MaterialnummeR) PARAMETERS p_matnr TYPE matnr DEFAULT '1000002'. START-OF-SELECTION. CASE 'X'. WHEN p_export. "MARA-Daten lesen SELECT SINGLE * FROM mara INTO @s_data-mara WHERE matnr = @p_matnr. IF sy-subrc = 0. "Schlüssel setzen s_data-key = p_matnr. "Zusätzliche Tabellen lesen SELECT * FROM mard INTO TABLE @s_data-t_mard WHERE matnr = @p_matnr. SELECT * FROM makt INTO TABLE @s_data-t_makt WHERE matnr = @p_matnr. "Daten in INDX exportieren EXPORT data FROM s_data TO DATABASE indx(z1) ID p_matnr. ENDIF. WHEN p_import. "Exportierte Daten zum Schlüssel wieder einlesen IMPORT data TO s_data FROM DATABASE indx(z1) ID p_matnr. ENDCASE. "Daten im Debugger überprüfen BREAK-POINT.
Im Debugger sehen die Daten wie folgt aus:
Vorteile
Die Handhabung der beiden Befehle zum Exportieren und Einlesen der Daten ist extrem einfach. Auf diese Weise können einfache Feldleisten, interne Tabellen oder auch komplexe Datenstrukturen unkompliziert in der Datenbank abgelegt werden.
Die Testdaten zu Funktionsbausteinen werden übrigens auf diese Weise verwaltet (Clustertabelle EUFUNC und Gebiet FL).
Die Technik gibt es bereits sehr lange und dürfte ausreichend schnell und sicher in der Anwendung sein.
Nachteile
Änderbarkeit
Der große Nachteil bei der Verwendung: Die Datenstrukturen müssen immer gleich bleiben. Sobald sich die Datenstrukturen ändern, kann es sein, dass der Import alter Daten nicht mehr funktioniert. Die größte Chance auf alte Daten zuzugreifen hat man noch, wenn neue Felder ans Ende der Struktur gesetzt werden. Werden Objekte aus der Mitte der Struktur gelöscht oder eingefügt, kann die Zuordnung der Daten nicht mehr erfolgen. Es erfolgt der Laufzeitfehler CONNE_IMPORT_WRONG_COMP_TYPE. Die gute Nachricht: Du kannst den Laufzeitfehler mit der Ausnahme CX_SY_IMPORT_MISMATCH_ERROR abfangen. Die zweite gute Nachricht: es gibt eine ebenfalls recht komfortable Alternative: Daten dynamisch verwalten
Lesbarkeit
Die Daten werden in einem Datencluster abgespeichert. Dieser Cluster sieht in etwa folgendermaßen aus:
In der gespeicherten Tabelle kannst du also noch sehen, dass Einträge zu einer ID vorhanden sind, aber sie sind nicht mehr lesbar.
Typsisierung
Um die Daten aus der Clustertabelle wieder lesen zu können, musst du zwingend die Struktur der Daten kennen. Ansonsten wird es s o gut wie unmöglich, diese wieder sichtbar zu machen. Aber auch hier hilft der Tipp Daten dynamisch verwalten.
Aufruf der Befehle
Die Methode mit IMPORT TO DATABASE wird häufig in verschiedenen Programmen verwendet, um auf Daten zugreifen zu können, die eigentlich an anderer Stelle nicht mehr zur Verfügung stehen. Dadurch ist es häufig sehr schwer zu erkennen, wo das jeweilige Gegenstück des Befehls verwendet wird. Wenn du an einer Stelle über den IMPORT gestolpert bist, dann ist es eventuell sehr schwer, die Stelle zu finden, die den EXPORT macht und umgekehrt.
Aber auch hier gibt es eine einfache Lösung. Sie bedeutet einen kleinen Aufwand, sollte aber in jedem Fall gemacht werden: Der EXPORT und IMPORT der Daten wird in eine eigene Klasse ausgelagert. Export und Import erfolgen jeweils über die gleichnamige Methode der Klasse. So sind EXPORT und IMPORT für ein Objekt an einer Stelle vorhanden. Zusätzlich kann über einen Verwendungsnachweis der Aufruf ermittelt werden.
Analyse
Der Grund für diesen Artikel ist allerdings, dass ich heute erst – nachdem ich den Befehl schon mehrere Jahre lang verwendet habe – erfahren habe, dass es einen Report gibt, der die Struktur der Daten ausgibt: RSINDX00
Der Ausgabe des Reports sieht man sein Alter an… Erstellt wurde er vor über 15 Jahren. Aber, wenn alle Stricke reißen, so kann er eine gute Hilfe sein, um die gespeicherten Daten zu analysieren:
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024