Autor Thema: Verschachtelte Gruppen auflösen  (Gelesen 5223 mal)

botschi

  • Gast
Verschachtelte Gruppen auflösen
« am: 19.08.08 - 15:36:07 »
Hallo,

über die Suche hier im Forum habe ich etliche Lösungen gefunden, die aber scheinbar unter ND8 nicht mehr funktionieren.
Ich habe u.a. diese Lösungen probiert
Code
This Formula language code retrieves the list of values in a Lotus Notes nested 
group, and then adds them to a list one by one -- as a common name if it's a 
person, or by looking up the values if it's a group. 
All you need to do is: 
1. Copy the Formula language code below. 
2. Paste it into a computed, multi-value field. 
3. Change the group name to match yours. 
4. Run the code. 
You can also add error trapping for the lookups as needed. 
db := "names.nsf";
svr := @Subset(@DbName;1);
luKey := "YourGroupNameGoesHere";
List := @DbLookup("":"NoCache"; 
svr: db; "($VIMGroups)"; luKey; 3);
@Unique(@Name([CN]; List));

@For(n := 1; n <= @Elements(List); 
n := n + 1; @If( (@Left(List[n] ; 2) = "CN") ; 
temp := temp : @Name([CN] ; List[n]); 
temp := temp : @Name([CN] ; @DbLookup
("":"NoCache";svr:db;"($VIMGroups)"; List[n] ; 3))
)
);

@Sort(temp)

Note: This tip will only work if you are using Lotus Notes Domino R6.x or 
greater. I know this may not always work for everyone, but it solved a lot of 
headaches for me.


################################################################################
###########
In R6, @expandgrouplist doesn't seem to work anymore. This @formula will get 
all members of groups, and it will also work for nested groups.

Code

ndb := @ServerName:"names.nsf";
vfield:=@IfError(@DbLookup
("":"nocache";ndb;"($Users)";Group;"Members");
group);
REM {Store result here};
resultList:="";
REM {List of processed groups to avoid infinite loops};
 processGroups:=""; counter:=0; @While(@Trim(vfield)!= "";
 allv := @Trim(vfield);
 current := allv[1];
 
 type := @NameLookup([noupdate];current;"Type");
 @if( @LowerCase(type)="group";
  @Do(
   add:= @If( @IsMember(current;processGroups);
      "";
      @IfError(@DbLookup("":"nocache";ndb;"
($Users)";current;"Members");current));
   @If(@Trim(add)="";
    resultlist:=resultlist:add;
    add=current;
    resultlist:=resultlist:add;
    resultList:=@Replace(resultList:add;current;"")
   );
   processGroups:=@Trim(processGroups:current);
   vfield:=@Trim(@Replace(allv;current;""):add)
  );
  @Do(
   resultList:=resultList:current;
   vfield:=@Trim(@Replace(allv;current;""))
  )
  );  
 @StatusBar(@Text(counter)+" - "+ 
@text(@Elements(vfield))+") > " + vfield[1] + "...");
 counter:=counter+1
);
@Trim(@Unique(resultList))

MEMBER FEEDBACK TO THIS TIP 
This solution is limited to R6 but it sure is simple. 
REM {This formula expands a group name 3 levels deep.} 

resultList := group; 
@For(n := 1;n <= 3;n := n + 1; 
resultList := @Transform(resultList;"var";
@IfError(@DbLookup("";"85256648:005C15D7";
"Groups"; var; "Members");var))); 
@Trim(@Unique(resultList)); 

—Bruce F. 
************************ 
A simpler solution that works fine in Notes 6 is: 
@ExpandNameList(Server : Database; GroupName) 
—J. Herman 

und diese
Code
	groupName$ = "GRUPPE"
	groupMembers = Evaluate( |@ExpandNameList(@Dbname;"| & groupName$ & |")| )
	Forall names In groupMembers
		Print names
	End Forall
es werden aber keine verschachtelten Gruppen aufgelöst.
Mach ich generell was falsch oder funktioniert die undokumentierte Formel nicht mehr??

Matthias
« Letzte Änderung: 20.08.08 - 16:53:45 von botschi »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Verschachtelte Gruppen auflösen
« Antwort #1 am: 19.08.08 - 15:39:26 »
Das ist die Sache mit den undokumentierten functions ...

Warum schreibst Du Dir das nicht fix selber in LS?

Bernhard

botschi

  • Gast
Re: Verschachtelte Gruppen auflösen
« Antwort #2 am: 19.08.08 - 15:44:45 »
Weil ich das Rad nicht neu erfinden wollte und davon ausging, dass es eben nicht fix geht...
Ich habe die gepostete "Lösung" ja seit Jahren in meiner Sammlung, aber noch nie gebraucht- bis jetzt und stelle fest, sie geht nicht (mehr).


Matthias

Offline Hirnbeisz

  • Frischling
  • *
  • Beiträge: 26
  • Geschlecht: Männlich
Re: Verschachtelte Gruppen auflösen
« Antwort #3 am: 19.08.08 - 19:03:32 »
@ExpandNameList(_Server:_db;_group);
funktioniert auch unter Domino 8 genau so zuverlässig ( oder auch nicht zuverlässig) wie in den Vorgängerversionen, das Problem ist, daß ab einer bestimmten Größe (16 K ???) die Auflösung ohne jegliche Fehlermeldung nicht mehr funzt!
Gruß Aloisius

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Verschachtelte Gruppen auflösen
« Antwort #4 am: 20.08.08 - 07:50:33 »
jop kann ich nur zustimmen, funktioniert perfekt der Befehl bis 16k...
leider eben ohne error... und das kann ja immer mal vorkommen das du 16k bei verschachtelten Gruppen erreichst..

botschi

  • Gast
Re: Verschachtelte Gruppen auflösen
« Antwort #5 am: 20.08.08 - 10:34:28 »
Das ist ja aber genau das, was ich wollte...! Die Anzahl der Personen in den verschachtelten Gruppen.
Ich habs jetzt so gemacht, müsste eigentlich tun
Code
grp := gruppe;
ndb := @ServerName:"names.nsf";
vfield:=@IfError(@DbLookup("":"nocache";ndb;"($VIMGroups)";grp;"Members");
"Falsch");
REM {Store result here};
resultList:="";
REM {List of processed groups to avoid infinite loops};
processGroups:="";
counter:=0;
@While(@Trim(vfield)!= "";
 allv := @Trim(vfield);
 current := allv[1];

 type := @NameLookup([NoUpdate];current;"Type");
 @If( @LowerCase(type)="group";
  @Do(
   add:= @If( @IsMember(current;processGroups);
      "";
      @IfError(@DbLookup("":"nocache";ndb;"
($Users)";current;"Members");current));
   @If(@Trim(add)="";
    resultlist:=resultlist:add;
    add=current;
    resultlist:=resultlist:add;
    resultList:=@Replace(resultList:add;current;"")
   );
   processGroups:=@Trim(processGroups:current);
   vfield:=@Trim(@Replace(allv;current;""):add)
  );
  @Do(
   resultList:=resultList:current;
   vfield:=@Trim(@Replace(allv;current;""))
  )
  );
 @StatusBar(@Text(counter)+" - "+
@Text(@Elements(vfield))+") > " + vfield[1] + "...");
 counter:=counter+1
);
@Trim(@Unique(resultList));
@For(n := 1;n <= 5;n := n + 1;
resultList := @Transform(resultList;"var";

@IfError(@DbLookup("":"NoCache";@ServerName:"names.nsf";"($VIMGroups)"; var; "Members");var)

));

erg := @Elements(@Trim(@Unique(resultList)));
@SetField("ergebnis";erg)

Matthias

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz