logo

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

Иногда в сценарии возникает необходимость получить пользователей, назначенных на определённую должность.
Для этого применяется метод GetUsersByDepartament.

Алгоритм использования метода следующий:

  • найти элемент оргструктуры по идентификатору или по названию;
  • получить пользователей, занимающих выбранную должность.

Существует два способа нахождения элемента оргструктуры: по идентификатору и по названию.
Идентификатор элемента оргструктуры можно посмотреть в базе данных в таблице OrganizationItem.

Пользователей, занимающих определённую должность, можно получить с помощью метода GetUsersByDepartament, передав в качестве параметра элемент оргструктуры. Данный метод всегда возвращает коллекцию пользователей. Если на выбранную должность может быть назначен ровно один сотрудник, то его можно получить из коллекции методом FirstOrDefault().

Примеры сценариев с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы ELMA до 3.12.1 включительно.

Пространство имен:

1
using EleWise.ELMA.API;

Контекстная переменная:

  • context.Poljzovatelj – переменная типа Пользователь.

Текст сценария:

1
2
//Получение элемента оргструктуры по Id
context.Poljzovatelj = PublicAPI.Portal.Security.OrganizationItem.GetUsersByDepartament(PublicAPI.Portal.Security.OrganizationItem.LoadOrNull(1)).FirstOrDefault();

Контекстная переменная:

  • context.Poljzovateli – переменная типа Пользователь, тип связи – Список.

Текст сценария:

1
2
//Получение элемента оргструктуры по названию и добавление их в контекстную переменную context.Poljzovateli
context.Poljzovateli.AddAll(PublicAPI.Portal.Security.OrganizationItem.GetUsersByDepartament(PublicAPI.Portal.Security.OrganizationItem.Find("Name = ’Юридический отдел’").FirstOrDefault()));

Получение пользователей, входящих в определённую группу описано в отдельной статье.

Пример сценария без использования PublicAPI

В скрипте используются контекстные переменные:

  • context.Poljzovatelj – переменная типа Пользователь, тип связи – Одиночная;
  • context.SpisokPoljzovateley – переменная типа Пользователь, тип связи – Список.

Необходимо подключить пространства имен:

1
2
3
using EleWise.ELMA.Security.Managers;
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Model.Services;

Текст скрипта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//получение элемента оргструктуры по идентификатору
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 {
    //действия, в случае если элемент оргструктуры с таким названием не найден
}