Vielen Dank an alle und dickes Dankeschön an Torsten.
Das war der entscheidende Hinweis. Die GroupManager-Klasse brachte den entscheidenen Hinweis und damit den Erfolg.
Einmal das NAB (names.nsf) des Servers laden lassen, dann alle gecacheden Gruppen durchlaufen, die neue Funktion hasMember (ist noch zu schreiben) prüfen und los gehts mit dem Auflisten der Gruppen, wo der User enthalten ist.
Dim groupMan As New NotesGroupManager(True)
.... ' weitere Deklarationen
Set db = session.Currentdatabase
Set dbNAB = session.getDatabase ( db.Server , "names.nsf" )
Call groupMan.LoadAddressBook(dbNAB)
strNotesUserName = "CN=Hugo Test/OU=xy/O=z"
' den Notesname im CN-Format und alle seine Rollen auf der aktuellen DB im Array hinterlegen
varGroups = FullTrim ( ArrayAppend ( Split ( strNotesUserName, Chr$(1) ), db.QueryAccessRoles(strNotesUserName) ) )
Call groupMan.LoadAllGroups()
ForAll varGroup In groupman.CachedGroups()
Set group = varGroup
If Not group Is Nothing Then
Select Case group.Type
Case "0", "2" : ' nur Multi-Purpose und ACL only-Gruppen benutzen
If group.hasMember ( strNotesUsername ) Then varGroups = ArrayAppend ( varGroups, group.Name )
End Select
End If
End ForAll
' in varGroups sind nun alle Gruppen drin, zusammen mit dem CN-Format des Notesnamens und aller Rollen auf der aktuellen DB, damit kann man gegen die Autoren- und Leserfelder prüfen.
Die Methode hasMember benutzt die Eigenschaft AllMembers, um der übergebenen Notesnamen (canonisches Format CN=...) im Array zu suchen und den Erfolg/Misserfolg zurückzuliefern.
Das Problem ist erfolgreich in LotusScript gelöst und sehr performant.
Marco