3. Dezember 2020 10:06
Ihr glaubt nicht, auf was für Ideen die End-Anwender kommen, wenn sie versuchen, sich die Arbeit einfacher zu machen.
Wir hatten selber mal das Problem, dass bei uns ständig
alle Belegzeilentexte (Add-On) zu
allen Verkaufsbelegzeilen verschwanden.
Dann hatten wir den Delete mit dem ChangeLog protokollieren lassen und konnten so den Anwender ausfindig machen, um ihn zu fragen, was er gerade gemacht hat.
Die Antwort war ganz einfach:
"Ich wollte alle Belegzeilentexte aus allen Zeilen des Auftrags löschen, also habe ich auf "Filter löschen" geklickt, alle markiert und gelöscht. Das geht viel schneller als es für jede Zeile einzeln zu machen."Das Problem: Er hat damit nicht nur den Filter auf die Zeilennr. gelöscht, sondern auch auf Belegart und Belegnr., so dass alles gelöscht wurde.
Die Lösung: Anstatt die Form (es war halt noch unter NAV 5.0) der Belegzeilentexte über das Property RunFormLink zu filtern (den der Anwender aufheben kann), haben wir alle Aufrufe auf C/AL-Code umgestellt und filtern nun die Belegart und Belegnr. in einer anderen FilterGroup, so dass der Anwender den Filter nicht mehr lösen kann. (Den Filter auf die Zeilennr. hatten wir bewusst in der FilterGroup 0 gelassen, damit sie bequem alle Texte zu allen Zeilen löschen können.
Eine Abfrage ab xxx zu löschender Datensätze halte ich für den falschen Ansatz, da es einfach zu viele Szenarien gibt, die man gar nicht sauber identifizieren kann.
In dem einen Szenario wäre vielleicht schon das Löschen von mehr als 10 Datensätzen eine Vollkatastrophe, während in einem anderen Szenario bedenkenlos auch 10.000 Datensätze gelöscht werden dürften.
Wir räumen z. B. regelmäßig alte Einträge in der Tabelle "Change Log Entry" auf. Da kann es sein, dass die Hintergrund-Session eines x-beliebigen Anwenders den Job übernimmt und zufällig zig-tausend alte Einträge zu löschen hat.
Fazit: Nicht erst eingreifen, wenn das Kind schon in den Brunnen fällt (Lösch-Counter und Confirm bzw. Error), sondern schon im Vorfeld verhindern, dass es in den Brunnen fallen kann (Filter in andere FilterGroup schieben bzw. Prüfung im OnDelete-Trigger der jeweiligen Page).
Dazu gibt es leider keine Universal-Methode, sondern man muss jedes "Upps" einzeln untersuchen und passende Lösungen dazu finden.
Wer regelmäßige Datensicherungen in der Hinterhand hat, kann die durch "Upps" verloren gegangenen Daten relativ einfach wiederherstellen.