Как Получить Имена Всех Груп Где Состоит Заданный Юзер

yerke

Well-known member
28.08.2007
392
0
#1
привет всем
как получить имена всех груп где состоит заданный юзер (а не тукущий)? (без поиска в АК во вьюшке "группы")
а еще чтоб вернулись и те группы, где юзер не прописан в прямую (группа в группе).

(или надо чтобы @UserNamesList вовращала все групппу и итп не только для текущего юзера и для заданного )))
(или как работает Effective Access в АСL?)
 

Вложения

Darkhan

Lotus team
14.12.2012
98
2
#2
По мне, лучше где-нибудь "кэшировать" вхождения (по расписанию).
 

savl

Lotus team
28.10.2011
2 131
102
#3
По группам быстрого решения нет, для произвольного пользователя (или я еще его не знаю :) )
Если он есть в ACL напрямую то можно часть информации получить так:
NotesDatabase class
Методы:
QueryAccess (доступ)
QueryAccessPrivileges (привелегии)
QueryAccessRoles (роли)
Если его нет, то почитай описание методов, там указано.

По поводу групп:
How do you make a list of all groups a person is in?
Working with groups in LotusScript
Эти две ссылки взяты из темы, которую стоит прочитать полностью.
Ссылка на 19е сообщение из темы
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#4
Думаю без АК не обойтись/
Тебе же надо знать в каких группах в принципе состоит пользователь.
 

yerke

Well-known member
28.08.2007
392
0
#5
всем спасибо
перечитал все предложенные мануалы
и на основе их создал новый класс
Код:
Public Class GroupManager

'=properties
Public Session As NotesSession
Public CurrentDatabase As NotesDatabase
Public AddressBook As NotesDatabase
Public AddressBookView As NotesView

'=constructor
Public Sub New

On Error Goto processError

Set Session = New NotesSession
Set CurrentDatabase = Session.CurrentDatabase
Set AddressBook = Session.GetDatabase(CurrentDatabase.Server, "names.nsf", False)
If AddressBook Is Nothing Then Error 1984, "Невозможно получить адресную книгу!"
Set AddressBookView = AddressBook.GetView("($ServerAccess)")
If AddressBookView Is Nothing Then Error 1984, "Невозможно получить представление в адресной книге!"
Call AddressBookView.Refresh()
AddressBookView.AutoUpdate = False

Exit Sub
processError:
Error Err, "-> CLASS: " + Typename(Me) + "-> " + Cstr(Getthreadinfo(1)) + " (" + Cstr(Erl) + ") " + Error$
End Sub

'=methods
Public Function GetGroupsForUser(UserName As String) As Variant

Dim nn As Variant
Dim AllGroups As Variant
Dim k As Integer
Dim dcol As NotesDocumentCollection
Dim doc As NotesDocument		

On Error Goto processError

GetGroupsForUser = Split("", "")

nn = Trim(Cstr(UserName))
If nn = "" Then nn = Session.UserName
Set nn = New NotesName(nn)
nn = Trim(Cstr(nn.Canonical))

AllGroups = Split("", "")
AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, nn)), 5)
k = -1

Do
k = k + 1
Set dcol = AddressBookView.GetAllDocumentsByKey(AllGroups(k), True)
If dcol.Count > 0 Then
Set doc = dcol.GetFirstDocument()
Do While Not doc Is Nothing
If Not Isnull(Arraygetindex(doc.Members, AllGroups(k), 5)) Then AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)
Set doc = dcol.GetNextDocument(doc)
Loop
End If
Loop While k < Ubound(AllGroups)

GetGroupsForUser = Fulltrim(Arrayreplace(AllGroups, AllGroups(0), ""))

ENDING:
GetGroupsForUser = Arrayunique(Fulltrim(GetGroupsForUser), 5)

Exit Function
processError:
Error Err, "-> CLASS: " + Typename(Me) + "-> " + Cstr(Getthreadinfo(1)) + " (" + Cstr(Erl) + ") " + Error$
End Function

End Class
 

yerke

Well-known member
28.08.2007
392
0
#6
строчку
If Not Isnull(Arraygetindex(doc.Members, AllGroups(k), 5)) Then AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)

заменить просто на
AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)
 

NetWood

Lotus team
17.04.2008
372
18
#7
Вот еще песочница вам в помощь. Похожие темы поднимались неоднократно.

http://193.232.119.19/samples/sandbox.nsf/...,group,demo.nsf

About Group Maint Demo
This database is a subset of the design of the Domino Address Book, with code added to manipulate Group records. There are several sample agents ("GMan Samples") to demonstrate typical applications.
The coding is done using two custom classes, NotesGroup and NotesGroupManager. These are stored in the LotusScript library "GroupManager".
See the Help Using document for a complete description of the classes that implement this functionality.