Autor Thema: Mehrfachwerte mehrerer Rückgaben zusammenfassen  (Gelesen 2632 mal)

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Mehrfachwerte mehrerer Rückgaben zusammenfassen
« am: 18.06.08 - 13:08:52 »
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

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #1 am: 18.06.08 - 13:15:36 »
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.
« Letzte Änderung: 18.06.08 - 13:21:51 von Andrew Harder »
Andy

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #2 am: 18.06.08 - 16:06:37 »
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
Situs vilate in isse tabernit.

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #3 am: 18.06.08 - 16:33:07 »
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)


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #4 am: 18.06.08 - 16:36:24 »
Und wo ist nun die Frage? Woran scheiterst Du, wenn Du das umsetzt, was in der DesignerHelp steht?

Bernhard

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #5 am: 18.06.08 - 16:50:15 »
Ich bekomme aus verschiedenen Gruppen die Members geliefert.
Die möchte ich in einem Wert zusammenschrieben. Von Andrew habe
ich den Tip bekommen es mit AppendArray zu versuchen.

Leider habe ich mit AppendArray noch nicht gearbeitet und meine Probleme beim Aufbau.

Wenn ich die u.a. Routine das erstemal durchlaufen lasse ist das zielArray ja noch nicht vorhaden.
Und kann dem Array auch nichts hinzufügen.

Ich mache beim Aufbau einen Gedankenfehler. Schön wäre wenn jemand neben der Hilfe ein Beispiel hätte. Vielen Dank



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
         
         
         Dim teilArray As Variant
         teilArray = gruppenmitglieder
         zielArray = Arrayappend(zielArray,teilArray)
         
         
      End If
      Set entry = acl.GetNextEntry( entry )
   Wend

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #6 am: 18.06.08 - 16:55:15 »
Vorab: Solange Du weiterhin mit der IsGroup-Property arbeitest, ist Dein Code wertlos. Andrew schrieb das ja bereits.

Weiters: Gib der LS-Function Isempty eine Chance.

Bernhard

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #7 am: 18.06.08 - 17:04:35 »
so hatte ich es schon getestet !
Steh auf dem Schlauch !

Dim teilArray As Variant
         teilArray = gruppenmitglieder
         
         If  Isempty (zielArray) Then
            zielArray = gruppenmitglieder
         Else
            zielArray = Arrayappend(zielArray,teilArray)   
         End If


Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #8 am: 18.06.08 - 18:05:41 »
Liebe Hedwig

DasErsteMal = True
teilArray = gruppenmitglieder
         
         If Not Isempty (teilarray) Then
             If  DasErsteMal Then
                zielArray = gruppenmitglieder
                DasErsteMal=False
              Else
                zielArray = Arrayappend(zielArray,teilArray)   
            End If
         End If

Überleg dir gut, ob du den Weg mit deiner selbstgebastelten Gruppenauflösung gehen willst. Der Code, den ich dir oben vorgeschlagen habe - ergänzt um ein paar fehlende Klammern und Initialisierungen - nimmt dir das alles mit Notes-Bordmitteln ab.

Und die Gruppen werden so behandelt wie du es dir vermutlich vorstellst. Nochmals der Hinweis: IsGroup von einer ACL-entry ist etwas TOTAL ANDERES als was du dir vorstellst. Das sind die Einträge, die ein Gruppierungssymbol haben. Das kann in einem Template auch ein Eintrag ohne Berechtigung wie [Leitung] oder [Vertrieb] sein, der beim Erzeugen einer echten Datenbank aus dem Template in die gleichnamige Gruppe (ohne eckige Klammern) umgewandelt wird. Und ich glaube, daß du mit deinem ISGROUP im moment noch auf der [Leitung] stehst.

Gruß

Norbert
P.S.: wie bekommt man das eigentlich mit den sauberen Einrückungen in Codebeispielen hin ? Ich kann mein Zeugs ja selber kaum lesen, obwohl ich weiß, daß es eigentlich hilft und gut ist.
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #9 am: 18.06.08 - 18:13:16 »
Setz es einfach in code-Tags, Norbert:

Code
	DasErsteMal = True
	teilArray = gruppenmitglieder
	
	If Not Isempty (teilarray) Then
		If  DasErsteMal Then
			zielArray = gruppenmitglieder
			DasErsteMal=False
		Else
			zielArray = Arrayappend(zielArray,teilArray)   
		End If
	End If

Bernhard
« Letzte Änderung: 19.06.08 - 10:53:56 von koehlerbv »

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #10 am: 19.06.08 - 10:51:31 »
Vielen Dank !

Jetzt wo ich es lese ist es mir total klar !
Hat super geplappt.

Die IsGroup Funktion werde ich mir jetzt ansehen. Vielen Dank erstmal !

Offline Tec

  • Frischling
  • *
  • Beiträge: 6
  • I love YaBB 1G - SP1!
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #11 am: 19.06.08 - 14:53:19 »

[...]
Überleg dir gut, ob du den Weg mit deiner selbstgebastelten Gruppenauflösung gehen willst. Der Code, den ich dir oben vorgeschlagen habe - ergänzt um ein paar fehlende Klammern und Initialisierungen - nimmt dir das alles mit Notes-Bordmitteln ab.
[...]

Moinsen,

hierzu möchte ich nur kurz anmerken, dass die Funktion @ExpandNameList undokumentiert und damit *nicht* von externen Entwicklern benutzt werden sollte. Aus dieser Sicht, scheint mir eine "selbstgebastelte Lösung" mit tatsächlichen Bordmitteln durchaus sicherer zu sein.

Sollte man tatsächlich @ExpandNameList benutzen, würde ich einen großen auffälligen Kommentarblock vor die Funktion setzen mit in etwas diesem Inhalt: "Sollte irgendwann mal was nicht mehr wie gewohnt funktionieren --> hier zuerst nachschauen!". ;)

Grüße,

Markus.

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Mehrfachwerte mehrerer Rückgaben zusammenfassen
« Antwort #12 am: 21.06.08 - 19:51:34 »
Lieber Markus,

du hast schon recht. @ExpandNameList ist unsupported und kann jederzeit aus dem Katalog der funktionierenden Funktionen herausgenommen werden. Aber seit Version 4 wird es von Lotus selbst verwendet.

Wenn jemand auf dem Entwicklerstand von Hedwig eine rekursive Gruppenauflösung schreibt, dann wird die unter bestimmten Bedingungen bestimmt funktionieren. Aber ich halte es für wahrscheinlich, daß sich an dem Umfeld, in dem das funktioniert, früher etwas ändert als daß die Funktion @ExpandNameList nicht mehr funktioniert. Und deshalb schlage ich ihr den Weg so vor.

Ich habe unter Version 4 eine rekursive Gruppenauflösung mit mehreren Adreßbüchern geschrieben. Als die ersten Server die mehreren Adreßbücher nicht mehr in der NOTES.INI, sondern in der Directory Assistance hatten, funktionierte mein Code nicht mehr - @Expand NameList tat es weiterhin. Es ging mit jeder Notes-Version so. Mein eigener Mist würgte rum - und @ExpandNameList funktionierte weiterhin. Deshalb bleibe ich dabei: lieber eine von Lotus selbst benutzte Funktion auch benutzen als was Eigenes.

Gruß

Norbert
Situs vilate in isse tabernit.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz