ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Externe Daten verarbeiten →  Datenkonsistenz →  SAP-LUW → 

COMMIT WORK

Kurzreferenz

Syntax

COMMIT WORK [AND WAIT].

Wirkung

Die Anweisung COMMIT WORK schließt die aktuelle SAP-LUW ab und öffnet eine neue. Dabei werden alle Änderungsanforderungen der aktuellen SAP-LUW festgeschrieben. Hierfür führt COMMIT WORK folgende Aktionen aus:

  1. Ausführen aller mit PERFORM ON COMMIT registrierten Unterprogramme.

    Die Reihenfolge richtet sich nach der Reihenfolge der Registrierung oder nach der dort mit dem Zusatz LEVEL angegeben Priorität. Innerhalb eines solchen Unterprogramms dürfen folgende Anweisungen nicht ausgeführt werden:

    PERFORM ... ON COMMIT|ROLLBACK
    COMMIT WORK
    ROLLBACK WORK

    Die Anweisung CALL FUNCTION ... IN UPDATE TASK darf ausgeführt werden.

  2. Auslösen eines internen Ereignisses für den Persistenzdienst der Object Services.

    Falls vom Persistenzdienst Ereignisbehandler registriert sind, sammeln diese die Änderungen an den vom Persistenzdienst verwalteten Objekten und übergeben sie per CALL FUNCTION ... IN UPDATE TASK an einen speziellen Verbuchungsfunktionsbaustein, der als letzter Verbuchungsbaustein registriert wird.

  3. Anstoß zur Verarbeitung aller mit CALL FUNCTION ... IN UPDATE TASK registrierten Verbuchungsfunktionsbausteine im Verbuchungs-Workprozess bzw. bei lokaler Verbuchung auch im aktuellen Workprozess.

    Alle Verbuchungsfunktionsbausteine hoher Priorität ("VB1") werden in der Reihenfolge ihrer Registrierung in einer gemeinsamen Datenbank-LUW ausgeführt. Falls der Zusatz AND WAIT nicht angegeben ist, wartet das Programm bei der nicht-lokalen Verbuchung nicht, bis der Verbuchungs-Workprozess sie ausgeführt hat (asynchrone Verbuchung), sondern wird sofort hinter COMMIT WORK fortgesetzt. Ist der Zusatz AND WAIT hingegen angegeben, wird die Programmverarbeitung erst dann hinter COMMIT WORK fortgesetzt, wenn der Verbuchungs-Workprozess die Verbuchungsfunktionsbausteine hoher Priorität ausgeführt hat (synchrone Verbuchung).

    Bei erfolgreichem Abschluss aller Verbuchungsfunktionsbausteine hoher Priorität werden die Verbuchungsfunktionsbausteine niedriger Priorität ("VB2") in der Reihenfolge ihrer Registrierung zusammen Verbuchungs-Workprozess in einer gemeinsamen Datenbank-LUW ausgeführt.

    Während der Verarbeitung eines mit COMMIT WORK angestoßenen Verbuchungsfunktionsbausteins darf kein Datenbank-Commit und kein Datenbank-Rollback auftreten und die Verbuchungssteuerung darf nicht beeinflusst werden. Anweisungen, die dies zur Folge hätten sind verbotene Anweisungen in der Verbuchung und führen immer direkt zu Laufzeitfehlern.

    Nach der Ausführung der Verbuchungsfunktionsbausteine hoher Priorität werden die mit CALL FUNCTION ... IN BACKGROUND registrierten Funktionsbausteine in je einer Datenbank-LUW pro Destination ausgeführt.

  4. Behandlung aller im aktuellen Programm gesetzten SAP-Sperren gemäß dem Wert des Formalparameters _SCOPE der entsprechenden Sperrfunktionsbausteine.

  5. Auslösen eines Datenbank-Commits auf allen aktuell geöffneten Datenbankverbindungen, wodurch auch die aktuelle Datenbank-LUW beendet wird und sämtliche Datenbank-Cursor geschlossen werden.

  6. Auslösen des Ereignisses TRANSACTION_FINISHED der Systemklasse CL_SYSTEM_TRANSACTION_STATE, wobei der Parameter KIND auf den Wert der Konstanten CL_SYSTEM_TRANSACTION_STATE=>COMMIT_WORK gesetzt wird.


Falls die Anweisung COMMIT WORK in speziell aufgerufenen Programmen ausgeführt wird, gelten folgende Besonderheiten:

Systemfelder

sy-subrc Bedeutung
0 Der Zusatz AND WAIT ist angegeben und die Verbuchung der Verbuchungsfunktionsbausteine war erfolgreich.
4 Der Zusatz AND WAIT ist angegeben und die Verbuchung der Verbuchungsfunktionsbausteine war nicht erfolgreich.

Die Anweisung COMMIT WORK setzt sy-subrc immer auf 0, wenn der Zusatz AND WAIT nicht angegeben ist.

Hinweise

Ausnahmen

Unbehandelbare Ausnahmen