Примеры создания шаблонов

Шаблон типа CHART

В данном разделе рассмотрен пошаговый процесс создания шаблона графика

Для создания шаблона сначала необходимо заполнить поля (раздел Создание шаблона):

Программный код поля "Шаблон":

(() => {
    const templateId = "${templateId_s}";  ## templateId
    
    if (this.viewMap[templateId]) {
        this.viewMap[templateId].options = options;
    }
})();

После сохранения в использующих данный шаблон визуализациях отображается следующее:

Теперь можно переходить к написанию программного кода шаблона. В данном примере, в первую очередь были определены разделы и подразделы:

(() => {
    const templateId = "${templateId_s}";  ## templateId
    
// Создание разделов - горизонтальных вкладок
##horizontal1 Горизонт 1
##horizontal2 Горизонт 2    
 
// Создание подразделов - вертикальных вкладок
 
// Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal1_vertical1 Опция 1
##horizontal1_vertical2 Опция 2
 
// Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal2_vertical1 Опция 1
##horizontal2_vertical2 Опция 2
##horizontal2_vertical3 Опция 3
 
 
    if (this.viewMap[templateId]) {
        this.viewMap[templateId].options = options;
    }
})();

После задания разделов и подразделов, изменений в визуализациях, использующих данный шаблон, не будет, так как данные разделы и подразделы являются неполными, то есть, не включают в себя хотя бы один тип поля

Для того, чтобы отобразить разделы или подразделы на шаблоне, необходимодимо определить внутри них поля и типы полей. Для того, чтобы отобразить поля (имеющие задаваемый пользователем тип), достаточно их определить.

Для наглядности, определим поля лишь внутри "horizontal1_vertical1" и "horizontal1_vertical3":

(() => {
    const templateId = "${templateId_s}";  ## templateId
    
// Создание разделов - горизонтальных вкладок
##horizontal1 Горизонт 1
##horizontal2 Горизонт 2    
 
// Создание подразделов - вертикальных вкладок
// --Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal1_vertical1 Опция 1
##horizontal1_vertical2 Опция 2
 
// --Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal2_vertical1 Опция 1
##horizontal2_vertical2 Опция 2
##horizontal2_vertical3 Опция 3
 
 
// Создание полей фиксированных типов 
// --Поле логического boolField_b внутри vertical1 внутри horizontal1 
${horizontal1_vertical1_boolField_b}; ## Галочка
 
 
// --Поле строкового типа strField_s внутри vertical3 внутри horizontal1 
${horizontal1_vertical3_strField_s}; ## Поле ввода
 
    if (this.viewMap[templateId]) {
        this.viewMap[templateId].options = options;
    }
})();

После применения шаблона, визуализация будет выглядеть следующим образом: Как можно увидеть, отображены только те разделы и подразделы, в которых определены поля и типы данных полей, а один из подразделов не имеет отображаемого названия

В предыдущем случае подраздел vertical3 определён неявно, его название не будет отображено, исправим это, явно определив vertical3 до создания _s:

(() => {
    const templateId = "${templateId_s}";  ## templateId
    
// Создание разделов - горизонтальных вкладок
##horizontal1 Горизонт 1
##horizontal2 Горизонт 2    
 
// Создание позразделов - вертикальных вкладок
// --Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal1_vertical1 Опция 1
##horizontal1_vertical2 Опция 2
##horizontal1_vertical3 Опция 3
// --Вертикальные вкладки для горизонтальной вкладки "Горизонт 1"
##horizontal2_vertical1 Опция 1
##horizontal2_vertical2 Опция 2
##horizontal2_vertical3 Опция 3
 
 
// Создание полей фиксированных типов 
// --Поле логического boolField_b внутри vertical1 внутри horizontal1 
${horizontal1_vertical1_boolField_b}; ## Галочка
 
 
// --Поле строкового типа strField_s внутри vertical3 внутри horizontal1 
${horizontal1_vertical3_strField_s}; ## Поле ввода
 
    if (this.viewMap[templateId]) {
        this.viewMap[templateId].options = options;
    }
})();

Теперь можно видеть, что у компонента vertical3 появилось отображаемое название - "Опция 3":

Для добавления компонентов в автоматически сформированное поле "Общие настройки", необходимо воспользоваться следующим синтаксисом:

_vertical2 Опция 1 // подраздел с именем "Опция 1", отображаемый в поле "Общие настройки"
_vertical1 Опция 2 // подраздел с именем "Опция 2", отображаемый в поле "Общие настройки"

То есть, системные названия подразделов начинаются просто с "_", без указания системного названия поля "Общие настройки".

Наконец, наполним шаблон и отобразим график:

(() => {
    const templateId = "${templateId_s}";  ## templateId
 
// Создание разделов - горизонтальных вкладок
##horizontal1 Настройки заголовка
##horizontal2 Настройки цвета    
 
// Создание подразделов - вертикальных вкладок
// --Поля для горизонтальной вкладки "Общие настройки"
## _data Данные
## _legend Настройки легенды
## _query Настройки запроса
 
// --Вертикальные вкладки для горизонтальной вкладки "Настройки заголовка"
##horizontal1_vertical1 Текст
##horizontal1_vertical2 Положение
// --Вертикальные вкладки для горизонтальной вкладки "Настройки цвета"
##horizontal2_vertical1 Заливка
 
 
// Создание полей фиксированных типов 
 
 
// --Компоненты внутри поля "Общие настройки"
// ----Поля результатов запросов внутри _data внутри поля "Общие настройки"
const aliasName = "${_data_aliasName_queryField}"; ## Данные для подписей
const aliasVal = "${_data_aliasVal_queryField}"; ## Данные для значений
// ----Поле логического типа внутри _legend внутри поля "Общие настройки"
const showLegend = #if(${_legend_showLegend_b})"${_legend_showLegend_b}"; #else false; #end ## Отобразить легенду 
// ----Поле строкового типа внутри _query внутри поля "Общие настройки"
const queryName = #if(${_query_queryName_s})"${_query_queryName_s}"; #else ''; #end ## Название запроса
 
 
// --Компоненты внутри поля "Настройки заголовка"
// ----Поле логического showTitle_b внутри vertical1 внутри horizontal1 
const showTitle = #if(${horizontal1_vertical1_showTitle_b})"${horizontal1_vertical1_showTitle_b}"; #else false; #end ## Показывать Заголовок
// ----Поле строкового типа titleText_s внутри vertical1 внутри horizontal1 
const titleText = #if(${horizontal1_vertical1_titleText_s})"${horizontal1_vertical1_titleText_s}"; #else ''; #end ## Заголовок
// ----Поле строкового типа titleText_s внутри vertical1 внутри horizontal1 
const subtitleText = #if(${horizontal1_vertical1_subtitleText_s})"${horizontal1_vertical1_subtitleText_s}";#else ''; #end ## Подзаголовок
// ----Поле выбора alignSel внутри vertical2 внутри horizontal1
##horizontal1_vertical2_alignSel Выравнивание
// ------Поля выборочных опций внутри alignSel внутри vertical2 внутри horizontal1
var alignType = 'center';
#if (${horizontal1_vertical2_alignSel_sel_left}) ## Слева
    alignType = 'left';
#elseif (${horizontal1_vertical2_alignSel_sel_right}) ## Справа
    alignType = 'right';
#elseif (${horizontal1_vertical2_alignSel_sel_center}) ## По центру
    alignType = 'center';
#end
 
 
 
// --Компоненты внутри поля "Настройки Цвета"
// ----Поле логического isFilled_b внутри vertical1 внутри horizontal2 
const isFilled = #if(${horizontal2_vertical1_isFilled_b}) "${horizontal2_vertical1_isFilled_b}"; #else false; #end ## Залить 
// ----Поле цветового типа fillingColor_colorPicker внутри vertical2 внутри horizontal2
var fillingColor = null;
#if (${horizontal2_vertical1_fillingColor_colorPicker}) ## Цвет заливки
    fillingColor = "${horizontal2_vertical1_fillingColor_colorPicker}"; 
#end
 
if (!isFilled) {
    fillingColor = null;
}
 
const dataNames = [];
const dataValues = [];
for (const item of this.response.resultsRaw[queryName]) {
    var dataName = item[aliasName]
    var dataVal = "" + item[aliasVal]
    dataNames.push(dataName)
    dataVal = dataVal.replace(" ", "").replace(" ", "").replace(" ", "");
    dataValues.push({name:dataName, value:dataVal});
}
 
const mySeries = {
    type: 'pie',
    data: dataValues,
    color: fillingColor
};
 
const options = {
    title: {
    show: showTitle,
    text: titleText,
    subtext: subtitleText,
    left: alignType
    },
    legend: {
        show: showLegend,
        orient: 'vertical',
        left: 'left'
    },
    series: [mySeries],
  };
 
    if (this.viewMap[templateId]) {
        this.viewMap[templateId].options = options;
    }
})();

Созданный шаблон выглядит следующим образом: