Получение списка пользователей на сервере

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

  1. SparkLone

    SparkLone Гость

    Доброго,
    Не подскажете элегантный способ програмно получить полный список пользователей?
    Задача:
    Админ на сервере запускает базу, она ему выводит список ВСЕХ пользователей зарегеных на сервере (по крайней мере тех для которых создан MailFile). Список вида: First/Last/Mailfile с чекбоксами. После выбора нужных пользователей жмется кнопка ОК и производятся определенные действия над мейловыми базами юзеров. При этом то же поле MailFile возможно будет скрыто от глаз (т.к. для принятия решения о выборе пользователя Админом это не нужное поле, но нужное для выполения задачи после выбора).

    Таким образом вопроса 2:
    1) Каким образом лучше реализовать визуальную составляющую? Т.е. как отобразить список с чекбоксами на форме (опять таки, чтобы часть полей были доступны впоследствии, но невидимы пользователю скрипта)
    2) Каким образом сформировать сам список пользователей. может я чего то не понимаю, но нет функции которая бы просто вывела список зарегенных пользователей.
    Полную информацию как я понимаю содержит только вьюха $Users, но там куча дублирования

    DbLookup не совсем подходит, т.к. по сути в моей задаче никаких ограничений нет
    Код (Text):
    query = "@DbLookup({Notes} : {NoCache}; {" + db.Server + "} : {"+ db.FilePath + "}; {$Users}; {" + ЧтоИщем + "}; {ПолеГдеИщем})"
    DbColumn в принципе по идее то что надо, но опять таки - куча дубликатов в сулчае выборки из $Users
    Код (Text):
    query = "@DbColumn({Notes} : {NoCache}; {" + db.Server + "} : {"+ db.FilePath + "}; {$Users}; 1)"
    Единственный вариант, который вижу - делать комплексно - сначала делать выборку всех MailAddress из вьюхи $VIMPeople (ибо FullName не всегда уникально как я понял), распарсить MailAddress на 2 части: FullName и MailDomain. И по этим данным проводить поиск в вьюхе $Users. Хотя муторно все это, может есть все таки более "человеческий" способ?
     
  2. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    а чем не подходит стандартный диалог выбора пользователей ?
    например, многозначное поле типа dialogList, на второй закладке выбор - Use Address dialog for choices
    или тоже самое в кнопке для поля fl_Users(Text or Names)
    Код (Text):
    def:=fl_Users;
    names:=@PickList( [Name]; def );
     
  3. SparkLone

    SparkLone Гость

    Как я понял - данный метод позволяет выбирать группы и вообще любых юзеров (с локальной книги в том числе), мне же необходимо чтобы :
    1) выборка шла только с определенного адрес-бука
    2) возможно было задавать критерии выборки (к примеру всех юзеров у которых задан mailFile)
    Второй пункт по моему даже @PickList( [Custom].. не позволит сделать..
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: SparkLone
    NotesDatabase.Search

    А визуально вывести в Listbox.
     
  5. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    можно извратиться сделать по другому..
    например, в АК создать группу, в которую будут входить необходимые пользователи ..
    аналогично написанному ранее в поле или в кнопку добавить @sort(@ExpandNameList("имя сервера:"путь к АК"; "имя группы"))..

    единственный минус это нужно вести контроль (руками, агентами) актуальности пользователей в этой группе

    но LS использовать все же лучше (тут я согласен с Medevic)
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    можно не извращаться, а сделать свое представление в нужной домино директории, который будет формировать нужный набор документов, в нужном виде....

    а потом юзать банальное NotesUIWorkspace.PickListCollection()
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: Akupaka
    Да ладно, как будто всегда у девелопера есть права ковырять серверный names.nsf?
    Думаю надо каким-то образом сёрчить names.nsf а результ, действительно, запихнуть в ws.Prompt
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    хм... может и "да ладно" :) я просто предложил способ. в условиях задачи не сказано было, что его нельзя править :)

    ЗЫ: у меня был доступ, и мне даже доверяли!.. ;)
     
  9. SparkLone

    SparkLone Гость

    Для: Medevic
    Я так понимаю, NotesDatabase.Search - альтернатива поиску (вместо того же DBLookup к примеру, прост опозволяет задавать условия отбора). Но не совсем понял как его применять, как показал хелп + поиск - его используют чтобы находить нужные документы. К примеру db.Search({Form = "имя формы" & FLD_NAME = "значение поля"}, Nothing, 0)
    В моем же случае надо делать выборку строк, или я не прав?
    1) Как можно сделать поиск в конкретном View?
    2) можно ли за раз вытащить нужные поля (а не так как я описывал в первом посте)?
    Был бы признателен за пример, хотя бы в общем виде..

    Для: Akupaka
    К сожалению ковырять names.nsf мне действительно никто не даст.
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: SparkLone
    Код (Text):
    Dim dc As NotesDocumentCollection
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    ...
    Set dc = db.Search({Form = "Person" & !@IsNull(MailFile)}, Nothing, 0)
    Set doc = dc.GetFirstDocument
    While Not (doc Is Nothing)
    ... что-нибудь делаем
    Set doc = dc.GetNextDocument(doc)
    Wend
    Получим коллекцию документов (пользователей с непустым полем "MailFile"). Проходимся по ним в цикле и выводим куда надо.
    <!--QuoteBegin-SparkLone+7:02:2008, 14:03 -->
    <span class="vbquote">(SparkLone @ 7:02:2008, 14:03 )</span><!--QuoteEBegin-->1) Как можно сделать поиск в конкретном View?
    [snapback]97092" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Метод notesView.FTSearch. Или взять условие отбора и скопировать его в db.Search.

    <!--QuoteBegin-SparkLone+7:02:2008, 14:03 -->
    <span class="vbquote">(SparkLone @ 7:02:2008, 14:03 )</span><!--QuoteEBegin-->2) можно ли за раз вытащить нужные поля (а не так как я описывал в первом посте)?
    [snapback]97092" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Можно. Через @DbLookup, @DbColumn.
    Иначе только в цикле.
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну, тогда Search удобно юзать :rolleyes:
    только это не альтернатива, а сам поиск и есть :D
    возвращает метод коллекцию документов, что просто - отлично и удобно :)

    Form = "Person", MailSystem = "1", вот тебе условия поиска по базе домино директории человеком у которых нотес-почта используется, к примеру...

    если поиск по виду, то либо notesView.getDocumentsByKey, либо notesView.FTSearch...
     
  12. SparkLone

    SparkLone Гость

    Для: Medevic
    Спасибо, по моему то что дохтур прописал ) И забить тогда на вьюхи и проч извращенья с парсиногом полей. Плохо, когда теоритическая база слабенькая..
    Теперь буду разбираться с выводом в ListBox )
     
  13. SparkLone

    SparkLone Гость

    Хм.. Кстати, только у меня так, или так запланированно - db.Search({Form = "Person"}, Nothing, 0) - не ищет самого запустившего как я понял.
    Я проверял работу скрипта под админом на сервере (комп - одновременно и клиент и сервер) - его данных почему то в списке нет..
     
  14. Sandr

    Sandr Гость

    Для: SparkLone

    А может документа нет? :)
     
  15. SparkLone

    SparkLone Гость

    Sandr
    А в каких случаях его может не быть? Под админом я прекрасно логинюсь в клиенте, все вроде работает.
    Для меня этот вопрос довольно критичен. Ибо если для каких то пользователей данный способ (db.Search) не прокатит - нужно делать по другому..
     
  16. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: SparkLone
    Так открой АК и посмотри есть ли он там.
    db.Search ищет всё. Главное, чтобы права были. :)
     
  17. SparkLone

    SparkLone Гость

    Для: Medevic
    Уууй.. Прошу прощения, невнимательность - вот главная беда.. ) Первый документ всегда глотался.
    Код (Text):
                Set doc = dc.GetFirstDocument
    While Not (doc Is Nothing)
    Set doc = dc.GetNextDocument(doc)
    If(doc Is Nothing) Then
    Msgbox "end"
    Else
    ...        
    End If
    Wend
    Кстати, не подскажете по поводу сортировки, как я понимаю, надо будет определять свой массив, сортировать его. Затем на основании его делать отдельное поле, с уже отсортированными данными (в виде красиво отформатирвоанной строки толкьо с нужными полями), и на основании этого поля - делать вывод в ListBox соответственно. При выборе в ListBox нужных строк - по номерам строк делать выборку из массива и собственно уже работать с нужными данными.
    Вариант нормальный или опять таки есть решение намного проще? )
     
  18. Sandr

    Sandr Гость

    мдя...:)

    Код (Text):
     Set doc = dc.GetFirstDocument
    While Not (doc Is Nothing)
    Msgbox "Делаем тут, а не после получения следующего!!!"
    Set doc = dc.GetNextDocument(doc)
    Wend
     
  19. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: Sandr
    Ведь может захотеться удалить документ в цикле, али нет?

    Так что конструкция вида
    Код (Text):
    Dim Doc as NotesDocument
    Dim NextDoc as NotesDocument

    Set Doc = Dc.GetFirstDocument
    While Not Doc Is Nothing
    Set NextDoc = Dc.GetNextDocument(Doc)
    'а тут хоть удаляй :)
    Set Doc = NextDoc
    Wend
    тоже имеет право на жизнь ;)
     
  20. SparkLone

    SparkLone Гость

    Sandr
    Эээ.. Я поместил код с ошибкой чтобы показать где именно она была. Потому и разместил код с фразой "Первый документ всегда глотался", к слову что я понял где она находится )

    По поводу сортировки и отображения - задача может усложниться.. Возможно прийдется давать возможность пользователю выбирать - по каким полям сортировать.
     
Загрузка...

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