Domino 9 und frühere Versionen > ND6: Entwicklung

Mehrfachwerte mehrerer Rückgaben zusammenfassen

(1/3) > >>

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