COMMIT

Beendet die aktuelle Schreibtransaktion.

Hinweise

Als COMMIT bezeichnet man bei Datenbanken den erfolgreichen Abschluss einer Transaktion. Das Ergebnis der Verarbeitungsschritte wird, in der Regel durch die SQL-Funktion COMMIT, dauerhaft gespeichert. Im Gegensatz dazu werden alle Einzelschritte einer Transaktion bei einem Rollback zurückgesetzt und setzt das System in den Ausgangszustand zurück. Ein Rollback findet in Dynamics NAV statt, sobald ein Fehler während der Verarbeitung auftritt.

Ohne einen expliziten Aufruf der COMMIT-Funktion im C/AL Code, findet ein COMMIT erst statt, nachdem der gesamte Code durchlaufen wurde.

Ist die Durchführung mehrerer Transaktionen erforderlich, dann muss die COMMIT-Funktion verwendet werden um eine Transaktion zu beenden, bevor die nächste gestartet werden kann. Tritt ein Fehler während der zweiten Transaktion auf, dann findet lediglich für die zweite Transaktion ein Rollback statt. Alle Änderungen durch die erste Transaktion bleiben somit erhalten.

Um daher inkonsistenten Daten vorzubeugen, ist die bedachte Verwendung der COMMIT-Funktion von großer Bedeutung. Wird beispielsweise ein COMMIT zwischen der Löschung von Verkaufskopf und Verkaufszeilen verwendet und es tritt ein Fehler während der Löschung der Verkaufszeilen auf, bleiben Verkaufszeilen bestehen, obwohl der Verkaufskopf bereits gelöscht wurde.

Zusätzlich sorgt ein COMMIT mit dem Abschluss einer Transaktion auch dazu, dass alle Tabellensperrungen aufgehoben werden. Wird ein Datensatz neu angelegt oder modifiziert, gilt für diesen Datensatz eine Sperre. Wird diese Transaktion durch ein COMMIT abgeschlossen, so kann eine weitere Person diesen Datensatz wieder bearbeiten, auch wenn der Datensatz in einer zweiten Transaktion erneut bearbeitet werden soll. Wird der Datensatz in der zweiten Transaktion nicht erneut aus der Tabelle gelesen, erscheint eine entsprechende Fehlermeldung, dass ein anderer Anwender den Datensatz in der Zwischenzeit angepasst hat. Dies wird durch Beispiel 3 veranschaulicht.

Beispiel 1

Folgender Pseudo-Code veranschaulicht die praktische Anwendung.

BeginWriteTransactions
(C/AL Statements) // Schreibtransaktion 1
COMMIT
(C/AL Statements) // Schreibtransaktion 2
EndWriteTransactions

Zu Beginn wird automatisch eine Schreibtransaktion gestartet. Mit der COMMIT-Funktion beenden Sie die erste Schreibtransaktion und bereiten sich auf die zweite vor. Wenn der Code abgeschlossen ist, wird die zweite Schreibtransaktion automatisch beendet.

Beispiel 2

Zunächst wird eine neue Variable hinterlegt.

Name Datentyp Subtyp
Item Record Item

Anschließend wird folgender C/AL-Code eingefügt.

WITH Item DO BEGIN
  INIT;
  Description := 'Vor dem Commit';
  INSERT(TRUE);
  COMMIT;
  Description := 'Nach dem Commit';
  MODIFY(TRUE);
  ERROR('Laufzeitfehler');
END;

Sobald der Code ausgeführt wird, erscheint das folgende Ergebnis.

Laufzeitfehler

Hieran ist zu erkennen, dass durch die Ausführung der COMMIT-Funktion das Einfügen des Artikels trotz anschließender Fehlermeldung erhalten bleibt. Alle Änderungen nach dem COMMIT wurden durch das Rollback zurückgesetzt.

Artikel mit "Vor dem Commit" im Beschreibungsfeld.

Beispiel 3

Zunächst wird eine neue Variable hinterlegt.

Name Datentyp Subtyp
Item Record Item

Anschließend wird folgender C/AL-Code eingefügt und ausgeführt:

WITH Item DO BEGIN
  INIT;
  "No." := '142142';
  INSERT;
  Description := 'Test Neu';
  MODIFY;

  COMMIT;

  IF NOT CONFIRM('Warten auf zweiten Benutzer') THEN
    EXIT;
  Description := 'Test unerreichbar';
  MODIFY;
END;

Anschließend wird folgender C/AL-Code in einer separaten Codeunit mit derselben Variable eingefügt und ausgeführt sobald „Warten auf zweiten Benutzer“ angezeigt wird.

WITH Item DO BEGIN
  GET('142142');
  Description := 'Modifizierung durch zweiten Benutzer';
  MODIFY;
END;
Der Datensatz für 'Artikel' wurde von einem anderen Benutzer geändert, nachdem er von Ihnen aus der Datenbank abgerufen wurde. Geben Sie Ihre Änderungen im aktualisierten Fenster erneut ein, oder führen Sie die unterbrochene Aktivität erneut aus.