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

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

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

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

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

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

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

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

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

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 {
	//действия, в случае если элемент оргструктуры с таким названием не найден
}