Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

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
ID: 22682714
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
ID: 22683949
Or just use the search bar to do a search by name.

I hope this helps !
LVL 22

Expert Comment

ID: 22686480
Manually or using LotusScript?
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Author Comment

ID: 22686796
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

ID: 22686842
Manually obviously :)
LVL 22

Accepted Solution

mbonaci earned 150 total points
ID: 22686998
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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
IBM Notes offer Encryption feature using which the user can secure its NSF emails or entire database easily. In this section we will discuss about the process to Encrypt Incoming and Outgoing Mails in depth.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

860 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