Индикаторы
Индикаторы
Индикаторы предназначены для построения наглядных инструментов онлайн-мониторинга различных показателей работы call-центра.
По аналогии с отчетами индикатором может быть любое количество. Можно одновременно расположить на экране несколько индикаторов. Кроме этого, индикаторы могут содержать в себе друг друга, чтобы обеспечить наиболее удобное и наглядное отображение информации.
В большинстве случаев источником данных для индикатора являются SQL-запросы в базы данных. Запросы выполняются с заданной частотой. В более сложных случаях можно использовать сценарии, которые позволяют корректировать значения индикаторов, выполнять HTTP-запросы, выполнять фрагменты кода и т.д.
Простые индикаторы
Индикатор отображает данные, которые возвращает первая строка SQL-запроса. Остальные строки игнорируются. Количество ячеек индикатора определяется заданными количеством строк и столбцов. Ориентация индикатора (горизонтальная или вертикальная) определяет порядок заполнения ячеек данным – по строкам или по столбцам. Если размер индикатора (произведения количества строк и количества столбцов) не позволяет отобразить все значения, не уместившиеся значения отображаться не будут.
Пример настройки индикатора – SQL-запрос и значения (появляются автоматически после проверки запроса):
Горизонтальный индикатор (3 столбца, 1 строка):
Вертикальный индикатор (1 столбец, 3 строки):
Увеличенный размер второго значения (2х2) и увеличенный размер индикатора (2х3):
Пороговые значения для желтого/красного, а также формат значения «{0} сек»:
Вложенные индикаторы
В дополнение к SQL-запросу (либо вместо него), можно добавлять к индикатору дочерние элементы. Рекурсия (добавление самого себя напрямую или через цепочку) игнорируется. Для каждого дочернего элемента можно задать размер (по умолчанию 1х1).
Если в SQL-запросе есть входные параметры, для дочернего элемента нужно задать их значения. Таким образом можно создавать шаблоны (например, ряд показателей для очереди) и размещать несколько шаблонов с заданными параметрами внутри одного индикатора.
Обработка данных
Если SQL-запрос возвращает null, значение не отображается. Чтобы отобразить 0 необходимо использовать оператор coalesce(value, 0).
Для дочерних индикаторов используется период обновления родительского индикатора самого верхнего уровня.
Всегда используется только первая строка.
Отрисовка интерфейса
Внешний вид интерфейса определяется глобальными параметрами системы, а также настройками индикаторов (цвет заголовка) и значений (цвета и размеры шрифта).
Прозрачный цвет игнорируется (используется параметр системы).
Пустые заголовки не отображаются.
Если заголовок занимает слишком много места, он автоматически скрывается, если значение не умещается в ячейку, размер шрифта уменьшается автоматически
Значения параметров системы по умолчанию:
Сценарии
Назначенный бизнес-сценарий выполняется после каждого обновления данных. В него передается информация о текущем индикаторе и полученные в результате SQL-запроса значения. В простом случае сценарий может вернуть одно значение. Если оно не пусто (null), то на него будут заменены все значения индикатора. Идентификатор текущего индикатора можно получить через parameters_.GetValue(“ID”):
return Convert.ToString(parameters_.GetValue("ID"))+" from scenario";
В более сложном случае можно вернуть словарь значений (заменить одно или несколько значений индикатора, как с использованием старых значений, так и без него):
var result = new System.Collections.Generic.Dictionary<string,object>();
result["first"] = 111;
result["second"] = parsedContent_.get("first")+"_"+parsedContent_.get("second");
result["third"] = 333;
result["fourth"] = DateTime.Now;
return result;
В самом сложном случае можно полностью переопределить набор значений индикатора и их параметры. Это позволяет сформировать структуру индикатора, значения и их свойства динамически:
var result = new System.Collections.Generic.List<Cx.Client.Indicators.IndicatorValue>();
result.Add(new Cx.Client.Indicators.IndicatorValue()
{
Caption = "первый",
Value = 1,
DefaultColor = System.Drawing.Color.LightBlue.ToArgb()
});
result.Add(new Cx.Client.Indicators.IndicatorValue()
{
Value = 123,
DefaultColor = System.Drawing.Color.Orange.ToArgb()
});
var r = new Random();
if (r.Next(10) < 5)
{
result.Add(new Cx.Client.Indicators.IndicatorValue()
{
Caption = "тест",
Value = DateTime.Now
});
}
else
{
result.Add(new Cx.Client.Indicators.IndicatorValue());
}
result.Add(new Cx.Client.Indicators.IndicatorValue()
{
Value = DateTime.Now,
DefaultColor = System.Drawing.Color.Magenta.ToArgb(),
BorderColor = System.Drawing.Color.Black.ToArgb()
});
return result;
Структура объекта IndicatorValue и значения по умолчанию:
public class IndicatorValue
{
public IndicatorValue()
{
Width = 1;
Height = 1;
FormatString = "{0}";
WarningValue = 0;
CriticalValue = 0;
CaptionColor = Color.Transparent.ToArgb();
DefaultColor = Color.Transparent.ToArgb();
WarningColor = Color.Transparent.ToArgb();
CriticalColor = Color.Transparent.ToArgb();
BorderColor = Color.Transparent.ToArgb();
CaptionFontSize = 0;
ValueFontSize = 0;
}
public string Name { get; set; }
public string Caption {get;set;}
public string FormatString { get; set; }
public int WarningValue { get; set; }
public int CriticalValue { get; set; }
public int CaptionColor { get; set; }
public int DefaultColor { get; set; }
public int WarningColor { get; set; }
public int CriticalColor { get; set; }
public int BorderColor { get; set; }
public int ValueFontSize { get; set; }
public int CaptionFontSize { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public object Value { get; set; }
}
В сценарии можно запустить воспроизведение звукового файла:
Cx.Client.Utils.GlobalUtils.StartPlay("c:\\1.wav"); // по умолчанию используется плеер mpc-hc64.exe
Cx.Client.Utils.GlobalUtils.StartPlay("c:\\1.wav", "wmplayer.exe"); // заданный явно плеер
Cx.Client.Utils.GlobalUtils.StopPlay(); // остановка воспроизведения
Экспорт-импорт
Экспорт-импорт позволяет переносить настройки индикаторов между инсталляциями системы.
Каждый индикатор при создании получает GUID. Это позволяет обеспечить корректный экспорт-импорт связанных индикаторов.
При экспорте родительского индикатора вместе с ним экспортируются все дочерние.
При импорте цепочки индикаторов производится проверка GUIDов. Дочерние дубли не создаются. Дубль первого уровня создается всегда (это позволяет копировать индикаторы).
При импорте все индикаторы помещаются в текущую папку (независимо от прежней структуры).
Формат данных импорта-экспорта – JSON. Позволяет при необходимости вносить изменения вручную.