Ansicht
Dokumentation
/PM0/CL_DATA_CONTAINER - Datencontainer für beliebige Daten
PERFORM Short Reference PERFORM Short ReferenceDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Instanzen der Klasse CL_DATA_CONTAINER können beliebige Daten (außer Referenzen) verwalten und auf der Datenbank speichern. Dabei spielt es keine Rolle, ob es sich bei den Daten um einfache Datenelemente, beliebig tiefgeschachtelte Strukturen oder Tabellen handelt. Es ist nicht notwendig, dass der den Daten zugrunde liegende Typ im DDIC existiert. Der Container ist in der Lage mit dynamisch erzeugten Typen zu arbeiten.
Weitere Informationen zu dynamischen Typen finden Sie in der ABAP-Schlüsselwortdokumentation unter RTTS RunTime Type Services
Aufruf zur ABAP-Schlüsselwortdokumentation:
- Rufen Sie die Transaktion SE80 auf.
- Zeigen Sie beliebiges Coding an.
- Positionieren Sie den Curser an einer beliebigen Stelle.
- Rufen Sie die F1-Hilfe auf.
- Wählen Sie ABAP-Übersicht
Die Dokumentation liegt unter ABAP-Schlüsselwortdokumentation -> ABAP-REFERENZ -> ABAP System-Klassen und Interfaces -> RTTS Run Time Type Services.
Die Methode SETDATA schreibt Daten beliebigen Typs unter dem Name IV_NAME in den Datencontainer.
Die Methode CHANGE_DATA ist redundant und sollte nicht mehr benutzt werden. Verwenden Sie stattdessen die Methode SETDATA.
Die Methode GETDATA liefert entweder die eigentlichen Daten oder eine Referenz auf ein Objekt vom Typ der Daten. Das ist dann sinnvoll, wenn Sie beispielsweise einen Container kopieren möchten, und nicht wissen, welche Daten im Container vorhanden sind (siehe zweites Beispiel unten).
Die Methode SAVE schreibt die Daten auf die Datenbank. Achtung, die Methode führt keinen COMMIT durch.
Beziehungen
Der Container wurde ursprünglich für das FPP (Framework for Parallel Processing) entwickelt, kann aber unabhängig davon eingesetzt werden.
Beispiel
Anlegen und Speichern eines Containers
DATA: lcl_container TYPE REF TO CL_DATA_CONTAINER,
lv_data TYPE string.
TRY.
CREATE OBJECT lcl_container EXPORTING ev_guid = 'MY_CONTAINER'.
lv_data = 'This is a test'.
CALL METHOD lcl_cont->setdata EXPORTING iv_name = 'NUMMER1'
data = lv_data.
CALL METHOD lcl_cont->save IMPORTING ev_guid = lv_guid.
COMMIT WORK.
CLEAR lcl_container.
CREATE OBJECT lcl_container EXPORTING ev_guid = 'MY_CONTAINER'.
CATCH cx_fpp_exception.
BREAK-POINT.
ENDTRY.
Kopieren eines Containers
DATA: lcl_old_cont TYPE REF TO cl_data_container,
lcl_new_cont TYPE REF TO cl_data_container,
lt_info TYPE fpp_ts_data_container_info,
ls_info TYPE fpp_s_data_container_info.
FIELD-SYMBOLS: TYPE ANY.
CREATE OBJECT lcl_old_cont EXPORTING ev_guid = 'OLD_CONTAINER'.
CREATE OBJECT lcl_old_cont EXPORTING ev_guid = 'NEW_CONTAINER'.
lt_info = lcl_old_cont->getinfo( ).
LOOP AT lt_info INTO ls_info.
CALL METHOD lcl_old_cont->getdata
EXPORTING
name = ls_info-name
CHANGING
data_ref = data_ref.
ASSIGN data_ref->* TO .
CALL METHOD lcl_old_cont->getdata
EXPORTING
name = ls_info-name
CHANGING
data = .
CALL METHOD lcl_new_cont->setdata
EXPORTING
iv_name = ls_info-name
data = .
ENDLOOP.
Hinweise
- Beim Erzeugen einer Instanz muss keine Identifizierung des Containers mitgegeben werden. In diesem Fall wird automatisch eine Kennung (GUID) für den Container beim Aufruf des Konstruktors vergeben.
- Die Methode SAVE liefert die Kennung des Containers (im Beispiel ist das "MY_CONTAINER")
- Wird eine Instanz mit einer Kennung eines bereits (auf der Datenbank) existierenden Containers erzeugt, werden automatisch die Daten dieses Containers geladen.
- Es besteht keine Beschränkung in der Anzahl der Daten, die der Container verwalten kann.
- Beim Lesen von Daten kann der Zielbereich fast beliebig sein. Lediglich der allgemeine Typ (SIMPLE,STRUCTURE, TABLE) muss mit den gespeicherten Daten übereinstimmen. Der Container führt dann einerweitertes MOVE-CORRESPONDING durch.
- Sollte sich die Struktur der gespeicherten Daten durch Änderung der zugrunde liegenden DDIC-Elemente ändern, so kann der Container die Daten lesen, solange keine Felder verkürzt werden, da das einen Datenverlust darstellen würde. Das Löschen ganzer Felder aus Strukturen sowie das Hinzufügen von Feldern stellt kein Problem dar.
- Der Container sollte nicht zum Speichern von Bewegungsdaten verwendet werden, da die interne Datenverwaltung mit XML-Serialisierung und Daten-Clustern arbeitet, was laufzeitintensiv ist.
Weiterführende Informationen
CPI1466 during Backup ROGBILLS - Synchronize billing plans
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 8036 Date: 20240426 Time: 095614 sap01-206 ( 84 ms )