Ansicht
Dokumentation

/PM0/CL_DATA_CONTAINER - Datencontainer für beliebige Daten

/PM0/CL_DATA_CONTAINER - Datencontainer für beliebige Daten

PERFORM Short Reference   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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:

  1. Rufen Sie die Transaktion SE80 auf.
  2. Zeigen Sie beliebiges Coding an.
  3. Positionieren Sie den Curser an einer beliebigen Stelle.
  4. Rufen Sie die F1-Hilfe auf.
  5. 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 )