1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. yerke

    yerke Well-Known Member

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

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

    Вложения:

  2. Darkhan

    Darkhan Well-Known Member
    Lotus team

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

    savl Well-Known Member
    Lotus team

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

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

    yerke Well-Known Member

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

    Репутация:
    0
    Регистрация:
    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 Well-Known Member
    Lotus team

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

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

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