Löschrechte - Löschscript

  • Hallo Zusammen,


    In einer Datenbank dürfen alle Personen alle Dokumente editieren, aber nur ihre eigenen löschen. Die Dokumente anderer dürfen nicht gelöscht werden.


    Dazu habe ich folgendes gemacht:
    In der ACL:
    Alle Editor Rechte mit Löschen


    In der Maske:
    Ein ausgeblendetes Feld „DokumentAutor“ in das ich mit @V3UserName den Autor in Canonischer Form speichere (Berechnet beim Anlegen)


    In der Querydocumentdelete:
    Folgendes Script:


    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)

    Set coll_del = db.UnprocessedDocuments
    If coll_del.count > 0 Then
    Set doc_del = coll_del.GetFirstDocument
    Do While Not doc_del Is Nothing
    If doc_del.DokumentAutor(0) <> s.Username Then
    Messagebox("Sie dürfen nicht löschen!“)
    Continue = False
    Exit Sub
    End If
    Set doc_del = coll_del.GetNextDocument(doc_del)
    Loop
    End If

    End Sub


    Folgender Fehler tritt auf:


    Beim markieren des Dokuments zum löschen kommt die Fehlermeldung:


    „Variant does not contain an object“


    Dannach kann man löschen.


    Keine Ahnung wo der Fehler liegt.


    Hat jemand eine Idee und kann mir helfen ?!


    Vielen Dank


    Oliver

  • Hallo,


    Erst mal Hilfe zur Selbsthilfe:


    Debuggen funktioniert manchmal nicht.


    Mit nem:


    On error goto bla


    und ganz unten dann


    exit sub
    bla:
    msgbox "Fehler " & Error$(err) & " in Zeile " & erl
    exit sub



    findest Du zumindest immer raus, in welcher Zeile der Fehler auftritt.


    Nun zu dem Fehler:
    Ich hatte Dir nur nen Auszug angegeben.


    Du musst noch die Session und db deklarieren und initalisieren.


    Also oben folgendes einfügen:


    Dim s as NotesSession
    Dim db as NotesDatabase


    set s = New NotesSession
    set db = s.CurrentDatabase


    Grüße
    Michael

  • Hallo,


    Erst mal Hilfe zur Selbsthilfe:


    Debuggen funktioniert manchmal nicht.


    Mit nem:


    On error goto bla


    und ganz unten dann


    exit sub
    bla:
    msgbox "Fehler " & Error$(err) & " in Zeile " & erl
    exit sub



    findest Du zumindest immer raus, in welcher Zeile der Fehler auftritt.


    Nun zu dem Fehler:
    Ich hatte Dir nur nen Auszug angegeben.


    Du musst noch die Session und db deklarieren und initalisieren.


    Also oben folgendes einfügen:


    Dim s as NotesSession
    Dim db as NotesDatabase


    set s = New NotesSession
    set db = s.CurrentDatabase


    Grüße
    Michael

  • Oder, allgemeingueltiger...
    set db = source.database


    Die Collection sollteste lieber ueber source.documents aufbauen. Dann sind dort auch die markierten drin. Dann brauchste auch kein db objekt

  • Danke für die Hinweise.


    Ich hab das jetzt eingebaut. Der Fehler wechselte zu "Type mismatch"
    Ist das vielleicht aus dem Feld "DokumentAutor"? muss ich dort den canonischen Namen einlesen oder zu Vorname Nachname konvertiern?
    Das debuggen gibt keinen Aufschluss?!


    Habt IHr noch eine Idee??


    Gruß Oliver

  • @V3UserName muesste eigentlich den Namen ohne Bezeichenr zurueckgeben; im Gegensatz dazu liefert s.username den vollen Namen. Die beiden kannste so nicht vergleichen. Ausserdem sollteste mal ueberpruefen was s bei Dir ist. Wo ist das Objekt erzeugt worden??
    Ach so, die Loesung vergessen :roll:


    anstatt @V3Username nimm @Username.

  • Danke für den Hinweis. Ich habe auf @Username geändert und es wird jetzt der canonische Name zurückgegeben. Der Fehler hält jedoch an. Das Feld wird auf der Dokumentenmaske erzeugt. Ist das falsch ?
    Danke für eure Hilfe!!

  • Hier nochmal das Script:


    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)

    Dim s As NotesSession

    Set s = New NotesSession
    Set db = source.database

    Set coll_del = db.UnprocessedDocuments
    If coll_del.count > 0 Then
    Set doc_del = coll_del.GetFirstDocument
    Do While Not doc_del Is Nothing
    If doc_del.DokumentAutor(0) <> s.Username Then
    Messagebox("Forget it")
    Continue = False
    Exit Sub
    End If
    Set doc_del = coll_del.GetNextDocument(doc_del)
    Loop
    End If

    End Sub


    Kannst du mal deinen posten ?
    Danke Oliver

  • meins sieht so aus:


    Ich hoffe nur, dass der code, den Du gerade gepostet hattest nicht Dein aktueller ist????????

  • Bei mir hat das hier funktioniert, dürfte das gleiche sein wie bei dnotes:


    Dim s As New NotesSession

    Set coll_del = source.Documents

    If coll_del.count > 0 Then
    Set doc_del = coll_del.GetFirstDocument
    Do While Not doc_del Is Nothing
    If doc_del.DokumentAutor(0) <> s.Username Then
    Messagebox("Sie dürfen nicht löschen!")
    Continue = False
    Exit Sub
    End If
    Set doc_del = coll_del.GetNextDocument(doc_del)
    Loop
    End If


    Allerdings kann es auch nicht schaden, die anderen Variablen zu deklarieren.