Определение кол-ва пользователей в группе

DNT

Постоялец форума
Lotus team
12.10.2005
590
7
37
Украина, Одесса
#1
Есть задача: перед сохранением/отправкой документа записать в переменную количество пользователей из поля "SendTo" текущего документа, чтоб знать скольким пользователям ушло письмо.
Поле "SendTo" - мультивалю, выбор из адр. книги: таким образом в поле могут быть указаны группы пользователей.

Как бы мне пробежаться по этому полю и посчитать пользователей в указанных группах? :blink:
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#2
Забавная задача.
Я как раз недавно делал что-то похожее: писал анализатор Address book'a.

Я пошёл по ручному пути (там у меня всё в виде класса оформлено было): ищёшь все группы в names.nsf на серваке, и проходишься по полю Members, не забывая что там тоже могут быть указаны группы.
Экспандишь это дело, до тех пор, пока не исчезнут вложенные группы и смотришь, сколько человечков насчиталось.
Но забываем, что в группе могут быть указаны и сервера :blink:

Есть методы, которые возвращаю группы юзера, но не юзеров группы :)
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#3
Недокументированная @ExpandNameList не поможет? - работала вроде до 4-го уровня вложенности групп.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#4
вот на скрипте:
http://searchdomino.techtarget.com/tip/0,2...46_mem1,00.html

This code generates a list of users from a group name from the NAB. The code will determine whether the name corresponds to a person or group, and if it's a group, then the code will break it down into all person members. The code works even if there are nested groups. However, the code is restricted by the Domino limit on recursive calls, which depends on the Domino Directory.
Code
Код:
Function getPersonMembers
(groupName As String) As Variant
Dim nab As New NotesDatabase("","names.nsf")
Dim grpView As NotesView, personView As NotesView
Dim doc As NotesDocument , doc2 As NotesDocument 
Dim namesList As Variant
Dim memberList() As String
Dim grpname As NotesName

If nab.Server = "" Then
Set nab = New NotesDatabase
("Servername","names.nsf")
End If
Set grpView = nab.GetView("Groups")
Set personView = nab.GetView("($VIMPeople)")
Set doc = grpView.GetDocumentByKey(groupName)

Redim memberList(0) As String
If Not doc Is Nothing Then
Forall mbrs In doc.members
Set grpname = New NotesName(Cstr(mbrs))
Set doc2 = personView.GetDocumentByKey
(grpname.Common)
tmnE = Elements(memberList) 
x = 0
If doc2 Is Nothing Then
namesList = getPersonMembers(grpname.Common)

If Ubound(namesList) > 0 Then

Redim Preserve memberList(0 To tmnE + 
Ubound(namesList))
Forall nms In namesList
memberList(tmnE + x) = Cstr(nms)
x=x+1
End Forall
End If
Else
Redim Preserve memberList(0 To tmnE + x)
memberList(tmnE + x) = Cstr(mbrs)
End If  
End Forall
Else ' entry is either a person or a mail in db.
t = Elements(memberlist)
Redim Preserve memberList(t)
memberList( t) = Cstr(groupName)

End If
getPersonMembers = memberList
End Function
а вот совмещенный класс
http://www.eknori.de/2008-04-27/is-user-a-...a-nested-group/