Create view in the NAB with a selection formula of "Select (Form = "Group").
Add the field 'Members' in first column.
In the propeties box for the first column, select sorting type 'categorized' and select 'show multiple values as separate entries'.
In the second column, put the field 'ListName'.
This is not recursive, so it won't show a person in a nested group.
An alternative way (from firstname.lastname@example.org) is to:
1) Load the Name & Address Book D/Base and select the "Groups" view
2) Enable the Search Bar (View, Search Bar) - the NAB has to be full text indexed
3) Key in the name of the person you are seeking - the Groups of which they are a member are identified in the view
or use the search string:
FIELD Members contains "username or groupname"
Declare Function NSFBuildNamesList Lib "NNOTES" Alias "NSFBuildNamesList" _ ( Byval S As String, Byval F As Long, hNL As Long) As Integer Declare Function OSLockObject Lib "NNOTES" Alias "OSLockObject" _ ( Byval H As Long) As Long Declare Sub OSUnlockObject Lib "NNOTES" Alias "OSUnlockObject" _ ( Byval H As Long) Declare Function OSMemFree Lib "NNOTES" Alias "OSMemFree" _ ( Byval Handle As Long) As Integer Declare Function ReadInteger Lib "MSVCRT" Alias "memcpy" _ ( N As Integer, Byval P As Long, Byval B As Long) As Long Declare Function ReadString Lib "MSVCRT" Alias "memcpy" _ ( Byval S As String, Byval P As Long, Byval B As Long) As Long Sub Initialize Dim session As New NotesSession Dim x As String Dim m As String Dim p As Integer Dim I As Integer Dim n As Integer Dim hNL As Long Dim GroupCount List As Integer Dim a As String Dim abook As NotesDatabase Dim aview As NotesView Dim doc As NotesDocument On Error Goto oops Set abook = session.GetDatabase("", "names.nsf") Set aview = abook.GetView("People") Set doc = aview.GetFirstDocument Do Until doc Is Nothing a = doc.FullName(0) ' Get Names List handle (fails on R4) 'On Error Resume Next NSFBuildNamesList a$, 0, hNL 'On Error Goto 0 If hNL = 0 Then Print "Failed" Exit Sub End If ' Get memory pointer Dim pNL As Long pNL = OSLockObject(hNL) ' Get number of entries, skip to first entry ReadInteger n%, pNL, 2 pNL = pNL + 14 ' Read the entries For i% = 1 To n% x$ = String$(256, " ") ReadString x$, pNL, 256 p% = Instr(x$, Chr$(0)) pNL = pNL + p% If Not p% = 0 Then x$ = Left$(x$, p% - 1) ' each group is listed in x$ in this loop Next ' Discard the Names List OSUnlockObject hNL OSMemFree hNL 'Exit Do Set doc=aview.GetNextDocument(doc) Loop