Hallo Forum,
habe mal wieder ein Problem. Habe schon viel hier im Forum gesucht und schon viel ausprobiert aber bis jetzt hat noch nichts zum gewünschten Ergebnis geführt. Habe eine Funktion geschrieben die überprüfen soll, ob eine bestimtme Rolle bei einem User gesetzt ist. Das klappt allerdings nur, wenn der Benutzer als einzelne Person in der ACL drin steht und nicht wenn er in einer Gruppe ist. Hab es schon mit UserGroupNameList der Notessession Klasse probiert, doch diese Property liefert mir nicht das richtige Ergebnis zurück. Vll. kann mir ja jemand weiterhelfen.
Function istRolleGesetzt() As Boolean
'Aufruf der Fehlerbehandlung
On Error Goto ErrHandler
'Variablen Dekleration
Dim session As New NotesSession
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim rückgabewert As Boolean
Set db = session.CurrentDatabase
Set acl = db.ACL
rückgabewert = False
'In der Forall Schleife werden alle Rollen des Users durchlaufen.
'Falls er die Rolle hat wird der Rückgabewert auf True gesetzt
If Not entry Is Nothing Then
Forall r In entry.Roles
If r = "[RolleA]" Then
rückgabewert = True
End If
End Forall
End If
istRolleGesetzt= rückgabewert
Ende:
Exit Function
ErrHandler:
Call OutputError(Err, Erl(), Error())
Resume Ende
End Function
Function userHasRole (Rolle As String) As Variant
Dim session As New NotesSession
Dim db As NotesDatabase
Dim acl As NotesACL
Dim aclEntry As NotesACLEntry
Dim eval As Variant
Dim varReturn As Variant
Dim varReturn2 As Variant
Dim varCompare As String
Dim Rolle2 As String
Dim Rolle3 As String
Dim subString As String
On Error Goto userHasRoleError
Set db = session.currentDatabase
Rolle2 = Rolle
Rolle3 = "[" + Rolle + "]"
'eval = Evaluate("@UserRoles")
eval = Evaluate("@UserNamesList")
varReturn = Arraygetindex( eval, Rolle2)
varReturn2 = Arraygetindex(eval, Rolle3)
If Isnull(varReturn) And Isnull(varReturn2) Then
'Messagebox "nix Gefunden"
userHasRole = False
Else
'Messagebox "gefunden"
userHasRole = True
End If
Exit Function
userHasRoleError:
userHasRole = False
Msgbox "Fehler in userHasRole: " & Cstr(Err) & ": " & Error$
Exit Function
End Function
@Thomas
Ja sorry, @ExpandNameList liefert die Namen aller User, die in der Gruppe inkl. aller Untergruppen vorhanden ist.
ich lass mich gern eines besseren belehren, aber in meiner DesignerHilfe (WindowsTitel "... 6.5.1") NotesClient 6.5.4 finde ich nichts über @ExpandNameList. Hatte schon auf eine undokumentierte Formel gehofft, aber auch Fehlanzeige.
@Danny
Du mußt Deine Funktion um einen Funktionsaufruf erweitern, die eine Gruppe in eine Namensliste auflöst.
Ansatzweise mußte ich so etwas auch mal lösen:
Sub Click(Source As Button)
Dim uiws As New NotesUIWorkspace
Dim dbAdressbuch As NotesDatabase
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim docMailGruppe As NotesDocument
Dim docCol As NotesDocumentCollection
Dim sSearch As String
Dim NameZugriff As NotesName
Dim tmpString As String
Set db = uiws.CurrentDatabase.Database
Set dbAdressbuch = New NotesDatabase (db.Server, "names.nsf")
Set doc = uiws.CurrentDocument.Document
If dbAdressbuch Is Nothing Then
Messagebox "Kann Adressbuch nicht öffnen",16,"keine Anzeige möglich"
Exit Sub
End If
sSearch = {Type = "Group" & ListName = "} + <Name der Gruppe> + {"}
Print "Suche nach " + sSearch
Set docCol = dbAdressbuch.Search(sSearch, Nothing, 0)
If docCol.Count <> 1 Then
If docCol.Count < 1 Then
Messagebox "MailGruppe im Adressbuch nicht gefunden",16,"Abbruch"
Else
Messagebox Cstr(docCol.Count) + " Dokumente im Adressbuch gefunden",16,"Abbruch"
End If
Exit Sub
End If
Set docMailGruppe = docCol.GetFirstDocument
' Namensliste aufbauen
tmpString = ""
Forall F1String In docMailGruppe.Members
Set NameZugriff = New NotesName(F1String)
tmpString = tmpString + NameZugriff.Common + Chr(13)
End Forall
Messagebox tmpString, 0,"Mailempfänger"
End Sub