Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MadMetzger am 13.03.03 - 12:01:49
-
Hallo zusammen!
ich möchte in einer Datenbank steuern, dass bei einem bestimmten Status ein Dokument nur noch von bestimmten Leuten, mit einer bestimmten Rolle, gelöscht werden kann. Wie baue ich das ins QuerDocumentDelete ein? Hab keine Idee.
-
Hi,
hier ist ein Beispiel:
Dim roles As Variant
roles = Evaluate("@IsNotMember('[Schreiben]'; @UserRoles)")
If roles(0) = 1 Then
Messagebox "Sie sind nicht zum Löschen von Dokumenten aus der Datenbank berechtigt." , 48, "Adressen"
Continue = False
End If 'If roles(0) = 1 Then
Axel
-
das sieht schon gut aus! wie komme ich hier noch an einen feldwert, der noch relevant ist?
-
Hi,
über den Parameter Source von Querydocumentdelete.
Dim collection As NotesDocumentCollection
Set collection = Source.Documents
Damit hast du eine Collection mit allen markierten Dokumenten. Dann kannst du mit den üblichen Funktionen auf die Felder zugreifen.
Axel
-
Wenn ich den Wert eines Feldes auswerten will, zum Beispiel ein Statusfeld wie klappt das?
Bsp.: wenn status = 1 dann löschen möglich
wenn status = 2 dann löschen nicht möglich
-
Hi,
in den Maskenevents geht das unter anderem so:
If Source.Document.Status(0) = 1 Then
'Tu das eine
Else
'Tu was anderes
End If
oder so
Select Case Source.Document.Status(0)
Case 1
'Mach was
Case 2
'Lass das
Case Else
'Wenn nix passt
End Select
Axel
-
wie verhält sich das mit collections? oder muss ich dann immer jedes doc einzeln aus der coll heranziehen?
-
Hi,
im Prinzip ja.
Es sei denn du bildest die collection aus einem Suchergebnis, beispielsweise alle Dokumente in denen das Statusfeld 1 ist.
Axel
-
was heißt im prinzip? hab es mit dem feldnamen direkt versucht, hat nicht funktioniert. wie geht das genau?
-
Hi,
der Zugriff fuinktioniert so:
...
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
'Füllen der collection
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
If doc.Status = 1 Then
'Tu was
Else
'Tu was anderes
End If
Set doc = collection.GetNextDocument(doc)
Wend
...
Axel
-
alles klar! habs verstanden! danke nochmal!
-
Wenn ich dieses Script im querydocument delete einbinde kommt immer "Type Mismatch" beim Versuch zu löschen. Wo liegt der Fehler?
Dim col As notesdocumentcollection
Dim doc As notesdocument
Dim session As New notessession
Dim rolle As String
Set col = source.documents
Set doc = col.getfirstdocument
Const macro = "@UserRoles"
continue = False
rolle = Evaluate (macro)
While Not (doc Is Nothing)
If doc.ANTStatusTX (0) = "15" Then
continue = True
End If
If doc.ANTStatusTX (0) = "25" Then
continue = True
End If
If rolle = "[Personal]" Then
continue = True
End If
Set doc = col.getnextdocument(doc)
Wend
-
Hi,
Evaluate liefert einen Variant-Wert zurück.
Dim rolle As Variant
...
If rolle(0) = ....
So müsste es funktionieren.
Axel
-
so hat es funktioniert!