Retrieve the number of people in a group

This code will help you retrieve the number of people in a group. It will even work if a group is nested within multiple groups.

This code will help you retrieve the number of people in a group. It will even work if a group is nested within multiple groups.

 
 Declarations

Dim count As Integer
Dim persons List As String
Dim groups List
Dim tg As Integer
Dim xy As Integer


Sub Initialize
'The advantate of this code is that 
we can process any nested groups 
without any size limitaions.
 Dim session As New notessession 
 Dim ws As New notesuiworkspace
 Dim uidoc As NotesUIDocument
 
 Dim db As notesdatabase
 Dim namesdb As notesdatabase
 Dim groupdoc As notesdocument
 Dim groupview As notesview
 Dim insidegroupdoc 
As notesdocument
 Dim insidegroups As notesview
 Dim doc As notesdocument
 Dim curview As notesview
 Dim newlist List
 
 Set db=session.CurrentDatabase
 Set namesdb=session.GetDatabase
(db.Server,"names.nsf")
 Set groupview=
namesdb.GetView("($Users)")
 Set insidegroups=
namesdb.getview("($VIMGroups)")
 Set curview=db.getview("second")
 Set uidoc=ws.CurrentDocument
 
 Set doc=curview.getfirstdocument 
'you can set your own doc here.  
This the 
backend document for the currently
 opened uidoc.  You can find other 
alternatives to run this agent.
 groupName$ =uidoc.FieldGetText("names")  
' Here we are entering the group or 
person names.
 
 Dim ritem As Variant
 Set ritem = doc.GetFirstItem( "all" ) 
' Here we are going to store the group 
extracted people's name
 
 'Call uidoc.FieldSetText("saveoptions","1")
 Call uidoc.FieldSetText("Total","")
 ' Here we will list the total participant 
list.
 Call uidoc.FieldSetText("all","")
 ' making the field null to print a new 
value.
 Call uidoc.Save
 Call uidoc.reload
 Call uidoc.save 
 
 Forall entry In doc.names
  gtype=group(entry)   'Checking 
whether the entry is a group or People.
  If gtype="Group"  Then
   tg=tg+1
   groups(tg)=entry
  Else   
   Call addtolist(entry) ' If entry is a
 person, then adding to a list called 
People.
  End If
 End Forall 
 
 
 
'now we have got two lists one is 
person and another one is group 
'This loop will returns you a list 
in the people's view. and remove the each 
group entry after processing. 
 xy=0
 Do Until xy = tg
  xy=xy+1  
  et=groupget(groupview,groups(xy)) 
  Erase groups(xy)
 Loop
 
 If ( ritem.Type <> RICHTEXT ) Then
  Exit Sub
 End If
 
'Iam adding the list to another array, 
because iam not getting the list with 
unique values.  You can try some 
other code if you can retruns the list as 
unique 
 Dim nar() As String
 Forall nvals In Persons
  newcount=newcount+1
  Redim Preserve nar(newcount)
  nar(newcount)=Persons(newcount)
 End Forall
 
'Then make the array as unique 
 finarray=Arrayunique(nar,0) 
 
'Now print the values one by 
one in an array.   See if you 
want to process the 
contents of this rtfield.
'  Use the item.values and 
split the values using newline.  
So you will get an 
array.
 
 Forall fins In finarray
  If fins <> "" Then
   fin=fin+1    
   Call ritem.Appendtext(fins)
   Call ritem.addnewline(1)
  End If
 End Forall   
 
 
'This code will close the doc 
without saving and re-open it. 
 Call doc.ReplaceItemValue
("Total",Cstr(fin))
 Call doc.save(True,True)
 doc.saveoptions="0"
 Call uidoc.close
 Call ws.EditDocument(False,doc)  
'You can use the notesname 
class to format the contents 
and use the evaluate 
to sort the contents.  
The code you can get it from my 
'Other agent in the 
same db. 
End Sub


Function group(entry As Variant) 
As String
'Getting first 3 characters will give 
u an idea whether it is a group or 
person.  In our case every user 
will have a heirarhical name.  In your case 
you can use ur own code to get this info. 
 If Left(entry,3)="CN=" Then
  group="Person"  
 Else
  group="Group"     
 End If
End Function


Function addtolist(entry As Variant)
 count=count+1
 If Isarray(entry) Then 
' In some rare cases by mistake 
or so we have two 
entries in a document.  So run
 this check before proceed.
  Forall ad In entry
   persons(count)=ad
  End Forall
 Else
  persons(count)=entry
 End If 
End Function


Function groupget(gview As 
notesview,entry As Variant) As String
'here first we are getting group name.  
Then get the group document and get 
the members for the group.  
Then add the person entries to Person array.
'Rest group entries will add to group list. 
 
 Set groupdoc=
gview.GetDocumentByKey(entry,True) 
 If Not groupdoc Is Nothing Then 
  allentries=groupdoc.
GetItemValue("members")
  Forall ent In allentries
   'Set pdoc=
gview.GetDocumentByKey(entry,True) 
   If Left(ent,3)="CN=" Then 
    count=count+1
    persons(count)=ent
   Else   
    tg=tg+1
    groups(tg)=ent
    ab=ab+1
   End If     
  End Forall
 End If
End Function

Do you have comments on this tip? Let us know.

This tip was submitted to the SearchDomino.com tip exchange by member Prasad KL. Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

This was first published in November 2004

Dig deeper on LotusScript

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchEnterpriseLinux

SearchDataCenter

SearchExchange

SearchContentManagement

Close