Alle Events werden nur im UserInterface-Kontext ausgeführt, d.h. es muß jemand vor der Maschine sitzen und - mit Taste und Maus bewaffnet - etwas tun. Alles, was im Backend passiert, tangiert diese Dinge nicht.
Das ist extrem wichtig zu wissen. Wenn ich sehe, was manche Kollegen an inhaltlicher Logik in ihren Masken in ein Queryopen und POSTOPEN und sonstwohin programmieren - und dann mit einem COMPUTEWITHFORM an anderer Stelle gleich wieder umgehen, dann kann man ahnen, warum so viele Inkonsistenzen entstehen.
Löschen kannst du Dokumente auf mehrere Arten. Die Bekannteste ist die, aus einer Ansicht heraus kein Dokument zu markieren und das aktuelle Dokument mit der ENTF-Taste zu beglücken. Du kannst auch mehrere Dokumente markieren (Haken setzen), dich auf ein anderes Dokument stellen und dann die ENTF-Taste drücken. Jetzt wird nicht das aktuelle Dokument, sondern es werden die selektierten Dokumente in den Orkus gejagt. Spitzenreiter für das unerklärliche Verschwinden und damit beliebteste Methode der Löschung eines Dokuments ist und bleibt das Drücken der ENTF-Taste innerhalb eines Dokuments im Lesemodus (während der Anwender denkt, er sei im Edit-Modus - und damit er das nicht unterscheiden kann, programmieren die Jungprogrammierer so gern ihre Masken mit den Feldern im Betriebssystem-Stil). Eigentlich möchte er einen Buchstaben löschen, löscht aber das ganze Dokument und steht im nächsten Dokument. Verwirrung kommt auf. Auf Verwirrung reagiert der Anwender mit Angst. Angst löst den Fluchtimpuls aus, der Fluchtimpuls hat eine eigens dafür vorgeshene Taste, die ESCAPE-Taste. Damit verläßt der Anwender die Datenbank. Je nach Einstellung der wiederherstellbaren Löschungen wird ohne oder mit Nachfrage gelöscht.
Da es diese verschiedenen Stellen gibt, an denen du eine Dokumentlöschung initiieren kannst, ist das zugehörige Event im Datenbankscript (und nicht bei den Masken oder Views) zugeordnet. Die einfachste Methode, die Löschung durch die ENTF-Taste auszuschalten, ist die, dort einfach nur den klassischen Einzeiler CONTINUE=FALSE reinzuschreiben. Das bedeutet für deine Datenbank nichts anderes, als daß du für diese Anwendung dem Anwender die ENTF-Taste wegnimmst.
Aktionsschaltflächen können im Backend sehr wohl Löschungen durchführen (der Unterschied zum Frontend ist nämlich, daß sie die Löschung nicht "initiieren" - wie es das Drücken der ENTF-Taste ist, sondern direkt durchführen. Und da greifen die Events natürlich nicht).
Deine Befehlsfolge
Call doc.Save
Call doc.Remove
hat schon den etwas pedantischen Zug des "bei uns werden nur plausigeprüfte Daten in die Tonne getreten" - und das kann sogar negative Auswirkungen haben. Wenn in einem Notes-Cluster der Clusterreplikationstask mit mehreren Threads läuft, kann der eine Thread die Dokumentänderung (vor der Löschung) replizieren, während der andere Thread das Dokument zu löschen versucht. Und dann bleibt dir ggf. eine "ewige Leiche" stehen.
Gruß
Norbert