In Navision den Löschvorgang eines Datensatzes/Records abbrechen
Nicht selten steht man als Navision-Programmierer vor der Aufgabe den Löschvorgang, den der Benutzer ausgelöst hat, zu überprüfen und dann gegebenenfalls abzubrechen. Wie bekommt man das hin?
Wie so vieles ist es ganz einfach, wenn man es weiß. Ihr geht in den OnDelete-Trigger der Navision-Tabelle, dessen Record-Löschung Ihr überprüfen wollt, und kontrolliert dort im C/AL-Code Eure Bedingung. Danach brecht Ihr dann den Löschvorgang ab.
Dies könnt Ihr mit der Exit-Funktion machen oder, wenn Ihr dem Benutzer mit einer Message-Box eine Nachricht zukommen wollt, mit der Error-Funktion.
Zum Veranschaulichen seht im Folgenden zwei Beispiele.
1. Sofortiges Abbrechen mit Verlassen der Löschroutine
Durch den C/AL-Befehl Exit wird nach Überprüfung der Bedingung sofort der OnDelete-Trigger verlassen und das Löschen abgebrochen.
IF NOT Bedingung THEN
EXIT;
2. Abbrechen mit Hinweismeldung
Nach negativer Überprüfung wird zunächst durch die ERROR-Funktion eine Messagebox ausgegeben. Nach dem Bestätigen der Nachricht wird der OnDelete-Trigger ebenfalls ohne das Löschen abzuschließen verlassen. In diesem Fall wird ein RollBack durchgeführt, dass die Änderungen rückgängig macht (solange noch kein COMMIT durchgeführt wurde).
IF NOT Bedingung THEN
ERROR('Dieser Datensatz darf nicht gelöscht werden!');
Weitere Informationen zu den Navision-Funktionen Exit, Error sowie einigen anderen Abbruch-Funktionen werden bald in einem gesonderten Artikel folgen.
Naja wenn du es genau nimmst, rufst du mit ERROR() immer einen ROLLBACK hervor, sofern du die Daten vorher nicht mit COMMIT in die Datenbank weggeschrieben hast.
Da hast Du natürlich recht, Björn. Ich hab die Erläuterung noch dazu gescrhrieben 🙂