[ELMA3] Сбор данных по персональному показателю
В статье описано, как в сценарии получить список пользователей, ответственных за показатель, и как для каждого из них установить значение за период.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.12.1 включительно.
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
// Загружаем показатель по наименованию
var indicator = PublicAPI.KPI.Indicator.FindByName("Количество звонков в день");
// Получаем пользователей, которые являются ответственными за показатель
var users = PublicAPI.KPI.Indicator.GetPersonals(indicator);
// Перебираем всех пользователей
foreach(var user in users)
{
// Мы присваиваем значение - константу
// Здесь может быть запрос к внешнему сервису, службе и т.д.
var value = 123.45;
// Сохраняем значение в базу
PublicAPI.KPI.Indicator.SetFactValue(indicator,value,DateTime.Now,user, "Скрипт"); //устанавливает фактическое значение
//PublicAPI.KPI.Indicator.SetPlanValue(indicator,value,DateTime.Now,user, "Скрипт"); //устанавливает плановое значение
}
Пример сценария без использования PublicAPI
Пространство имен:
using EleWise.ELMA.Services; using EleWise.ELMA.KPI.Security; using EleWise.ELMA.KPI.Managers; using EleWise.ELMA.Security.Models;
Текст сценария:
// Загружаем показатель по ID
var indicator = IndicatorsService.Instance.LoadByName("Количество звонков в день");
// Создаем пару дат, которая будет обозначать период показателя
Pair<DateTime, DateTime> period = null;
// Служба для работы с периодичностями
var periodicityService = Locator.GetService<EleWise.ELMA.KPI.Common.Interfaces.IPeriodicityService>();
if (periodicityService != null)
{
// Определяем период, за который записываем значение
period = periodicityService.GetPeriod(indicator.Periodicity, DateTime.Now);
}
if (period != null)
{
// Получаем ответственных за показатель
// Для этого получаем матрицу ответственности
var responsibleMatrix = indicator.GetResponsiblesMatrix();
// Получаем набор прав для роли ответственного Roles.Responsible
var responsibleItem = responsibleMatrix.GetPermissionsByRole(Roles.Responsible).FirstOrDefault();
// Получаем пользователей, которые являются ответственными за показатель
var users = responsibleItem.GetAllUsers();
// Перебираем всех пользователей
foreach(var user in users)
{
// Мы присваиваем значение - константу
// Здесь может быть запрос к внешнему сервису, службе и т.д.
var value = 123.45;
// Сохраняем значение в базу
IndicatorsService.Instance.SetPeriodValue(indicator, period, value, "Скрипт", user);
}
}