logo

[ELMA3] Заполнение рядовых значений показателя KPI через сценарий

Иногда возникает потребность записать данные в ряд показателя KPI через сценарий.

Например, есть показатель «Выручка», в настройках которого указано разложение в ряд по объектам «Филиал» (рис. 1).

Рис. 1. Настройка рядового показателя

Перед началом работы необходимо подключить сборку EleWise.ELMA.KPI.

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

using EleWise.ELMA.KPI.Exceptions;
using EleWise.ELMA.KPI.Extensions;
using EleWise.ELMA.KPI.Managers;
using EleWise.ELMA.KPI.Models.Dimension;
using EleWise.ELMA.KPI.Security;

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

public void setDimensionValue(Context context) 
{ 
    // Получение показателя по имени 
    var indicator = IndicatorManager.Instance.FindByName("Выручка"); 
    // Создание пары дат, которая будет обозначать период показателя      
    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); 
    }         
          
    // Список, где будут храниться наши элементы ряда 
    var dimensions = new List<IKpiValueDimensionItem>(); 
          
    //Проверка того, что показатель настроен на ряды 
    if (indicator.ExpandedInSeries && indicator.DimensionUid.HasValue) 
    { 
    // Список, где будут храниться наши элементы ряда 
    var dimensions = indicator.GetDimensionItems()
   .Where(k => k.StartDate <= period.Second && (k.EndDate == null || k.EndDate >= period.First)) 
     } 
          
    // выделяем нужный элемент ряда, например по Id 
    var dimension = dimensions.FirstOrDefault(d => d.Id == 1); 
 
    if(dimension != null)
    { 
    // записываем нужное значение 
    IndicatorsService.Instance.SetPeriodValue(indicator, period, 123.45, "запись значения из процесса", null, dimension); 
    } 
}