Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: wuwu am 20.04.05 - 14:52:17
-
Hallo,
habe folgendes Script:
Sub Click(Source As Button)
On Error Goto ErrorHaendler
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim db As notesdatabase
Dim count As Integer
Set uidoc=ws.CurrentDocument
Set doc = uidoc.Document
Set db = doc.ParentDatabase
If ws.Prompt(Prompt_YESNO,"Neuzuweisung?",_
"Wollen sie?") = 0 Then
Exit Sub
Else
Dim acl As NotesACL
Dim entry As NotesACLEntry
Set acl = db.ACL
Set entry = acl.GetEntry(session.UserName)
Forall role In entry.Roles
entryRole = entryRole & role
End Forall
Select Case entryRole
Case "[Test]" :
doc.department_detail = "v_P"
........ usw.
Wenn der User einzeln in der ACL ist funktioniert das auslesen der Rolen, wenn der User aber in einer Gruppe ist bekomme ich in der Zeile :
Forall role In entry.Roles
die Fehlermeldung: Variable not set.
Wie kann ich die Userrole auslesen wenn der User einer Gruppe angehört?
-
Hallo,
mit
Set entry = acl.GetEntry(session.UserName)
holst Du einen bestimmten Eintrag in der ACL.
Ich würde über alle Einträge der ACL laufen.
Wenn es ein Namenseintrag ist, kannst Du den Wert direkt mit session.UserName vergleichen.
Wenn es ein Gruppenname ist, musst Du erst aus dem DD alle Members holen und dann jeden einzelnen Member mit session.UserName vergleichen.
Dirk
-
Du könntest aber auch mit
Dim rollen As Variant
rollen = Evaluate( "@Userroles" )
die UserRoles des Users in ein Array schreiben und dann damit weiter arbeiten.
-
:-[ Evaluate habe ich gar nicht in betracht gezogen :(
Ist natürlich schneller ;D
-
Ja, das hab ich auch schon probiert:
Dim rollen As Variant
rollen = Evaluate( "@Userroles" )
Msgbox rollen
Fehler: Type mismatch bei Zeile msgbox rollen
Im Debuger zeigt er mir die Rolle von mir an, gibt Sie mir aber nicht aus, warum?
2)
Wie kann ich dann alle Usernamen auslesen von der ACL, auch wenn Sie in einer Gruppe sind?
-
1.)
Evaluate liefert dir ein Array zurück
Also
rollen(0) = "erste UserRole"
rollen(1) = "zweite ....
Dim rollen As Variant
rollen = Evaluate( "@Userroles" )
Forall x in rollen
Msgbox x
end Forall
Damit bekommst du alle Rollen, die der User hat nacheinander angezeigt.
2.)
Um User aus einer Gruppe auszulesen brauchst du eine rekursive Funktion, da in einer Gruppe ja weitere Gruppen stehen können.
-
Weil Evaluate ein Variant zurückgibt und du Variants nicht in der Messagebox direkt ausgeben kannst. Mit Rollen(0) würde das in diesen Fall gehen.
-
1)
rollen ist vom Typ Variant
Geht nur so
if Not( IsEmpty( rollen ) Then
forall vRole in rollen
msgbox cstr( vRole )
end forall
end if
2) Du musst anhand des Gruppennamens das Gruppen-Dok im DD holen und dort das Feld "Members" auslesen
Dirk
-
War ich wieder mal zu laaannngsaaammmmm.. :-\
-
Danke Jungs,
bin heute total auf der Leitung gestanden, so ein Tag, der sollte schnell vergehn!
Mfg Horst