Getting a user's superior in a script
This article explains how to determine a user's direct superior in a script.
Script with PublicAPI
Note
Documentation on PublicAPI is available here
Attention
The script below is relevant for ELMA up to 3.12.1 inclusive.
The script writes all the superiors of a user to the context.Superiors variable (not only the head of a department but all the users who are superior in the organizational structure).
Context variables:
context.Executor - Executor, User type
context.Superiors - Superiors, User type, link type - list
Namespace:
using EleWise.ELMA.API;
Script text:
foreach (var superior in PublicAPI.Portal.Security.OrganizationItem.GetChiefByUser(context.Executor))
{
context.Superiors.Add(superior);
}
Script without PublicAPI
The script uses the following context variables:
context.Executor - Executor, User type
context.Superior - Superior, User type
context.Superior - Superior, User type
Script text:
var superiors = context.Executor.OrganizationItems.ToArray ().Union (context.Executor.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(!superiors.Any()) //if no organizational structure elements found (top level element)
context.Superior = context.Executor; //the initiator is selected as the superior
else //standard selection
{
var superior = superiors.First ();
context.Superior = superior;
}
If the user who starts the process is the highest element of the organizational structure, he or she will be specified as the superior.