SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
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:
-
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.
-
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.
-
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.
-
Behandlung aller im aktuellen Programm gesetzten SAP-Sperren
gemäß dem Wert des Formalparameters _SCOPE der entsprechenden Sperrfunktionsbausteine.
-
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.
-
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:
-
In einem über Batch-Input
ausgeführten Programm oder wenn das Programm mit der Anweisung
CALL TRANSACTION USING aufgerufen wurde, beendet COMMIT
WORK standardmäßig die gesamte Verarbeitung. Diese Einstellung kann bei der Anweisung
CALL TRANSACTION USING mit der Komponente RACOMMIT der Struktur CTU_PARAMS,
die an den Zusatz OPTIONS FROM übergeben wird, überschrieben werden.
-
In einem mit CALL DIALOG aufgerufenen
Programm stößt COMMIT WORK nicht die Verarbeitung von mit
PERFORM ON COMMIT und
CALL FUNCTION ... IN UPDATE TASK registrierten Unterprogrammen bzw. Funktionsbausteinen an
und schließt damit die aktuelle SAP-LUW nicht ab. Die SAP-LUW kann frühestens durch die Anweisung COMMIT WORK im aufrufenden Programm abgeschlossen werden. Nur
transaktionale Remote Function Calls oder
Background Remote Function
Calls, die mit CALL FUNCTION ... IN BACKGROUND innerhalb eines
Dialogbausteins registriert wurden, werden auch dort mit COMMIT WORK gestartet. In einem Dialogbaustein registrierte
bgRFC,
tRFC oder
qRFC, die dort nicht mit COMMIT WORK gestartet werden, werden nicht ausgeführt.
-
Die Anweisung COMMIT WORK darf nicht während der Verbuchung oder während der Ausführung von mit PERFORM ... ON {COMMIT|ROLLBACK} registrierten Unterprogrammen ausgeführt werden.
-
Die Anweisung COMMIT WORK darf nicht in Einheiten oder LUWs ausgeführt werden, die von
transaktionalen RFC-Aufrufen (bgRFC, tRFC, qRFC) verwaltet werden.
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
-
Eine SAP-LUW, die nicht durch COMMIT WORK sondern durch Beendigung des aktuellen Programms bzw. Schließen der
internen Sitzung beendet
wird, bleibt hinsichtlich der registrierten Prozeduren wirkungslos. Registrierte Verbuchungsbausteine bleiben auf der Datenbank vorhanden, können aber nicht mehr ausgeführt werden.
-
Die Anweisung COMMIT WORK schließt alle
Datenbank-Cursor. Open-SQL-Anweisungen, die danach auf einen Datenbank-Cursor zugreifen
(SELECT-Schleife und FETCH), erzeugen eine unbehandelbare Ausnahme.
-
Wenn während einer mit COMMIT angestoßenen
Verbuchung ein Laufzeitfehler auftritt, führt der Verbuchungs-Workprozess einen
Datenbank-Rollback
aus, vermerkt dies in den entsprechenden Datenbanktabellen und unterrichtet den Benutzer, dessen Programm
die Einträge erzeugt hat, per SAPMail. Nach Beseitigung der Fehlerursache können die zurückgestellten Einträge erneut verbucht werden.
-
Die Anweisung PERFORM ... ON COMMIT
darf während der Verbuchung ausgeführt werden. Das registrierte Unterprogramm muss in der aktuellen Funktionsgruppe definiert sein.
-
COMMIT WORK löst auch in Programmen, die mit CALL DIALOG aufgerufen wurden, einen Datenbank-Commit aus.
-
COMMIT WORK leert globale temporäre Tabellen aller aktuell geöffneten
Datenbankverbindungen und verhindert den Laufzeitfehler COMMIT_GTT_ERROR bei einem impliziten
Datenbank-Commit.
Ausnahmen
Unbehandelbare Ausnahmen
-
Ursache: COMMIT WORK ist innerhalb einer
FORM, die mit PERFORM ... ON COMMIT aufgerufen wird, nicht zulässig.
Laufzeitfehler: COMMIT_IN_PERFORM_ON_COMMIT
-
Ursache: COMMIT WORK ist innerhalb der Verbuchung nicht zulässig.
Laufzeitfehler: COMMIT_IN_POSTING