Domino 9 und frühere Versionen > ND6: Entwicklung
Mehrfachwerte mehrerer Rückgaben zusammenfassen
Hedwig14:
Hallo,
ich frage die ACL einer Datenbank nach allen Personen und Gruppen, die Editor-Rechte haben ab.
Die Gruppen lasse ich mit rekursiv auflösen. Die Funktion"GebeGruppeAufgeloest" gibt mir die
Mitglieder einer Gruppe zurück. Jetzt möchte ich die Variable "gruppenmitglieder" (mehrfachwerte)
gerne um die nächsten Gruppenmitglieder erweitern. Das bekomme ich nicht hin.
Ich benötige eine Variable, die nach und nach neue Mehrfachwerte aufnimmt. Wie mache ich das ?
Dim werte() As Variant
Redim Preserve werte(anzahl)
Set entry = acl.GetfirstEntry
While Not ( entry Is Nothing )
If ( entry.Level = ACLLEVEL_EDITOR ) Then
werte(number) = entry.Name
number = number + 1
If entry.IsGroup Then
gruppenmitglieder = GebeGruppeAufgeloest(entry.name, "[COMMON]" )
Else
gruppenmitglieder = entry.name
End If
End If
Set entry = acl.GetNextEntry( entry )
Wend
Andrew Harder:
Hallo Hedwig,
Möglicherweise hast Du bisher die folgende Scriptfunktion nicht benutzt:
ArrayAppend function
Appends one array to the end of another array and returns the result as a third array.
Syntax
ArrayAppend( sourceArray1, sourceArray2 )
Return value
A variant containing an array.
Also:
neuesArray = ArrayAppend( altesArray, NeuerWertOderArray )
Beachte:
Der erste Wert muss zwingend ein Array sein. Also vorher prüfen wenn dies nicht 100%ig sicher gestellt ist.
LN4ever:
Liebe Hedwig,
und dir ist auch klar, daß die Eigenschaft ISGROUP sich bei einem ACL-Entry nicht auf eine Adreßbucheigenschaft bezieht, sondern auf die Benutzertypen, die dem ACL-Eintrag zugeordnet sind, d.h. Personengruppen, Servergruppen und gemischte Gruppen. Wenn du eine Gruppe mit Benutzertyp UNBESTIMMT einträgst, wirst du sie nicht in deiner Liste finden.
Ich würde das eher mit einem (ungetesteten und einfach nur heruntergeschriebenen) Code probieren:
If db.server="" Then
Messagebox "Lokal gibt das nix"
Exit Sub
End If
' We can exclude some typical entries of the ACL
If Not entry.IsPerson And Not entry.IsServer And Not entry.name="-Default-" And Not UCase(entry.name)="ANONYMOUS" And Not Left(entry.name,1)="[" Then
_streval={@Name([CN];@Trim(@Unique(@ExpandNameList(@Subset(@DbName;1);"} & entry.name & {")}
xarray=Evaluate(_streval,db)
' We must exclude some returnvalues
If Not (IsEmpty(xarray) Or Fulltrim(xarray)="" Or Fulltrim(xarray)="*" Then
' We must test, whether the returnvalue (and the entry itself) is a person or a group. We estimate that it is a person
Einzelperson=True
If the array has more than 1 entry, we assume that it is a group
If UBound(xarray)>0 Then
Einzelperson=False
Else
' If only one value comes back we must test, whether it is identical to the input. If
yes, we have a person, if no, we assume that it is a group with one member
Set xname=New Notesname(xarray(0))
Set yname=New Notesname(entry.name)
If xname.Common<>yname.Common Then
Einzelperson=False
End If
If Not Einzelperson Then
varray=Arrayappend(varray,xarray)
... schließende Ifs
herangehen. Damit bekommst du auch die Einträge vom Typ UNBESTIMMT.
Gruß
Norbert
Hedwig14:
Hallo LN4ever. Vielen Dank für Deinen Tip. Das gucke ich mir im 2. Schritt nochmal an.
Erstmal muss ich das mit ArrayAppend hinbekommen.
Da habe ich ein Problem mit dem Aufbau des Scriptes.
Im ersten Lauf ist das zielarray ja leer. Ich habe voll den Black out und bekomme das nicht hin.
Kann mir jemand mit dem Script helfen ?
Ich bin da falsch vor :
Dim teilArray As Variant
teilArray = gruppenmitglieder
zielArray = Arrayappend(zielArray,teilArray)
koehlerbv:
Und wo ist nun die Frage? Woran scheiterst Du, wenn Du das umsetzt, was in der DesignerHelp steht?
Bernhard
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln