Ansicht
Dokumentation

ABENOS_PERSISTENCE_COMPS - OS PERSISTENCE COMPS

ABENOS_PERSISTENCE_COMPS - OS PERSISTENCE COMPS

General Data in Customer Master   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Komponenten des Persistenzdiensts

Der Persistenzdienst ist eine Softwareschicht zur Verwaltung persistenter Objekte. Diese Softwareschicht besteht aus einem allgemeinen Anteil und einem klassenspezifischen Anteil und ist aus globalen Klassen und Interfaces der Klassenbibliothek aufgebaut. Der klassenspezifische Anteil wird speziell für jede vorhandene persistente Klasse generiert.

CL_persistent

Die Klasse CL_persistent ist eine Klasse, die als persistente Klasse mit dem Class Builder angelegt wird. Die Objekte dieser Klasse werden vom Persistenzdienst verwaltet. Solche Objekte ist ein verwaltetes Objekt (ein verwaltetes Objekt muss nicht notwendigerweise persistent sein). Die SET- und GET-Methoden für die Attribute dieser Klasse wurden vom Class Builder generiert.

Die Klassen CA_persistent und CB_persistent

Zu jeder persistenten Klasse CL_persistent hat der Class Builder zwei weitere Klassen, CA_persistent und CB_persistent generiert. Diese Klassen sind der klassenspezifische Anteil des Persistenzdiensts. CB_persistent ist Unterklasse einer allgemeinen abstrakten Oberklasse CL_OS_CA_COMMON aller Klassenakteure.

CA_persistent ist der sogenannte Klassenakteur, über den das verwaltete Objekt der Klasse CL_persistent verwaltet wird und in dem die tatsächlichen Datenbankzugriffe stattfinden. Die entsprechenden Methoden erbt der Klassenakteur von der abstrakten Oberklasse CB_persistent. Ein Entwickler kann den Klassenakteur erweitern und die Methoden (insbesondere die Datenbankzugriffe) redefinieren. Die Oberklasse CB_persistent darf nicht geändert werden. Ein Klassenakteur ist ein Freund der verwalteten Klasse. Der Klassenakteur ist ein Singleton: Beim ersten Zugriff wird genau eine Instanz eines Klassenakteurs angelegt.

Interfaces für den Klassenakteur

Der Klassenakteur implementiert die Interfaces IF_OS_FACTORY, IF_OS_CA_PERSISTENCY und IF_OS_CA_INSTANCE. Die Interfacemethoden können neben den Klassenmethoden verwendet werden. Weiterhin ermöglichen die Interfaces den generischen Zugang über Interfacereferenzvariablen: In einem ABAP-Programm kann es verschiedene Klassenakteure für verschiedene persistente Klassen geben, auf die über Interfacereferenzvariablen des gleichen Typs zugegriffen werden kann. Die Interfaces stellen den allgemeinen Teil des Persistenzdiensts dar.

Verwaltungs-Interface für die persistente Klasse

Die persistente Klasse implementiert das Verwaltungs-Interface IF_OS_STATE, das einen gleichartigen Zugang zu den verwalteten Objekten verschiedener persistenter Klasse ermöglicht.

Weitere Interfaces und Klassen

Die persistente Klasse und der Klassenakteur stehen zu weiteren Interfaces und Klassen in des Persistenzdienstes in Beziehung, die aber hauptsächlich intern genutzt werden. Die Namen dieser Objekttypen, finden sich in der Definition von persistenter Klasse und Klassenakteur im Class Builder.

Das Attribut AGENT des Klassenakteurs

Das statische Attribut AGENT ist eine Referenzvariable vom Typ der Klasse CA_persistent selbst. Beim ersten Zugriff auf das Attribut in einem ABAP-Programm erzeugt der statische Konstruktor der Klasse CA_persistent genau eine Instanz dieser Klasse, auf die das Attribut AGENT zeigt. Dieses Objekt ist Teil des Persistenzdiensts und mit seinen Methoden wird das Objekt der persistenten Klasse verwaltet. Es gibt pro Programm nur ein Objekt der Klasse CA_persistent. Ein Klassenakteur verwaltet eines oder mehrere Objekte der betreffenden persistenten Klasse, die dann unterschiedliche Schlüssel haben müssen.

Die wichtigsten Methoden des Klassenakteurs

Die folgenden Methoden werden vom Class Builder beim Anlegen der persistenten Klasse generiert. Sie können in der Klasse CA_persistent redefiniert werden. Andere Methoden sind für die interne Verwendung im Persistenzdienst vorgesehen.

Von CB_persistent geerbte Methoden

  • CREATE_PERSISTENT
Erzeugt ein neues persistentes Objekt. Die Schnittstelle ist gemäß dem Mapping der persistenten Klasse auf das ABAP Dictionary generiert. Falls das persistente Objekt über sogenannte Business-Keys verwaltet wird, gibt es die entsprechenden Eingabeparameter. Falls das persistente Objekt über GUIDs verwaltet wird, wird bei Erzeugung des Objekts eine neue Instanz-GUID generiert. Unabhängig davon durch welche Schlüssel das Objekt verwaltet wird, gibt es für alle persistenten Attribute optionale Importing-Parameter. Der Rückgabewert RESULT ist vom Typ der persistenten Klasse und enthält eine Referenz auf das erzeugte persistente Objekt. Es kann in einem Programm nur ein Objekt zu einem Schlüssel existieren. Das Objekt wird durch die Anweisung COMMIT WORK auf der Datenbank gespeichert. Der Persistenzdienst überprüft bei der Erzeugung aber nicht, ob das Objekt bereits auf der Datenbank vorhanden ist. Es kommt erst zu einem Fehler, wenn versucht wird, ein vorhandenes Objekt zu speichern. Daher empfiehlt es sich, in Zweifelsfällen die Existenz mit der Methode GET_PERSISTENT zu überprüfen.
  • GET_PERSISTENT
Lädt ein persistentes Objekt von der Datenbank und erzeugt eine passende Instanz im ABAP-Programm. Die Schnittstelle ist gemäß dem Mapping der persistenten Klasse auf das ABAP Dictionary generiert. Die Methode ist nur vorhanden, falls das persistente Objekt über sogenannte Business-Keys verwaltet wird, und hat die entsprechenden Eingabeparameter. Der Rückgabewert RESULT ist vom Typ der persistenten Klasse und enthält eine Referenz auf das geladene persistente Objekt. Falls schon ein Objekt des gleichen Schlüssels im Programm vorhanden ist, wird es nicht noch einmal geladen, sondern es wird die Referenz auf das bereits geladene Objekt zurückgegeben. Änderungen an den Attributen der Instanz werden durch die Anweisung COMMIT WORK auf der Datenbank festgeschrieben.
  • DELETE_PERSISTENT
Löscht ein persistentes Objekt. Um das persistente Objekt auch auf der Datenbank zu löschen, muss die Anweisung COMMIT WORK ausgeführt werden. Die Schnittstelle ist gemäß dem Mapping der persistenten Klasse auf das ABAP Dictionary generiert. Die Methode ist nur vorhanden, falls das persistente Objekt über sogenannte Business-Keys verwaltet wird, und hat die entsprechenden Eingabeparameter.
  • CREATE_TRANSIENT
Erzeugt ein transientes Objekt der persistenten Klasse. Die Schnittstelle der Methode ist die gleiche wie die der Methode CREATE_PERSISTENT. Ein mit CREATE_TRANSIENT erzeugtes Objekt unterliegt zwar der Verwaltung des Persistenzdiensts, hat aber keinen Anschluss an die Datenbank. Es kann aber auch mit CREATE_TRANSIENT nur genau ein Objekt mit dem gleichen Schlüssel im Programm erzeugt werden.
  • GET_TRANSIENT
Besorgt die Referenz auf ein transientes Objekt der persistenten Klasse. Die Schnittstelle der Methode ist die gleiche wie die der Methode CREATE_PERSISTENT. Das Objekt muss zuvor mit CREATE_TRANSIENT angelegt worden sein. Es wird nicht auf der Datenbank nach einem entsprechenden persistenten Objekt gesucht.

Methoden des Interfaces IF_OS_FACTORY

  • IF_OS_FACTORY~CREATE_PERSISTENT
Falls die persistente Klasse nicht über Business-Keys verwaltet wird, kann statt der Klassenmethode CREATE_PERSISTENT diese Interfacemethode verwendet werden, um ein persistentes Objekt der Klasse CL_persistent zu erzeugen. Der Rückgabewert RESULT ist vom Typ der persistenten Klasse und enthält eine Referenz auf das erzeugte persistente Objekt. Bei Erzeugung des Objekts wird eine neue Instanz-GUID generiert.
  • IF_OS_FACTORY~CREATE_PERSISTENT_BY_KEY
Falls die persistente Klasse über Business-Keys verwaltet wird, kann statt der Klassenmethode CREATE_PERSISTENT diese Interfacemethode verwendet werden, um ein persistentes Objekt der Klasse CL_persistent zu erzeugen. Der Schlüssel wird dabei als Struktur, welche die Schlüsselfelder als Komponenten hat, an den generischen Parameter I_KEY vom Typ ANY übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ REF TO object und enthält eine Referenz auf das erzeugte persistente Objekt. Falls das persistente Objekt über GUIDs verwaltet wird, wird bei Erzeugung des Objekts eine neue Instanz-GUID generiert.
  • IF_OS_FACTORY~REFRESH_PERSISTENT
Veranlasst das Laden der aktuellen Attribute eines persistenten Objekts von der Datenbank in das ABAP-Programm. Hierfür wird die Referenz auf das Objekt dem Eingabeparameter I_OBJECT vom Typ IF_OS_STATE übergeben. Die aktuellen Attribute werden beim nächsten Zugriff auf ein Attribut von der Datenbank geholt (bedarfsgetriebenes Laden). Der Verwaltungszustand des Objekts muss entweder OSCON_OSTATUS_LOADED oder OSCON_OSTATUS_NOT_LOADED sein. Direkt nach Ausführung der Methode und vor einem Attributzugriff ist der Verwaltungszustand OSCON_OSTATUS_NOT_LOADED.
  • IF_OS_FACTORY~DELETE_PERSISTENT
Löscht ein persistentes Objekt. Hierfür wird die Referenz auf das Objekt dem Eingabeparameter I_OBJECT vom Typ IF_OS_STATE übergeben. Um das persistente Objekt auch auf der Datenbank zu löschen, muss die Anweisung COMMIT WORK ausgeführt werden.
  • IF_OS_FACTORY~CREATE_TRANSIENT
Falls die persistente Klasse nicht über Business-Keys verwaltet wird, kann statt der Klassenmethode CREATE_TRANSIENT diese Interfacemethode verwendet werden, um ein transientes Objekt der Klasse CL_persistent zu erzeugen. Der Rückgabewert RESULT ist vom Typ der persistenten Klasse und enthält eine Referenz auf das erzeugte persistente Objekt.
  • IF_OS_FACTORY~CREATE_TRANSIENT_BY_KEY
Falls die persistente Klasse über Business-Keys verwaltet wird, kann statt der Klassenmethode CREATE_TRANSIENT diese Interfacemethode verwendet werden, um ein transientes Objekt der Klasse CL_persistent zu erzeugen Der Schlüssel wird dabei als Struktur, welche die Schlüsselfelder als Komponenten hat, an den generischen Parameter I_KEY vom Typ ANY übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ REF TO object und enthält eine Referenz auf das erzeugte transiente Objekt.
  • IF_OS_FACTORY~RELEASE
Löst ein durch den Klassenakteur verwaltetes Objekt vollständig aus der Verwaltung des Persistenzdiensts. Hierfür wird die Referenz auf das Objekt dem Eingabeparameter I_OBJECT vom Typ IF_OS_STATE übergeben. Der Verwaltungszustand des Objekts muss entweder OSCON_OSTATUS_LOADED oder OSCON_OSTATUS_NOT_LOADED sein.

Methoden des Interfaces IF_OS_CA_PERSISTENCY

  • IF_OS_CA_PERSISTENCY~GET_PERSISTENT_BY_OID
Falls die persistente Klasse nicht über Business-Keys verwaltet wird, kann statt der Klassenmethode GET_PERSISTENT diese Interfacemethode verwendet werden, um ein persistentes Objekt von der Datenbank zu holen und eine passende Instanz im ABAP-Programm zu erzeugen. Die Kennung des Objekts wird hierfür, an den Parameter I_OID vom Typ OS_GUID übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ REF TO object und enthält eine Referenz auf das persistente Objekt.
  • IF_OS_CA_PERSISTENCY~GET_PERSISTENT_BY_KEY
Falls die persistente Klasse über Business-Keys verwaltet wird, kann statt der Klassenmethode GET_PERSISTENT diese Interfacemethode verwendet werden, um ein persistentes Objekt von der Datenbank zu holen und eine passende Instanz im ABAP-Programm zu erzeugen. Der Schlüssel wird dabei als Struktur, welche die Schlüsselfelder als Komponenten hat, an den generischen Parameter I_KEY vom Typ ANY übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ REF TO object und enthält eine Referenz auf das persistente Objekt.
  • IF_OS_CA_PERSISTENCY~GET_PERSISTENT_BY_OID_TAB
Falls die persistente Klasse nicht über Business-Keys verwaltet wird, kann diese Interfacemethode verwendet werden, um mehr als ein persistentes Objekt auf einmal von der Datenbank zu holen und passende Instanzen im ABAP-Programm zu erzeugen. Die Kennung der Objekte werden dabei in einer internen Tabelle an den Parameter I_OID_TABvom Typ INDEX TABLE übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ OSREFTAB und enthält eine Tabelle von Referenzen auf die geladenen persistenten Objekte. Für jeden Eintrag in der Tabelle der Kennungen gibt es in der Ergebnistabelle an der gleichen Position einen entsprechenden Eintrag, der entweder eine Objektreferenz auf das geladene Objekt enthält oder initial ist, wenn zur entsprechenden Kennung kein Objekt gefunden wurde. Es gibt keine entsprechende Methode im Klassenakteur.
  • IF_OS_CA_PERSISTENCY~GET_PERSISTENT_BY_KEY_TAB
Falls die persistente Klasse über Business-Keys verwaltet wird, kann diese Interfacemethode verwendet werden, um mehr als ein persistentes Objekt auf einmal von der Datenbank zu holen und passende Instanzen im ABAP-Programm zu erzeugen. Die Schlüssel der Objekte werden dabei in einer internen Tabelle, deren Zeilentyp die Schlüsselfelder als Komponenten hat, an den generischen Parameter I_KEY_TAB vom Typ INDEX TABLE übergeben. Der Rückgabewert RESULT ist vom allgemeinen Typ OSREFTAB und enthält eine Tabelle von Referenzen auf die geladenen persistenten Objekte. Für jeden Eintrag in der Schlüsseltabelle gibt in der Ergebnistabelle an der gleichen Position einen entsprechenden Eintrag, der entweder eine Objektreferenz auf das geladene Objekt enthält oder initial ist, wenn zum entsprechenden Schlüssel kein Objekt gefunden wurde. Es gibt keine entsprechende Methode im Klassenakteur. Um diese Methode zu verwenden, muss die persistente Klasse für Mehrfachzugriff generiert worden sein.
  • IF_OS_CA_PERSISTENCY~GET_PERSISTENT_BY_QUERY
Diese Interfacemethode kann verwendet werden, um mehr als ein persistentes Objekt auf einmal von der Datenbank zu holen und passende Instanzen im ABAP-Programm zu erzeugen. Dabei bestimmt ein logischer Ausdruck, der Attribute der persistenten Klasse mit frei wählbaren Parametern oder Werten vergleicht, welche persistenten Objekte geladen werden. Der logische Ausdruck wird durch eine Instanz einer Klasse, die das Interface IF_OS_QUERY implementiert, realisiert. Eine solche Instanz stellt ein Query-Objekt oder kurz eine Query dar und kann mit der Methode CREATE_QUERY des Interfaces IF_OS_QUERY_MANAGER erzeugt werden. Eine Referenz auf die Query wird an den Parameter I_QUERY übergeben. Die Vergleichswerte für die Query werden in einer internen Tabelle an den Parameter I_PARAMETER_TAB übergeben. Falls die Query höchstens drei Vergleichswerte mit elementarem Typ benötigt, können diese auch einzeln an die Parameter I_PAR1, I_PAR2 und I_PAR3 übergeben werden. Mit Hilfe der Parameter I_SUBCLASSES und I_UPTO kann bestimmt werden, ob auch Instanzen von Unterklassen der persistenten Klasse geladen werden bzw. wie viele Instanzen höchstens geladen werden. Der Rückgabewert RESULT ist vom allgemeinen Typ OSREFTAB und enthält eine Tabelle von Referenzen auf die geladenen persistenten Objekte. Eine Sortierung der Objektreferenzen kann auch über die Query bestimmt werden. Es gibt keine entsprechende Methode im Klassenakteur. Um diese Methode zu verwenden, muss die persistente Klasse für Mehrfachzugriff generiert worden sein.

Methoden des Interfaces IF_OS_CA_INSTANCE

  • IF_OS_CA_INSTANCE~GET_STATUS
Ermittelt den Verwaltungszustand eines verwalteten Objekts. Hierfür wird dem Eingabeparameter vom allgemeinen Typ REF TO object eine Referenz auf das verwaltete Objekt übergeben. Der Rückgabewert RESULT ist vom Typ OS_STATUS und kann die Werte 0, 1, 2, 3, 4 und 10 haben, was den Konstanten OSTATUS_... des Type-Pools OSCON entspricht.
  • IF_OS_CA_INSTANCE~GET_NOT_LOADED
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_NOT_LOADED (0). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.
  • IF_OS_CA_INSTANCE~GET_CREATED
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_NEW (1). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.
  • IF_OS_CA_INSTANCE~GET_LOADED
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_LOADED (2). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.
  • IF_OS_CA_INSTANCE~GET_CHANGED
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_CHANGED (3). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.
  • IF_OS_CA_INSTANCE~GET_DELETED
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_DELETED (4). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.
  • IF_OS_CA_INSTANCE~GET_TRANSIENT
Ermittelt alle vom Klassenakteur verwalteten Objekte im Verwaltungszustand OSCON_OSTATUS_TRANSIENT (10). Der Rückgabewert ist eine interne Tabelle vom allgemeinen Zeilentyp REF TO object.

Methoden von IF_OS_STATE

Das Interface IF_OS_STATE definiert eine Schnittstelle einer durch Object Services verwaltbaren Klasse, die es ermöglicht, Objekte dieser Klasse zu beobachten und zu verwalten.

  • IF_OS_STATE~INIT
Wird beim Erzeugen eines persistenten oder transienten Objektes und beim Laden eines persistenten Objektes nach dem Setzen der persistenten Attribute aufgerufen. Hier können z.B. transiente Attribute initialisiert werden, Check-Agenten oder Ereignisbehandler registriert werden.
  • IF_OS_STATE~INVALIDATE
Wird beim Löschen eines persistenten Objektes, beim Erzwingen des Nachladens eines persistenten Objektes und beim Starten einer Folgetransaktion nach dem Zurücksetzen der persistenten Attribute für persistente Objekte aufgerufen. Hier können z.B. transiente Attribute zurückgesetzt werden oder Ereignisbehandler deregistriert werden. Wird auch beim Zurücksetzen durch den UNDO-Dienst aufgerufen.
  • IF_OS_STATE~HANDLE_EXCEPTION
Wird beim Auftreten einer Ausnahme in den GET- und SET-Methoden aufgerufen und löst die Ausnahme, die als Parameter übergeben wird, aus. Hier kann eine Behandlung der aufgetretenen Ausnahmen stattfinden. Im Allgemeinen sollte die Behandlung der Ausnahmen aber vom Verwender dieser Methoden durchgeführt werden.
  • IF_OS_STATE~GET und IF_OS_STATE~SET
Diese Methoden dienen der internen Verwendung und dürfen nicht verändert werden.





General Material Data   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 22188 Date: 20240523 Time: 111046     sap01-206 ( 474 ms )