lotus notes user group membership

Posted on 2008-10-09
Last Modified: 2013-12-18
How can I determine what groups a lotus notes user belongs to?
Question by:btbsjtremper
LVL 20

Assisted Solution

brwwiggins earned 50 total points
Comment Utility
Open the address book off the server, go to the groups view (from the navigator on the left). Once the view opens click on the "Find Group Member" button and enter the user's name. After the script runs it will list all the groups that the person is a member of
LVL 63

Assisted Solution

SysExpert earned 50 total points
Comment Utility
Or just use the search bar to do a search by name.

I hope this helps !
LVL 22

Expert Comment

Comment Utility
Manually or using LotusScript?
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline


Author Comment

Comment Utility
I'm gonna try it out in a little while I will let you all know the status, thanks for your help
LVL 22

Expert Comment

Comment Utility
Manually obviously :)
LVL 22

Accepted Solution

mbonaci earned 150 total points
Comment Utility
Here's the code that returns all groups the user is member of:
Function GetAllValidGroupsForUser(username As String, server As String, maxdepth As Integer) As Variant


	This function gets all the groups that a user can belong to.

	This is a RECURSIVE function, so be careful when modifying it.

	MAXDEPTH is used to regulate how far down in group levels it can go.

	If checking ACL groups, 6 is the limit, for mail groups its 20 -- but this can change with Domino versions in the future.

	This sample code is distributed freely with only one obligation. 

	You must distribute this code as a whole, including these comments, if you distribute it or re-use it at all.

	For help, please contact

	Andrew Pollack

	Northern Collaborative Technologies


      ' use static variables so that you can avoid repeatedly

      ' getting a handle to the same resources.

      Static nab As notesdatabase

      Static nabview As notesview

      Static userview As notesview

      Static foundlist List As String

      Static depth As Integer

      ' since depth is a static variable, each recursive call to this

      ' function will increase its value.  We can also decrease its

      ' value so we know when we're back to the initial call.

      If depth => MAXDEPTH Then Exit Function

      depth = depth + 1

      ' check to see if we haven't already connected to the nab & views

      ' if not, connect now.

      If nab Is Nothing Then Set nab = New notesdatabase(server,"NAMES.NSF")

      If nab Is Nothing Then Exit Function

      If nabview Is Nothing Then Set nabview = nab.getview("($ServerAccess)")

      If userview Is Nothing Then Set userview = nab.getview("($Users)")

      If userview Is Nothing Then Exit Function

      If nabview Is Nothing Then Exit Function

      ' declarations

      Dim collection As notesdocumentcollection

      Dim doc As notesdocument

      Dim v As Variant

      Dim count As Integer

      Dim usercount As Integer

      Dim alreadyhandlednamevariants As Integer

      Redim usernamelist(0) As String

      Dim tempusernamelist As Variant

  ' first set the first username in the list to the current one as called

  ' keep in mind, if this is not the first call, but part of the recursion,

  ' this may be another variant of the name, or the name of a group

      usernamelist(0) = username

  ' this section will build an array of all the shortnames and name variants the user has

  ' by checking for a person record in the nab, using that to get the fullname of the user

  ' then calculating all the name variants on that (uses the function getNotesNameVariants)

      Set doc=userview.getdocumentbykey(username, True)

      If Not doc Is Nothing Then

            If doc.form(0) = "Person" Then

                  usercount = 0

                  Forall shortname In doc.fullname

                        Redim Preserve usernamelist(usercount) As String

                        usernamelist(usercount) = shortname

                        ' don't recheck variants if you've already checked the name

                        If Not alreadyhandlednamevariants = 1 Then

                              tempusernamelist = getnotesnamevariants(shortname)

                              'add all the found variants to the list of names to be checked

                              Forall tusername In tempusernamelist

                                    usercount = usercount + 1

                                    Redim Preserve usernamelist(usercount)

                                    usernamelist(usercount) = tusername

                              End Forall

                        End If

                        usercount = usercount +1

                  End Forall

            End If

      End If

      ' this is the result that will be returned at the end of the function

      Redim returnlist(0) As String

      ' here's the meat of the function

      Forall checkusername In usernamelist 'for each name variant

            If Not checkusername = "" Then ' don't check 'empty' names

                  Set collection = nabview.getalldocumentsbykey(checkusername,True) ' get any groups the name matches

                  If Not collection.count = 0 Then ' if there are any matches

                        Set doc = collection.getfirstdocument

                        While Not doc Is Nothing ' loop through all the matching groups

                              If Not doc.listname(0) = "" Then

                                    If Not Iselement(foundlist(doc.listname(0))) Then

                                          ' use this static list to avoid duplicate calls & infinite loops

                                          foundlist(doc.listname(0)) = "1"

                                          ' look! Here's the recursion! We're calling THIS function again

                                          ' with the new name variant.  It will return the list from this

                                          ' variant.  Deeper and Deeper it goes!

                                          v = getallvalidgroupsforuser(doc.listname(0), server, maxdepth)

                                          If Not Isempty(v) Then

                                                ' add the ones from the last depth to the current list,

                                                ' and prepare to return it to the one that called this one!

                                                Forall group In v

                                                      If Not group = "" Then

                                                            Redim Preserve returnlist(count) As String

                                                            returnlist(count) = group

                                                            count = count + 1

                                                      End If

                                                End Forall

                                          End If

                                          Redim Preserve returnlist(count)

                                          returnlist(count) = doc.listname(0)

                                          count = count + 1

                                    End If

                                    Set doc=collection.getnextdocument(doc)

                              End If


	       End If

            End If

      End Forall

      ' whew, now just return the list of all we found, plus all those found by

      ' any recursive calls we made, and the calls they made, and the calls they made, ...

      getallvalidgroupsforuser = returnlist

      depth = depth -1

      If depth = 0 Then

    ' this exit will be the last recursion, so delete the static list so we can run again if we need!

            Erase foundlist

      End If

End Function

Usage example:

Sub Click(Source As Button)


      Function getallvalidgroupsforuser(username As String, server As String, maxdepth As Integer) As Variant

      This sample code is distributed freely with only one obligation.  

      You must distribute this code as a whole, including these comments, if you distribute it or re-use it at all.

      For help, please contact

	Andrew Pollack

	Northern Collaborative Technologies


      ' first, get hold of the current document

      Dim workspace As New notesuiworkspace

      Dim uidoc As notesuidocument

      Dim doc As notesdocument

      Set uidoc = workspace.currentdocument

      Set doc = uidoc.document

      ' now try to get the address book we're going to use

      Dim nab As New notesdatabase( doc.server(0),  doc.addressbook(0) )

      If nab Is Nothing Then

            Messagebox("Cannot find the address book.")

            Exit Sub

      End If

      If Not nab.isopen Then

            Messagebox("Cannot open the address book.")

            Exit Sub

      End If

      ' get the varaibles

      Dim username As String

      Dim maxdepth As Integer

      username = Inputbox$("For what user?")

      maxdepth = Cint(Inputbox$("How deep should we go?  Usually, 6 for acls and 20 for mail.", "", "6"))

      ' make the call

      Dim v As Variant

      v = getallvalidgroupsforuser(username, doc.server(0), maxdepth)

      'output the results

      Dim outtxt As String

      outtxt  = "User: " & username & " is in the following groups." & Chr$(13) & Chr$(10) & Chr$(13) & Chr$(10)

      Forall entry In v

            outtxt = outtxt & (entry & Chr$(13) & Chr$(10))

      End Forall

      doc.display = outtxt

End Sub

Open in new window


Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Problem "Can you help me recover my changes?  I double-clicked the attachment, made changes, and then hit Save before closing it.  But when I try to re-open it, my changes are missing!"    Solution This solution opens the Outlook Secure Temp Fold…
This article covers general Notes 8.5 troubleshooting information including recreating the Notes\Data folder.
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now