logo

[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);
	}
}