Получение пользователей по элементу оргструктуры скриптом
Иногда в сценарии возникает необходимость получить пользователей, назначенных на определённую должность.
Для этого применяется метод GetUsersByDepartament.
Алгоритм использования метода следующий:
- найти элемент оргструктуры по идентификатору или по названию;
- получить пользователей, занимающих выбранную должность.
Существует два способа нахождения элемента оргструктуры: по идентификатору и по названию.
Идентификатор элемента оргструктуры можно посмотреть в базе данных в таблице OrganizationItem.
Пользователей, занимающих определённую должность, можно получить с помощью метода GetUsersByDepartament, передав в качестве параметра элемент оргструктуры. Данный метод всегда возвращает коллекцию пользователей. Если на выбранную должность может быть назначен ровно один сотрудник, то его можно получить из коллекции методом FirstOrDefault().
Примеры сценариев с использованием PublicAPI
Пространство имен:
using EleWise.ELMA.API;
Контекстная переменная:
- context.Poljzovatelj – переменная типа Пользователь.
Текст сценария:
//Получение элемента оргструктуры по Id context.Poljzovatelj = PublicAPI.Portal.Security.OrganizationItem.GetUsersByDepartament(PublicAPI.Portal.Security.OrganizationItem.LoadOrNull(1)).FirstOrDefault();
Контекстная переменная:
- context.Poljzovateli – переменная типа Пользователь, тип связи – Список.
Текст сценария:
//Получение элемента оргструктуры по названию и добавление их в контекстную переменную context.Poljzovateli context.Poljzovateli.AddAll(PublicAPI.Portal.Security.OrganizationItem.GetUsersByDepartament(PublicAPI.Portal.Security.OrganizationItem.Find("Name = ’Юридический отдел’").FirstOrDefault()));
Получение пользователей, входящих в определённую группу описано в отдельной статье.
Пример сценария без использования PublicAPI
В скрипте используются контекстные переменные:
- context.Poljzovatelj – переменная типа Пользователь, тип связи – Одиночная;
- context.SpisokPoljzovateley – переменная типа Пользователь, тип связи – Список.
Необходимо подключить пространства имен:
using EleWise.ELMA.Security.Managers; using EleWise.ELMA.Security.Models; using EleWise.ELMA.Model.Services;
Текст скрипта:
//получение элемента оргструктуры по идентификатору var orgItemPost = OrganizationItemManager.Instance.LoadOrNull(1); //проверка, найден ли элемент оргструктуры с таким идентификатором if (orgItemPost != null) { //получение пользователя, занимающего определённую должность var userOnPost = (User)UserManager.Instance.GetUsersByDepartament(orgItemPost).FirstOrDefault(); //запись полученного пользователя в переменную контекста context.Poljzovatelj = userOnPost; } else { //действия, в случае если элемент оргструктуры с таким идентификатором не найден } //получение элемента оргструктуры по названию var orgitemFilter = InterfaceActivator.Create<Filter>(); orgitemFilter.Query = "Name LIKE ’Юридический отдел’"; var ortItemDepartment = OrganizationItemManager.Instance.Find(orgitemFilter, null).FirstOrDefault(); //проверка, найден ли элемент оргструктуры с таким названием if (ortItemDepartment != null) { //получение пользователей, занимающих определённую должность var userList = UserManager.Instance.GetUsersByDepartament(ortItemDepartment); //запись полученных пользователей в переменную контекста foreach (var user in userList) { context.SpisokPoljzovateley.Add((User)user); } } else { //действия, в случае если элемент оргструктуры с таким названием не найден }