Ansicht
Dokumentation

ABENOS_TRANSACTION_MODE - OS TRANSACTION MODE

ABENOS_TRANSACTION_MODE - OS TRANSACTION MODE

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Transaktionsmodus

Da der Transaktionsdienst der Object Services in die klassische Transaktionsverarbeitung 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. Hierfür wird der Begriff Transaktionsmodus verwendet, 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. Bei ihrer Ausführung werden 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 dass man sich um die Anweisung COMMIT WORK kümmern muss. 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_MODES noch nicht ausgeführt wurde, ruft der Persistenzdienst sie mit den Standardwerten auf, die den Transaktionsmodus in den Kompatibilitätsmodus und den Verbuchungsmodus 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 Objekten 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_MODES 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_MODES beispielsweise das Ereignis LOAD-OF-PROGRAM oder der Konstruktor einer Anwendungsklasse an. Dadurch kann auch ein Programm, das nicht als Objekttransaktion 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 Objekttransaktion in der ABAP Workbench das Feld OO-Transaktionsmodell angekreuzt wird, wird bei Aufruf der Transaktion der Transaktionsmodus des zugehörigen Programms automatisch auf objektorientiert gesetzt (implizit wird CL_OS_SYSTEM=>INIT_AND_SET_MODES 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 Abschluss 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 die Verbuchungsfunktionsbausteine ausgeführt werden wird entweder bei der Initialisierung der Object Services mit der Methode CL_OS_SYSTEM=>INIT_AND_SET_MODES oder einmalig nach dem Start der Top-Level-Transaktion mit der Methode IF_OS_TRANSACTION~SET_MODE_UPDATE festgelegt. Da CL_OS_SYSTEM=>INIT_AND_SET_MODES 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 Werte:

  • OSCON_DMODE_DEFAULT, OSCON_DMODE_UPDATE_TASK für asynchrone Verbuchung
  • OSCON_DMODE_UPDATE_TASK_SYNC für die synchrone Verbuchung
  • OSCON_DMODE_LOCAL für die lokale Verbuchung
  • OSCON_DMODE_DIRECT für direktes Speichern

OSCON_DMODE_LOCAL und OSCON_DMODE_UPDATE_TASK_SYNC können im Kompatibilitätsmodus nicht angegeben werden, da sie dort durch die 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.

Beispiel

Das folgende Beispiel geht davon aus, dass das Programm im objektorientierten Transaktionsmodus läuft. Voraussetzung hierfür ist entweder eine in der Transaktionspflege als Objekttransaktion gekennzeichnete Transaktion, bei der OO-Transaktionsmodell markiert ist, oder der Aufruf der Methode INIT_AND_SET_MODES vor dem Zugriff auf ein persistentes Objekt erfolgt, wobei der Parameter I_EXTERNAL_COMMIT auf OSCON_FALSE gesetzt wird. Nur dann stößt die Methode END eine Verbuchung an. Ansonsten befindet sich das Programm im so genannten Kompatibilitätsmodus, in dem die Anweisung COMMIT WORK nach dem Ende einer Transaktion explizit angegeben werden muss.

data TM type ref to IF_OS_TRANSACTION_MANAGER.
data T  type ref to IF_OS_TRANSACTION.
...
TM = CL_OS_SYSTEM=>GET_TRANSACTION_MANAGER( ).
T  = TM->CREATE_TRANSACTION( ).
...
TRY.
    T->START( ).
      ... "Change persistent Objects
    T->END( ).
  CATCH CX_OS_ERROR.
    ...
ENDTRY.






Vendor Master (General Section)   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8560 Date: 20240523 Time: 114608     sap01-206 ( 166 ms )