Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
Вся лента вопрос-ответ
Рубрики
   Разработка notes-приложений
   Разработка web-приложений
   Администрирование Notes&Domino
   Почта Lotus Domino
   Общие вопросы
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Вопрос-ответ

RSS
Главная   Вопрос-ответ   Как в Lotus Notes с помощью формул определить, относится ли к конкретной группе пользователь

Как в Lotus Notes с помощью формул определить, относится ли к конкретной группе пользователь

Вопрос:

Как в Lotus Notes с помощью формул определить : относится ли к конкретной группе (к примеру, Marketing) пользователь открывший документ или нет?

Ответ:


Все просто. Спасибо Денису Самойловичу, подсказавшему: @IsMember("Marketing"; @UserNamesList)

Значительно сложнее решение для задачи не с текущим, а с любым пользователем
Увы, в общем случае - никак, хотя задача с первого взгляда простая
Вернее, раньше получалось очень громоздко и некрасиво. В R6 же появились формулы для циклов... так что - может, получится что-нибудь удобоваримое...
Используйте @DbLookup по служебному представлению соответствующей адресной книги...

Сложность заключается в том, что группы могут быть вложенными в другие группы и так далее...
Кроме того, и адресных книг может быть несколько

Если отбросить эти оговорки, то задача решаема указанным выше способом

Впрочем, есть один интересный момент, который может привести к неожиданному решению задачи. В дизайне поля (для диалоговых полей)есть свойство "Look up addresses on document refresh", оно подсчитывает Notes-адреса, раскрывая группы, а из адресов получить имена, надеюсь, более просто

Решение задачи на LotusScript для поиска по одной адресной книге выглядит следующим образом
Решение, присланное автору Алексеем Катюшиным (получение списка членов группы):
На входе:
Server - имя сервера
Db - путь к базе данных (адресной книге)
Group - имя группы
Separator - разделитель полученных членов группы в строке результата
Warn - индикатор режима обработки ошибки (значение True - выводить сообщение об ошибке в диалоговом окне)

Public Function GetGroupMembers( Server As String, Db As String, Group As String, Separator As String, Warn As Integer ) As String
If Group = "" Then Exit Function

Dim Session As New NotesSession
Dim NameDb As NotesDatabase
Dim GroupView As NotesView
Dim NameDoc As NotesDocument

Const GROUP_VIEW_NAME = "Groups"

Set NameDb = Session.GetDatabase( Server, Db )
If NameDb Is Nothing Then
If Warn Then
Messagebox "Can not initialize Db." + Chr(10) + "Operation is not completed!", 0 + 16 + 0, "Stop"
End If

Exit Function
End If

Set GroupView = NameDb.GetView( GROUP_VIEW_NAME )
If GroupView Is Nothing Then
If Warn Then
Messagebox "Can not initialize View '" + GROUP_VIEW_NAME + "'." + Chr(10) + "Operation is not completed!", 0 + 16 + 0, "Stop"
End If

Exit Function
End If

Set NameDoc = GroupView.GetDocumentByKey( Group )
If NameDoc Is Nothing Then

GetGroupMembers = Group + Separator
Exit Function
End If

Forall GroupMember In NameDoc.Members
GetGroupMembers = GetGroupMembers + GetGroupMembers( "", "", GroupMember, Separator , Warn )
End Forall
End Function


Решение Julian Robichaux, найденное в The [unfinished] LotusScript Book (Page 148), задачи в несколько другой формулировке:
Получение списка групп, в которые входит пользователь
Замените операции записи в файл формированием результата функции
Function GetGroups (lookupName As String, groupView As NotesView, alreadyUsed As String, indentLevel As Integer, fileNum As Integer)
'** This sub will recursively iterate through all the groups in the NAB,
'** figuring out which ones the given user or group is in.
On Error Goto processError
Dim doc As NotesDocument
Dim memberItem As NotesItem
Dim groupName As String
Dim tabString As String
'** use tabString to indent the entry, indicating that a group is a
'** member of the group below it
For i% = 1 To indentLevel
tabString = tabString & Chr(9)
Next
'** step through the group documents in the NAB that we're looking at
Set doc = groupView.GetFirstDocument
Do While Not (doc Is Nothing)
Set memberItem = doc.GetFirstItem( "Members" )
groupName = doc.ListName(0)
'** Check for direct inclusion in a group. If the lookup name is
'** in the Members text list and we haven't already used the group
'** (if we did, it will be in the alreadyUsed string, and would
'** represent a circular reference), output the group name to our
'** file and recurse
If (memberItem.Contains( lookupName )) And (Instr(1, alreadyUsed, "~" & groupName & "~", 5) < 1) Then
Print #fileNum%, tabString & groupName
'** recursion will find other groups that this group is
'** a member of
Call GetGroups( groupName, groupView, alreadyUsed & "~" & groupName & "~", indentLevel + 1, fileNum )
End If
Set doc = groupView.GetNextDocument( doc )
Loop
Exit Function
processError:
Print #fileNum%, "Error " & Cstr(Err) & ": " & Error$
Exit Function
End Function

Успехов!
Николай Норкин

Денис Самойлович нашел ответ на вопрос и для задачи не с текущим пользователем:
@ExpandNameList(SERVER_NAME; USERS_LIST) - преобразует группы (если есть) в имена пользователей. Источник: шаблон StdR6WebDocLib
 
  Опубликовано — 10/06/2004 |    

Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU