Индикаторы

Индикаторы

Индикаторы предназначены для построения наглядных инструментов онлайн-мониторинга различных показателей работы call-центра.

По аналогии с отчетами индикатором может быть любое количество. Можно одновременно расположить на экране несколько индикаторов. Кроме этого, индикаторы могут содержать в себе друг друга, чтобы обеспечить наиболее удобное и наглядное отображение информации.

В большинстве случаев источником данных для индикатора являются SQL-запросы в базы данных. Запросы выполняются с заданной частотой. В более сложных случаях можно использовать сценарии, которые позволяют корректировать значения индикаторов, выполнять HTTP-запросы, выполнять фрагменты кода и т.д.


Простые индикаторы

Индикатор отображает данные, которые возвращает первая строка SQL-запроса. Остальные строки игнорируются. Количество ячеек индикатора определяется заданными количеством строк и столбцов. Ориентация индикатора (горизонтальная или вертикальная) определяет порядок заполнения ячеек данным – по строкам или по столбцам. Если размер индикатора (произведения количества строк и количества столбцов) не позволяет отобразить все значения, не уместившиеся значения отображаться не будут.


Пример настройки индикатора – SQL-запрос и значения (появляются автоматически после проверки запроса):

image001.png


Горизонтальный индикатор (3 столбца, 1 строка):

image003.png


Вертикальный индикатор (1 столбец, 3 строки):

image005.png

 

Увеличенный размер второго значения (2х2) и увеличенный размер индикатора (2х3):

image007.png


 

Пороговые значения для желтого/красного, а также формат значения «{0} сек»:

image009.png


Вложенные индикаторы

В дополнение к SQL-запросу (либо вместо него), можно добавлять к индикатору дочерние элементы. Рекурсия (добавление самого себя напрямую или через цепочку) игнорируется. Для каждого дочернего элемента можно задать размер (по умолчанию 1х1).

image010.png


image012.png


Если в SQL-запросе есть входные параметры, для дочернего элемента нужно задать их значения. Таким образом можно создавать шаблоны (например, ряд показателей для очереди) и размещать несколько шаблонов с заданными параметрами внутри одного индикатора.

image014.png


Обработка данных

Если SQL-запрос возвращает null, значение не отображается. Чтобы отобразить 0 необходимо использовать оператор coalesce(value, 0).

Для дочерних индикаторов используется период обновления родительского индикатора самого верхнего уровня.

Всегда используется только первая строка.


Отрисовка интерфейса

Внешний вид интерфейса определяется глобальными параметрами системы, а также настройками индикаторов (цвет заголовка) и значений (цвета и размеры шрифта).

Прозрачный цвет игнорируется (используется параметр системы).

Пустые заголовки не отображаются.

Если заголовок занимает слишком много места, он автоматически скрывается, если значение не умещается в ячейку, размер шрифта уменьшается автоматически

image016.png


 

Значения параметров системы по умолчанию:

image017.png


Сценарии

Назначенный бизнес-сценарий выполняется после каждого обновления данных. В него передается информация о текущем индикаторе и полученные в результате 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. Позволяет при необходимости вносить изменения вручную.

Нашли ошибку?
Выделите текст, нажмите Ctrl + Enter

Сообщение об ошибке

Адрес страницы *
Ошибочный текст *
Комментарий *
Защита от автоматического заполнения

Введите символы с картинки*

Дополнить статью

Адрес *
Ваше ФИО
Ваш Email
Текст дополнения *

Попробовать InfinitySmart бесплатно

Зарегистрируйтесь, чтобы получить доступ
к бесплатной версии на 14 дней

Заказ презентации

После отправки запроса наш менеджер свяжется с вами для демонстрации системы, рассчитает ее стоимость, ответит на вопросы