Version 11.2 (Geändert)
Database event
Parameter | Typ | Beschreibung | ||
Dieser Befehl benötigt keine Parameter | ||||
Funktionsergebnis | Numerisch | 0 | Außerhalb jeder Ausführungphase | |
eines Triggers | ||||
1 | Neuen Datensatz sichern | |||
2 | Vorhandenen Datensatz sichern | |||
3 | Datensatz löschen |
Beschreibung
Rufen Sie in einem Trigger die Funktion Database event auf, gibt sie eine Zahl zurück, die den Typ des Datenbankereignisses spezifiziert. d.h. Sie erfahren, weshalb der Trigger ausgelöst wurde.
Folgende vordefinierten Konstanten stehen zur Verfügung:
Konstante | Typ | Wert |
On Saving New Record Event | Lange Ganzzahl | 1 |
On Saving Existing Record Event | Lange Ganzzahl | 2 |
On Deleting Record Event | Lange Ganzzahl | 3 |
Führen Sie in einem Trigger Datenbankoperationen auf mehrere Datensätze aus, können Sie Umstände vorfinden normalerweise gesperrte Datensätze die die korrekte Ausführung des Triggers verhindern. Beispiel: In einer Tabelle [Produkte] werden mehrere Datensätze aktualisiert, während in der Tabelle [Rechnungen] ein Datensatz hinzugefügt wird. An dieser Stelle müssen Sie die Datenbankoperation abbrechen und einen Fehler der Datenbank zurückgeben, so dass der auslösende Prozess weiß, dass diese Operation nicht durchführbar ist. Der auslösende Prozess muss in der Lage sein, die Datenbankoperation, die vom Trigger während der Transaktion unvollständig durchgeführt wird, abzubrechen. In solch einem Fall müssen Sie bevor Sie versuchen, irgendetwas auszuführen im Trigger wissen, ob Sie in Transaktion sind. Das testen Sie mit der Funktion In transaction.
Beim Verschachteln von Triggeraufrufen, wird 4D nur durch den verfügbaren Speicherplatz beschränkt. Zum Optimieren der Triggerausführung schreiben Sie den Code Ihrer Trigger nicht nur in Bezug auf die Datenbankereignisse, sondern auch in Bezug auf die jeweilige Ebene bei verschachtelten Triggern. Beispiel: Sie wollen bei einem Datenbankereignis On delete für die Tabelle [Rechnungen] die Aktualisierung des Feldes [Kunden] Gesamtumsatz ausschalten, wenn das Löschen des Datensatzes [Rechnungen] bedeutet, dass alle Rechnungen gelöscht werden, die mit einem Datensatz [Kunden] verknüpft sind. Dafür verwenden Sie Trigger level und TRIGGER PROPERTIES.
Beispiel
Mit der Funktion Database event strukturieren Sie Ihre Trigger wie folgt:
` Trigger für [beliebigeTabelle] C_LONGINT($0) $0:=0 ` Die Datenbankanfrage wird angenommen Case of : Database event=On Saving New Record Event) ` Führt die Aktionen aus, um einen neuen Datensatz zu sichern : (Database event=On Saving Existing Record Event) ` Führt die Aktionen aus, um einen bestehenden Datensatz zu sichern : (Database event=On Deleting Record Event) ` Führt die Aktionen aus, um einen Datensatz zu löschen End case
Referenz
Einführung in Trigger, In transaction, Trigger level, TRIGGER PROPERTIES.