Löschung über Entf. Taste verhindern

  • hallo alle zusammen.


    stehe vor einem problem. hoffe ihr könnt mir helfen.
    bei uns kommt es immer wieder vor, das ausendinstmitarbeiter dokumente löschen, die sie nicht löschen sollen.


    meine frage:


    ist es möglich zu sagen, dass wenn die entf. taste gedrückt wird, die dokumente einfach in einen papierkorb verschoben werden? bei mails funktioniert dies. aber funktioniert dies dann auch bei der replikation?


    hoffe es ist verständlich und ihr könnt mir weiterhelfen.

  • Das funktioniert mit Autorenfeldern im Dokument. Die Außendienstmitarbeiter dürfen in der ACL nur als Autoren eingetragen sein und dann können sie nur noch Dokumente löschen bei denen sie im Autorenfeld aufgeführt sind.

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Du könntest in eigenen Anwendungen selbst einen Papierkorb-Ordner anlegen.
    Löschungen fängst du dann im Datenbank-Script Event "Querydocumentdelete" ab und verschiebst sie stattdessen in den Ordner.

  • habe da noch was vergessen.
    die ausendienstmitarbeiter benutzen eine andere schablone. muss ich diesen order dann auch in der schablone erstellen und replizieren oder reicht es wenn ich es auf der hauptdatenbak mache.

  • Du musst dies in jeder Datenbank machen, die die Funktionalität benötigt, aber nicht in jeder Replik.


    Beispiel:
    DB "Verkauf D" - einmal auf Server A einbauen
    DB "Verkauf AT" - einmal auf Server A einbauen


    Wenn von den beiden DBs Repliken auf Server B liegen, musst du es dort nicht machen. Die Aussendienstler zeihen sich die Änderung beim nächsten replizieren rein.

    Bye
    Torsten


    IBM Advanced Certified System Administrator - Lotus Notes and Domino 8.5

  • Die tückischste - und vermutlich häufigste - Art, ein Dokument zu löschen, ist, daß man (über einen DocLink in ein Dokument geführt wird und) im Dokument im Lesemodus die Entfernen-Taste drückt.


    Bewährt hat sich folgendes Vorgehen: Der Anwender hat überhaupt kein Löschrecht (in der ACL - damit stellst du auch sicher, daß keine Löschungen über Replikationen hereinkommen), sondern kann einem Dokument nur eine Löschvormerkung geben. In der Nacht läuft ein periodischer Agent, der die Löschung dann tatsächlich ausführt (ggf. das Dokument vorher in Quarantäne kopiert o.ä.).


    Der entscheidende Teil, der die obige Aktion ausschließt, steckt im DatenbankScript in QueryDocumentDelete


    Da eine Datenbank neben den "Arbeitsdokumenten" oft auch noch einige andere Dokumenttypen (Keywords, Logs usw.) enthält, habe ich in einem Datenbanksetup-Dokument sog. ECHTLOESCHER namentlich definiert. damit die Dokumente auch wirklich löschen können. Das bedeutet übrigens auch, daß ein ACL-Manager noch nicht automatisch Dokumente automatisch löschen kann, wenn er die Datenbank nicht kennt.


    Zudem gibt es dort ein Feld, ob es Autoren erlaubt ist, ihre Dokumente zu löschen (SetupAutorenLoeschen).


    Dann definiere ich noch, ob es Autoren erlaubt ist, ein Dokument aus dem Dokument heraus durch Batätigen der ENTF-Taste zu löschen (SetupLesenUILoeschen) und, ob das den ECHTLOESCHERN erlaubt ist (SetupLesenUILoeschenEL - es gibt da oft auch Menschen, die zwar die Verantwortung für eine Datenbank haben, sich aber mit Notes nicht besonders gut auskennen. Aus einer Ansicht dürfen die dann ggf. löschen, nicht aber aus einem Dokument, das sie nur zum Lesen geöffnet haben)


    Und so sieht dann der Code aus:

    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Echtloescher=False
    Dim coll As NotesDocumentCollection
    Set coll = Source.Documents
    If coll.count=0 Then Exit Sub
    If profil98SGFehler Then Exit Sub
    If profil98SG.HasItem("SetupLoescher") Then
    Set xitem=profil98SG.GetFirstItem("SetupLoescher")
    If xitem.Contains(session.Username) Then Echtloescher=True
    End If
    If Not profil98SG.SetupAutorenLoeschen(0)="1" Then
    If Not Echtloescher Then Continue=False
    End If
    If Continue Then
    Set tdoc = coll.GetFirstDocument
    If coll.count=1 And tdoc.IsuiDocopen Then
    If profil98SG.SetupLesenUILoeschen(0)="1" Or (Echtloescher And profil98SG.SetupLesenUILoeschenEL(0)="1") Then
    tabbruch=Messagebox("Soll dieses Dokument wirklich gelöscht werden",3+32+256,"Delete actual document ?")
    If tabbruch <> 6 Then Continue=False
    Else
    Continue=False
    End If
    End If
    End If


    Fürs erste Ausprobieren kannst du die ganzen Bedingungen mit Echtllöschern usw. einmal weglassen und folgendes einbauen - damit werden die Menschen direkt beim Drücken der ENTF-Taste gefragt und nicht erst, wenn sie die Datenbank verlassen:


    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Dim coll As NotesDocumentCollection
    Set coll = Source.Documents
    If coll.count=0 Then Exit Sub
    Set tdoc = coll.GetFirstDocument
    If coll.count=1 And tdoc.IsuiDocopen Then
    tabbruch=Messagebox("Soll dieses Dokument wirklich gelöscht werden",3+32+256,"Delete actual document ?")
    If tabbruch <> 6 Then Continue=False
    End If
    End If
    End Sub

  • Warum eigentlich so umständlich ?


    Wenn du im QueryDocumentDelete grundsätzlich das Löschen verbietest (Continue = false mit entsprechendem Hinweis) geht es aber trotzdem noch per Agent die Dokumente zu löschen, d.h. ein Agent nur in die Ansichten per Aktion rein in denen sich nur Dokumente zum Löschen befinden. Eventuell noch über HideWhen Formeln für die ausblenden die nicht Löschen dürfen.

  • Wie kann ich das genau machen, dass Dokumente nicht gelöscht werden können? Ich möchte eigentlich nur ein Feldwert ändern statt das Dokument zu löschen!

  • Im Datenbankscript gibt es einen Event namens QueryDocumentDelete.
    Schreibst du dort Continue = false rein kann nicht mehr über die Entfernen Taste gelöscht werden.
    Was sonst noch beim Löschversuch passieren soll kannst du ebenfalls dort reinschreiben