Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Transaktionsmodus  Dokument im Navigationsbaum lokalisieren

Da der Transaktionsdienst der Object Services in die klassischenTransaktionsverarbeitung eingebunden bzw. selbst auf SAP-LUWs aufgebaut ist, ist es wichtig für ein Programm festzulegen, mit welcher Art der Transaktionsverarbeitung es arbeitet - klassisch oder objektorientiert. Aus diesem Grund wird der Begriff Transaktionsmodus eingeführt, der einmal pro Programm festgelegt werden kann.

Jedes Programm, das mit persistenten Objekten arbeitet, hat einen Transaktionsmodus, der bei der Initialisierung der Object Services entweder explizit oder implizit festgelegt wird. Weiterhin gibt es in jedem Programm, während es mit persistenten Objekten arbeitet, eine sogenannte Top-Level-Transaktion (ein Transaktionsobjekt, dessen Referenz man sich mit der Methode IF_OS_TRANSACTION_MANAGER~GET_TOP_TRANSACTION besorgen kann), die für die Verbuchung der persistenten Objekte sorgt. Der Transaktionsmodus des Programms ist gleichzeitig der Transaktionsmodus der Top-Level-Transaktion und kann mit der Methode IF_OS_TRANSACTION~GET_MODES im Parameter E_EXTERNAL_COMMIT abgefragt werden.

Es gibt zwei Transaktionsmodi:

·        Kompatibilitätsmodus

Der Kombatibilitätsmodus (E_EXTERNAL_COMMIT ist OSCON_TRUE) erlaubt die Verwendung persistenter Objekte innerhalb klassischer SAP-LUWs. Die Anweisung COMMIT WORK muss explizit im Programm angegeben werden, um Änderungen festzuschreiben. Wie in Persistente Objekte und COMMIT WORK beschrieben, werden bei ihrer Ausführung implizit Methoden des Persistenzdiensts aufgerufen, um die Änderungen an persistenten Objekten festzuschreiben.

Im Kompatibilitätsmodus wird bei Verwendung des Persistenzdiensts implizit immer ein Verbuchungsvorgang gestartet, wodurch auch eventuell vorhandene Sperren im Verbucher gelöscht werden.

·        Objektorientierter Transaktionsmodus

Der objektorientierte Transaktionsmodus (E_EXTERNAL_COMMIT ist OSCON_FALSE) dient dazu, neue Anwendungen vollständig objektorientiert zu schreiben, ohne daß man sich um die Anweisung COMMIT WORK kümmern muß. Im objektorientierten Transaktionsmodus wird COMMIT WORK bei Aufruf der Methode END einer Top-Level-Transaktion abgesetzt. Die Anweisung COMMIT WORK ist innerhalb einer objektorientierten Transaktion verboten.

Für das Festlegen des Transaktionsmodus und die Erzeugung der Top-Level-Transaktion gibt es folgende Möglichkeiten:

·        Wenn in einem Programm vor dem erstem Zugriff auf den Persistenzdienst die Methode CL_OS_SYSTEM=>INIT_AND_SET_MODE noch nicht ausgeführt wurde, ruft der Persistenzdienst sie mit den Standardwerten auf, die den Transaktionsmodus in den Kompatibilitätsmodus und den Verbuchungsmodus (siehe unten) auf asynchron setzen. Gleichzeitig wird implizit eine Top-Level-Transaktion erzeugt und gestartet, um die persistenten Objekte des Programms zu behandeln. Alle weiteren Transaktionen, die im Programm mit IF_OS_TRANSACTION~START gestartet werden, sind dann Untertransaktionen der im Kompatibilitätsmodus laufenden Top-Level-Transaktion. Dieser Automatismus erlaubt es, in klassischen ABAP-Programmen mit persistenten Objkekten zu arbeiten, ohne sich explizit um den Transaktionsmodus zu kümmern. Ein Beispiel findet sich unter Erzeugen eines persistenten Objekts.

·        Wenn in einem Programm die Methode CL_OS_SYSTEM=>INIT_AND_SET_MODE vor dem ersten Zugriff auf den Persistenzdienst ausgeführt wird, kann durch die Übergabe der Werte OSCON_TRUE oder OSCON_FALSE an den Parameter I_EXTERNAL_COMMIT der Transaktionsmodus explizit auf Kompatibilitätsmodus bzw. objektorientierten Modus gesetzt werden. Da die statischen Konstruktoren des Persistenzdiensts in der Regel zu Beginn eines Verarbeitungsblocks ausgeführt werden, bieten sich für den Aufruf von CL_OS_SYSTEM=>INIT_AND_SET_MODE  beispielsweise das Ereignis LOAD-OF-PROGRAM oder der Konstruktor einer Anwendungsklasse an. Dadurch kann auch ein Programm, das nicht als OO-Transaktion gestartet wurde, eine objektorientierte Transaktion durchführen. Im objektorientierten Transaktionsmodus ist die erste Transaktion, die im Programm mit IF_OS_TRANSACTION~START gestartet wird, eine Top-Level-Transaktion, während im Kompatibilitätsmodus die Top-Level-Transaktion immer implizit erzeugt wird.

·        Wenn beim Anlegen einer OO-Transaktion in der ABAP Workbench das Feld OO-Transaktionsmodell angekreuzt wid, wird bei Aufruf der Transaktion der Transaktionsmodus des zugehörigen Programms automatisch auf objektorientiert gesetzt (implizit wird CL_OS_SYSTEM=>INIT_AND_SET_MODE mit entsprechenden Parametern ausgeführt). Die erste Transaktion, die im Programm mit IF_OS_TRANSACTION~START gestartet wird, ist eine Top-Level-Transaktion.

Verbuchungsmodi

Nach dem Abschluß einer Top-Level-Transaktion (mit COMMIT WORK im Kompatibilitätsmodus oder der Methode IF_OS_TRANSACTION~END im objektorientierten Modus) verbucht der Transaktionsdienst die Änderungen an persistenten Objekten auf der Datenbank, wobei implizit interne Verbuchungsfunktionsbausteine aufgerufen werden. Wie in der klassischen Verbuchung, kann für die Verbuchung ein Modus festgelegt werden.

Die Festlegung erfolgt entweder bei der Initialisierung der Object Services mit der Methode CL_OS_SYSTEM=>INIT_AND_SET_MODE oder einmalig nach dem Start der Top-Level-Transaktion mit der Methode IF_OS_TRANSACTION~SET_MODE_UPDATE. Da CL_OS_SYSTEM=>INIT_AND_SET_MODE nur einmal pro Programm aufgerufen kann, bietet IF_OS_TRANSACTION~SET_MODE_UPDATE die Möglichkeit, einen implizit gesetzten Verbuchungsmodus programmgesteuert zu ändern.

Bei beiden Methoden dient der Eingabeparameter I_UPDATE_MODE vom Typ OS_DMODE zum Setzen des Verbuchungsmodus. MögLiche Übergabewerte sind:

·        OSCON_DMODE_DEFAULT bzw. OSCON_DMODE_UPDATE_TASK für asynchrone Verbuchung,

·        OSCON_DMODE_DIRECT für direkte Verbuchung,

·        OSCON_DMODE_LOCAL für lokale Verbuchung,

·        OSCON_DMODE_UPDATE_TASK_SYNC für die synchrone Verbuchung.

OSCON_DMODE_LOCAL und OSCON_DMODE_UPDATE_TASK_SYNC sind nur im objektorientierten Transaktionsmodus erlaubt, da sie im Kompatibilitätsmodus durch ABAP-Anweisungen (COMMIT WORK AND WAIT und SET UPDATE TASK LOCAL) gesetzt werden können.

Beim Anlegen einer OO-Transaktion in der ABAP Workbench wird der initiale Verbuchungsmodus der Top-Level-Transaktion durch die Markierung eines entsprechenden Auswahlknopfs festgelegt.

 

Ende des Inhaltsbereichs