Anfang des Inhaltsbereichs

Hintergrunddokumentation Persistente Objekte und COMMIT WORK  Dokument im Navigationsbaum lokalisieren

Um Änderungen an den Laufzeitobjekten von persistenten Klassen auch auf den eigentlichen persistenten Objekten auf der Datenbank durchzuführen, muß die ABAP-Anweisung COMMIT WORK ausgeführt werden (wobei auch COMMIT WORK AND WAIT oder COMMIT WORK nach SET UPDATE TASK LOCAL möglich ist). Wenn nicht explizit mit einer objektorientierten Transaktion des Transaktionsdiensts gearbeitet wird, muß die Anweisung COMMIT WORK explizit angegeben werden, andernfalls ist sie im Transaktionsdienst gekapselt (Die explizite Angabe der Anweisung COMMIT WORK, die wir hier beschreiben, bedeutet im Rahmen des Transaktiondiensts, daß die Top-Level-Transaktion im Kompatibilitätsmodus läuft).

Bei Verwendung in Verbindung mit den Object Services hat die klassische Anweisung COMMIT WORK eine erweiterte Funktionalität. Bevor sie die SAP-LUW abschließt und eine Verbuchung anstößt, werden intern Methoden des Persistenzdiensts aufgerufen, welche die Änderungen an den vom Persistenzdienst verwalteten Objekten sammeln und sie über CALL FUNCTION ... IN UPDATE TASK an einen speziellen Verbuchungsfunktionsbaustein übergeben. Der Persistenzdienst arbeitet also letzendlich mit den Mitteln der klassischen Verbuchung. Der Verbuchungsfunktionsbaustein wird in der Regel nach eventuell bereits registrierten Verbuchungsfunktionsbausteinen registriert. Dann wird die Verbuchung angestoßen und die Verbuchungsbausteine werden vom Verbucher in der Reihenfolge ihrer Registrierung ausgeführt.

Nach der Anweisung COMMIT WORK sind die Attribute eines persistenten Objekts im ABAP-Programm initial (die Methode IF_OS_STATE~INVALIDATE wurde aufgerufen).

Lokaler Update

Falls die Änderungen an verwalteten Objekten direkt, also nicht durch den Verbucher ausgeführt werden sollen, muß der Verbuchungsmodus des implizit genutzten Transaktionsdiensts verändert werden, indem vor der Anweisung COMMIT WORK folgendes ausgeführt wird:

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->GET_CURRENT_TRANSACTION( ).
T->SET_MODE_UPDATE( OSCON_DMODE_DIRECT ).
COMMIT WORK.

Dabei wird aus Gründen der Datenbank-Konsistenz intern mit SET UPDATE TASK LOCAL die lokale Verbuchung eingeschaltet. Falls in diesem Fall bereits Verbuchungsbausteine im Verbucher registriert sind, kommt es zu einer Ausnahme. Zusätzliche klassische Verbuchungsbausteine können erst nach dem Setzen des Modus registriert werden und werden dann ebenfalls lokal verbucht.

Ende des Inhaltsbereichs