Сегодня с Владимиром Борисовым бились над вопросом – как запросить у пользователя список пользователей, с которыми надо что-то сделать. Например, это бывает нужно в сценариях администратора. Другой пример – назначение прав на те объекты, для которых в DIRECTUM по умолчанию система прав не предусмотрена и она сделана на уровне прикладной разработки. Например, вполне можно сделать права доступа на уровне записей справочников.
Изначальный вариант заключался в использовании DuaiListDialog:
DualList = CreateDualListDialog('Выбор пользователей')
DualList.Title = "Выбор пользователей"
DualList.AvailableItemsTitle = 'Все пользователи'
DualList.SelectedItemsTitle = 'Выбранные пользователи'
UsersComp = CreateReference(SYSREF_USERS)
UsersComp.Open
foreach User in UsersComp
DualList.AvailableItems.Add(User.SYSREQ_USERS_LOGIN)
endforeach
DualList.Execute()
UserList = ServiceFactory.GetUserList
foreach UserName in DualList.SelectedItems
UserList.Add(ServiceFactory.GetUserByName(UserName))
endforeach
// В итоге UserList - список выбранных пользователей
Но вариант этот не слишком красивый, потому что пользователи никак не сгруппированы и приходится отображать их логин. Если пользователей много, то в таком списке сложно ориентироваться.
Путем опроса общественного мнения нами было выяснено, что о другом способе выбора пользователей знают далеко не все разработчики. А у тех, кто знает, знания часто ограничиваются фразой «ну было что-то, но хоть убей не помню – как это вызывать». Отсюда родился этот материал, потому что путем обращения к разработчикам платформы, мы все-таки узнали – как решить нашу задачу должным образом. Наш принцип: узнал что-то полезное - поделись с другими.
UserListDialog = CreateDialog(SYSDLG_SETUP_USERS_LIST; '')
UserList = ServiceFactory.GetUserList
UserListDialog.Params.Add('Application'; Application)
UserListDialog.Params.Add('UserList'; UserList)
UserListDialog.Params.Add('UserListRequired'; TRUE)
UserListDialog.Params.Add('NeedIgnoreUnoperatingRecords'; TRUE)
UserListDialog.CreateView(UserListDialog.MainViewCode)
UserListDialogForm = UserListDialog.View.Forms(FORMCARD_NAME)
UserListDialogForm. Title.BasePart = 'Выбор пользователей'
UserListDialog.DataSet.Open
UserListDialogForm.ShowModal
// В итоге UserList - список выбранных пользователей
Стоит отметить, что этот диалог предназначен для выбора именно пользователей, а не пользователей и групп. Поэтому при выборе слева в дереве группы, в выбранных пользователей добавляется не она, а пользователи, в нее входящие.
Примеры работоспособны в DIRECTUM 4.8 и 4.9 (возможно, и в других, не проверял).
Вот тут в п7. тоже есть похожий пример, другого диалога. Может есть смысл вообще статью о диалогах написать?
Пожалуй, этот материал продолжение статьи Ксюши. А еще теперь появились мастера действий, которые в той статье не отражены. Но ведь не влезать же в чужую статью со своими дополнениями. Еще целую статью о диалогах - будет уже повторение старого. Превращать Club в Wiki - тоже дело сложное и не совсем однозначное. На эти вопросы не забили, они прорабатываются. Пока предлагаю пользоваться тем, что есть - считаешь, что твоя статья что-то дополняет - делай ссылку типа "см. также". Обратную ссылку можно в комментариях разместить. Несколько хуже в плане наглядности, но зато не надо влезать в то, что написал другой автор.
Т.к. статья Ксюши более объемная, помещу ссылку на свою туда в комментарии.
Примеры в DIRECTUM 4.7 тоже работают.
Хочу добавить: диалог SYSDLG_SETUP_USERS_LIST - функция недокументированная, и для широкого пользования не предлагается.
В случае возникновения инцидентов, связанных с использованием данной функции в вашей прикладной разработке - поддержка оказываться не будет.
Таким образом, используем сию функцию AS IS до тех пор, пока она официально не протестирована для широкого пользования и не документирована.
Круть, прикрутил себе, на 4.8 работает )
4.6.1 уже не поддерживает
А "Избранное" это что за зверь? В какой версии такое появится?
Погодите, а как считать то результаты UserListDialog?
Подскажите, а как ограничить список пользователей в левой части?
А как отобразить в правой части ранее выбранных пользователей?
Андрей, заполните параметр UserListDialog.Params.Add('UserList'; UserList)
Авторизуйтесь, чтобы написать комментарий