Commit Work und Commit Work and Wait

Aus SAP-Wiki
(Weitergeleitet von Commit Work)
Zur Navigation springenZur Suche springen

Siehe Kategorie: BAPI.

Siehe ABAP.

Mit dem Schlüsselbefehl "Commit Work" (bzw. mit dem Befehl "Commit Work and Wait") wird eine LUW (Logical Unit of Work) auf die Datenbank geschrieben.

Commit work

  • Beim Befehl "Commit work" werden die Verbuchungen nicht abgewartet, sondern es wird sofot nach dem Aufrufer vom "Commit Work" mit dem Coding fortgesetzt. Die Verbuchung ist asynchron.
  • Es ist Vorsicht angebracht, wenn nach dem Commit Work im Coding sehr schnell auf die Datenbanktabellen zugegriffen wird. Es ist dann möglich, dass speziell bei einem stark belasteten SAP-System die Änderungen noch nicht auf der Datenbank angekommen sind und dann der Datenbankzugriff noch den Stand vor der Änderung zeigt. In so einem Fall sollte der Schlüsselbefehl "Commit work and wait" verwendet werden und ggf. muss über einen Parameter "NO_COMMIT" (oder ähnlich) dem BAPI mitgeteilt werden, dass dieser keinen "Commit Work" absetzen darf.
  • Siehe https://blogs.sap.com/2013/01/24/commit-work-and-wait-does-not-work-as-expected-or-why-to-use-wait-up-to-xx-seconds/
commit work.

Commit work and wait

  • Beim Befehl "Commit work and wait" werden die Verbuchungen auf der Datenbank abgewartet, bis nach dem Aufrufer fortgesetzt wird. Die Verbuchung erfolgt synchron.
  • Man muss jedoch aufpassen, dass nicht innerhalb der aufgerufenen Funktionsbausteine/Methoden ein "commit work" aufgerufen wird. Ansonsten würde ein nachfolgender Befehl "commit work and wait" keine Auswirkungen mehr haben, da die LUW bereits geschlossen/festgeschrieben wurde und die Verarbeitung asynchron erfolgt. Es besteht dann keine Sicherheit die Änderungen auf der Datenbank mit einem anschließenden Select zu erfassen.
  • Oftmals gibt es bei den aufgerufen Standard-BAPIs einen Parameter "NO_COMMIT" oder ähnliches, der einen Commit Work im BAPI verhindert.
commit work and wait.

BAPI-Beispiel BAPI_BATCH_CREATE

  • Der BAPI BAPI_BATCH_CREATE ist hier ein Beispiel, wo der BAPI normalweise einen "Commit Work" absetzen würde, aber über einen Parameter kann dem BAPI mitgeteilt werden, dass er den Commit Work nicht durchführen soll. In diesem Fall muss man selber im Programm den "Commit Work", bzw. "Commit Work and Wait" auslösen.

BAPI BATCH CREATE1b.JPG


BAPI BATCH CREATE2.JPG


BAPI BATCH CREATE3.JPG

Funktionsbaustein BAPI_TRANSACTION_COMMIT

  • Der RFC-Funktionsbaustein macht in Abhängigkeit von einem Importparameter "WAIT" einen "Commit work" oder einen "Commit work and wait". Durch die RFCfähigkeit kann er der Baustein auch außerhalb von einem Freundsystem angetriggert werden.
  • Der RFC-Funktionsbaustein BAPI_TRANSACTION_ROLLBACK führt dagegen den Schlüsselbefehl "ROLLBACK WORK" aus.

CommitWork1.jpg

Web-Links