Domino 9 und frühere Versionen > ND6: Entwicklung

Berechnungen im PostDocumentDelete + Zugriffsrechte + Dokumente löschen

(1/1)

Skorpi:
Vorraussetzungen:
Wenn ein Dokument aus der Datenbank gelöscht wird, werden Postdocumentdelete des Datenbank-Skripts bestimmte Berechnungen durchgeführt.

Aktionen:
Ein Benutzer mit Autorenzugriff (ohne Haken bei „Dokumente löschen“ in der Zugriffskontrollliste) löscht ein Dokument aus einer Ansicht.

Folge:
Obwohl der Benutzer nicht das Recht besitzt dieses Dokument zu löschen wird das Postdocumentdelete der Datenbank aufgerufen. Nachdem die Berechnungen durchgeführt wurden, meldet Lotus Notes 6.5.4 den folgenden Fehler: „Sie sind nicht berechtigt, Dokumente in dieser Datenbank zu löschen“.

Problem:
Die fälschlicherweise ausgeführten Berechungen im Postdocumentdelete führen zu Inkonsistenten Daten.

Frage:
Gibt es außer der etwas unschönen Möglichkeit, mit Lotus Script die Zugriffsrechte des aktuellen Benutzer auszulesen um manuell zu ermitteln, ob der aktuelle Nutzer die Rechte besitzt um ein Dokument zu löschen, eine einfachere Lösung? Im Prinzip müsste die Fehlermeldung, dass der Benutzer nicht berichtigt ist dieses Dokument zu löschen, einfach nur erscheinen bevor die Berechnungen im Postdocumentdelete ausgeführt werden.

Skorpi:
Upps, falsches Forum!!!

Bitte nach "ND6: Entwicklung" verschieben...

Danke

Glombi:
Erst löschen  - mit Error Handling - und dann die Berechnungen

falls Du nicht die "unschöne" (warum eigentlich ?) Methode verwenden willst.

Andreas

Skorpi:
Klasse, vielen Dank! Jetzt funktioniert es so wie es sein sollte  ;D


--- Code: ---Sub Postdocumentdelete(Source As Notesuidatabase)
On Error Goto Fehlerbehandlung

Call LogIt(LOG_ACTION, "Datenbank-Script: 'PostDocumentDelete', gestartet")

     'Deklarationen
Dim session As New NotesSession
Dim db As NotesDatabase
Dim docToDelete As NotesDocument
Dim docCopyOfDocToDelete As NotesDocument
Dim doccolToDelete As NotesDocumentCollection

'Initialisierung
Set db = session.CurrentDatabase
Set docCopyOfDocToDelete = New NotesDocument(db)
Set doccolToDelete = Source.Documents
Set docToDelete = doccolToDelete.GetFirstDocument


While Not docToDelete Is Nothing

Call docToDelete.CopyAllItems(docCopyOfDocToDelete, True)
Call docToDelete.Remove(True) ' DANKE ;)

'Benötigte Workflow-Ereignisse auslösen
If docCopyOfDocToDelete.GetItemValue("Form")(0) = "Mitarbeiter" Then
Call MitarbeiterGeloescht(docCopyOfDocToDelete)
Elseif docCopyOfDocToDelete.GetItemValue("Form")(0) = "Organisationseinheiten" Then
Call OrganisationseinheitGeloescht(docCopyOfDocToDelete)
Elseif docCopyOfDocToDelete.GetItemValue("Form")(0) = "Planstellen" Then
Call PlanstelleGeloescht(docCopyOfDocToDelete)
Elseif docCopyOfDocToDelete.GetItemValue("Form")(0) = "Dokumentenaenderungen" Then
Call DokumentenaenderungGeloescht(docCopyOfDocToDelete)
Elseif docCopyOfDocToDelete.GetItemValue("Form")(0) = "Feldaenderungen" Then
Call FeldaenderungGeloescht(docCopyOfDocToDelete)
End If

Set docToDelete = doccolToDelete.GetNextDocument(docToDelete)
Wend

Call LogIt(LOG_ACTION, "Datenbank-Script: 'PostDocumentDelete', erfolgreich ausgeführt")

Exit Sub
Fehlerbehandlung:
Call ErrorHandling("Datenbank-Script: 'PostDocumentDelete'")
Exit Sub
End Sub

--- Ende Code ---

Die andere Methode ist meiner Meinung nach umständlich, weil es doppelte Arbeit macht. In den Zugriffskontrolllisten der Datenbank und der Maske wird ja eigentlich schon festgelegt welche Personen und Gruppen was tun dürfen. Durch den zusätzlich notwendigen Code bei dieser Lösung entsteht zunächst bei der Erstellung und später bei Änderungen der Datenbank Mehrarbeit.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln