Domino 9 und frühere Versionen > Entwicklung

Löschen mit ENTF unterbinden

<< < (4/6) > >>

koehlerbv:
Ich stelle erst jetzt gerade zwei Dinge in Thomas' Code fest:


--- Code: ---  docToChange.Maske = "x"
  Call docToChange.Save (False,True)
--- Ende Code ---
Das ist gaga, da ja gleich das Dokument entfernt wird.

Und da sind wir beim Punkt: Das Löschen soll im Backend passieren - und da greift das QueryDocumentDelete nun gar nicht. Das beisst sich also mit dem Ausgangspunkt des Threads.

Bernhard

iukhdh:
Ach Gottchen,

verstehe ich das richtig, dann brauche ich die Aktion mit dem "X" nur, damit die Kollegen im Frontend nicht mit "ENTF" löschen können, und in meinem Aktionsbutton lösche ich, ohne Rücksicht auf das "x" im Backend einfach das Dokument? Ich glaub ich mach jetzt auch mal Backend, schlaf ne Runde und morgen probier ich das an der Frontend im Geschäft mal aus.

 :)

Werd ich doch noch hinkriegen !!!

koehlerbv:
Jetzt verstehe ich aber gar nichts mehr ... Was für Aktionen willst Du denn überhaupt ausführen? Bisher wissen wir nur, dass Du etwas von Aktionen in dem Dokument schreibst, was Du gleich danach sowieso löschst (was ja Tüttelkram wäre ...).

Sag mal bitte genaueres ... Ich kenne solche Acts eigentlich hauptsächlich in Verbindung mit dem "Eigentlich-nicht-löschen-sondern nur-unsichtbar-machen".

Bernhard

iukhdh:
Also nochmal.
Du hast mir ja das mit dem Querydocumentdelete vorgeschlagen. Damit verhindere ich, dass mir die Allgemeinheit mit ENTF bestimmte Dokumente löscht. Es handelt sich um Dokumente in einem Veranstaltungskalender, die vor dem Löschen noch bei der Zeitung manuell aus einem anderen Kalender entfernt werden müssen.

Daher erlaube ich nur das Löschen über einen Aktionsbutton (in der Ansicht), in dem a) die Dokumente gelöscht werden, und b) vorab noch eine Info an eine zentrale Stelle geht, die die Sache mit der Zeitung klärt.

Also: Alle Dokumente sind so markiert, dass sie erst dann gelöscht werden können, wenn ein "x" im entsprechenden Feld steht.

Und das wollte ich im Grunde so lösen, dass über den Aktionsbutton die ausgewählten Dokumente mit dem "x" versehen werden und dann der Löschauftrag erfolgt. Ich habe es so verstanden, dass DANN wieder Querydocumentdelete aufgerufen wird und die Löschung verhindern würde, wenn nicht das "x" am richtigen Ort steht.

Wenn ich dich aber nun richtig verstanden habe, dann wird durch den Löschauftrag im Backend Documentdelete garnicht mehr angesprochen, womit ich mir die Sache mit dem "x" sparen könnte, und einfach so lösche. Was ja noch einfacher wäre.

LN4ever:
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

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln