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