Определение непосредственного руководителя в сценарии

В статье приведен пример сценарий для определения руководителя пользователя. 

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

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

Сценарий записывает всех начальников пользователя в контекстную переменную context.Nachaljniki (не только начальника отдела, но и выше по оргструктуре).

Контекстные переменные:

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

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

using EleWise.ELMA.API;

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

foreach (var chief in PublicAPI.Portal.Security.OrganizationItem.GetChiefByUser(context.Ispolnitelj))
{
    context.Nachaljniki.Add(chief);
}

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

В сценарии использованы контекстные переменные:

  • context.Ispolnitelj – переменная Исполнитель, тип Пользователь;
  • context.Nachaljnik – переменная Начальник, тип Пользователь.

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

var chiefs = context.Ispolnitelj.OrganizationItems.ToArray ().Union (context.Ispolnitelj.OrganizationGroups).Select (organizationItem =>  {
	var parentOrganizationItem = organizationItem.ParentItem;
	while (parentOrganizationItem != null && parentOrganizationItem.User == null)
		parentOrganizationItem = parentOrganizationItem.ParentItem;
	return parentOrganizationItem != null ? parentOrganizationItem.User : null;
}).Where (u => u != null);

if(!chiefs.Any()) //Если не найдено ни одного элемента организационной структуры (высшее звено)
	context.Nachaljnik = context.Ispolnitelj; //Начальник инициатора - сам инициатор

else //Стандартная ветка
{
	var chief = chiefs.First ();
	context.Nachaljnik = chief;
}
Следует отметить, что в случае, если пользователь, от имени которого запускается сценарий, является высшим звеном организационной структуры, он же и будет назначен своим начальником.