Manage Learn to apply best practices and optimize your operations.

Get all members of Domino Directory Group

This code generates a list of users from a group name from the NAB, determines whether the name corresponds to a person or group and breaks each group down into its person members.

This code generates a list of users from a group name from the NAB. The code will determine whether the name corresponds to a person or group, and if it's a group, then the code will break it down into all person members. The code works even if there are nested groups. However, the code is restricted by the Domino limit on recursive calls, which depends on the Domino Directory.
 

Function getPersonMembers
(groupName As String) As Variant
 Dim nab As New NotesDatabase("","names.nsf")
 Dim grpView As NotesView, personView As NotesView
 Dim doc As NotesDocument , doc2 As NotesDocument 
 Dim namesList As Variant
 Dim memberList() As String
 Dim grpname As NotesName
 
 If nab.Server = "" Then
  Set nab = New NotesDatabase
("Servername","names.nsf")
 End If
 Set grpView = nab.GetView("Groups")
 Set personView = nab.GetView("($VIMPeople)")
 Set doc = grpView.GetDocumentByKey(groupName)
 
 Redim memberList(0) As String
 If Not doc Is Nothing Then
  Forall mbrs In doc.members
   Set grpname = New NotesName(Cstr(mbrs))
   Set doc2 = personView.GetDocumentByKey
(grpname.Common)
   tmnE =  Elements(memberList) 
   x = 0
   If doc2 Is Nothing Then
    namesList = getPersonMembers(grpname.Common)
    
    If Ubound(namesList) > 0 Then
     
     Redim Preserve memberList(0 To tmnE + 
Ubound(namesList))
     Forall nms In namesList
      memberList(tmnE + x) = Cstr(nms)
      x=x+1
     End Forall
    End If
   Else
    Redim Preserve memberList(0 To tmnE + x)
    memberList(tmnE + x) = Cstr(mbrs)
   End If   
  End Forall
 Else ' entry is either a person or a mail in db.
  t =  Elements(memberlist)
  Redim Preserve memberList(t)
  memberList( t) = Cstr(groupName)
  
 End If
 getPersonMembers = memberList
End Function

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

This tip was submitted to the SearchDomino.com tip exchange by member Melissa Fuller. Please let others know how useful it is via the rating scale at the end of the tip. 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 last published in April 2005

Dig Deeper on LotusScript

Join the conversation

2 comments

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

This is helpful, one question though, what is Elements() , is it a function that returns the number of elements in a list ?
Cancel

adjusted getPersonMembers function (also to get common names) :



Function getPersonMembers(groupName As String) As Variant
	Dim nab As New NotesDatabase("","names.nsf")
	Dim grpView As NotesView, personView As NotesView
	Dim doc As NotesDocument , doc2 As NotesDocument 
	Dim namesList As Variant
	Dim memberList() As String
	Dim grpname As NotesName
	Dim nam As NotesName
	
	Const vb = True
	
	Dim s As New NotesSession
	Const currentproc = "getPersonMembers"
	On Error Goto TrapError 
	'Nom de cette procédure :
	Call s.SetEnvironmentVar("currentproc", currentproc)
	If vb Then Print Cstr(Time), currentproc + " --------------------"
	
	Print Cstr(Time) + " " + nab.Title
	
	If nab.Server = "" Then
		Set nab = New NotesDatabase("NLAMSM241","names.nsf")
		Print Cstr(Time) + " " + nab.Title
	End If
	
	Set grpView = nab.GetView("Groups")
	If grpview Is Nothing Then Msgbox "bip grpview" 
	Set personView = nab.GetView("($VIMPeople)")
	Set doc = grpView.GetDocumentByKey(groupName)
	
	Redim memberList(0) As String
	If Not doc Is Nothing Then
		Forall mbrs In doc.members
			Set grpname = New NotesName(Cstr(mbrs))
			Set doc2 = personView.GetDocumentByKey(grpname.Common)
			tmnE =  Elements(memberList,True) 
			x = 0
			If doc2 Is Nothing Then
				namesList = getPersonMembers(grpname.Common)
				
				If Ubound(namesList) > 0 Then
					
					Redim Preserve memberList(0 To tmnE + Ubound(namesList))
					Forall nms In namesList
						Set nam= s.CreateName( Cstr(nms) )
						memberList(tmnE + x) = Cstr(nam.common)
						x=x+1
					End Forall
				End If
			Else
				Redim Preserve memberList(0 To tmnE + x)
				Set nam = s.CreateName( Cstr(mbrs ) )
				memberList(tmnE + x) = nam.Common
			End If   
		End Forall
	Else ' entry is either a person or a mail in db.
		t =  Elements(memberlist, True)
		Redim Preserve memberList(t)
		memberList( t) = Cstr(groupName)
		
	End If
	getPersonMembers = memberList
	
	Call s.Setenvironmentvar("currentproc", "")
	If vb Then Print Cstr(Time), currentproc + " --------------------FIN"
	
	Exit Function
	
TrapError:
	'On Error Goto TrapError 
	Print currentproc & "= Erreur " & Err & " ligne " & Erl & " (" & Error  & ")"
	Msgbox currentproc & "= Erreur " & Err & " ligne " & Erl & " (" & Error  & ")"
	Resume Next
End Function

Cancel

-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 ...

SearchDataCenter

SearchExchange

SearchContentManagement

Close