Форма для заполнения списка пользователей

Опубликовано:
10 сентября 2012 в 16:14
  • 14

Сегодня с Владимиром Борисовым бились над вопросом – как запросить у пользователя список пользователей, с которыми надо что-то сделать. Например, это бывает нужно в сценариях администратора. Другой пример – назначение прав на те объекты, для которых в 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 - список выбранных пользователей

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

Путем опроса общественного мнения нами было выяснено, что о другом способе выбора пользователей знают далеко не все разработчики. А у тех, кто знает, знания часто ограничиваются фразой «ну было что-то, но хоть убей не помню – как это вызывать». Отсюда родился этот материал, потому что путем обращения к разработчикам платформы, мы все-таки узнали – как решить нашу задачу должным образом. Наш принцип: узнал что-то полезное - поделись с другими. smiley

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 (возможно, и в других, не проверял).

17
Подписаться

Комментарии

Круть, прикрутил себе, на 4.8 работает ) 

4.6.1 уже не поддерживает

 

UserList = ServiceFactory.GetUserList
[Window Title]
Ошибка
 
[Content]
Method 'GetUserList' not supported by automation object.
 
[Expanded Information]
Сценарий "": ошибка в строке 2.
 
[V]  Меньше сведений [ОK] 
 
 
 
 
Когда же уже появится возможность редактировать свои комментарии

А "Избранное" это что за зверь? В какой версии такое появится?

Погодите, а как считать то результаты UserListDialog?

// В итоге UserList - список выбранных пользователей

 

 

Да, работает.
 
foreach user in UserList
...  
endforeach
А "Избранное" это что за зверь? В какой версии такое появится?

В 4.9, вероятно. Пока еще не разбирался детально с этим функционалом. Из того что вижу в качестве пользователя системы - я могу любую группу или пользователя добавить в избранное (через контекстное меню в списке пользователей). Ну и исключить из избранного тоже.

Подскажите, а как ограничить список пользователей в левой части?

А как отобразить в правой части ранее выбранных пользователей?

Авторизуйтесь, чтобы написать комментарий