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

Тема в разделе "Lotus - Программирование", создана пользователем yerke, 18 фев 2013.

  1. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    привет всем
    как получить имена всех груп где состоит заданный юзер (а не тукущий)? (без поиска в АК во вьюшке "группы")
    а еще чтоб вернулись и те группы, где юзер не прописан в прямую (группа в группе).

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

    Вложения:

  2. Darkhan

    Darkhan Lotus team
    Lotus team

    Регистрация:
    14 дек 2012
    Сообщения:
    97
    Симпатии:
    4
    По мне, лучше где-нибудь "кэшировать" вхождения (по расписанию).
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    По группам быстрого решения нет, для произвольного пользователя (или я еще его не знаю :) )
    Если он есть в 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е сообщение из темы
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Думаю без АК не обойтись/
    Тебе же надо знать в каких группах в принципе состоит пользователь.
     
  5. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    всем спасибо
    перечитал все предложенные мануалы
    и на основе их создал новый класс
    Код (LotusScript):
    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
     
  6. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    строчку
    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)
     
  7. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    Вот еще песочница вам в помощь. Похожие темы поднимались неоднократно.

    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.
     
Загрузка...

Поделиться этой страницей