logo

[ELMA3] Сбор данных по персональному показателю

В статье описано, как в сценарии получить список пользователей, ответственных за показатель, и как для каждого из них установить значение за период.

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

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

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

1
using EleWise.ELMA.API;
Текст сценария:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Загружаем показатель по наименованию
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

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

1
2
3
4
using EleWise.ELMA.Services;
using EleWise.ELMA.KPI.Security;
using EleWise.ELMA.KPI.Managers;
using EleWise.ELMA.Security.Models;
Текст сценария:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Загружаем показатель по 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);
    }
}