Вкладки
Конфигурация чарта настраивается с помощью кода на JavaScript, который заполняется на вкладках в редакторе в интерфейсе.
Код формирования конфигурации чарта, описанный на вкладках, выполняется на сервере. На этой странице представлены форматы заполнения каждой из вкладок.
Код функций, расположенный внутри Editor.wrapFn, выполняется на клиенте в браузере пользователя. Это накладывает ряд ограничений, подробнее можно почитать в разделе Доступные методы.
Вкладки выполняются в определенном порядке.
Meta
Служит для описания служебной информации о списке связанных сущностей.
На вкладке Meta добавляются id объектов использующихся источников для чарта/селектора. Описание id объектов является обязательным. Эта информация используется для определения, с какими подключениями и датасетами связан чарт, а также для диалога связанных объектов, при копировании воркбука и при публикации в Public.
Идентификаторы объектов можно скопировать из меню соответствующего объекта или в навигации, нажав Копировать ID. Идентификатор будет сохранен в буфере обмена.
В качестве ключа необходимо указать произвольное имя-алиас, которое будет присвоено данному источнику данных в чарте. Далее на вкладке Source можно получить это имя-алиас с помощью Editor.getId(arg) и указать его в качестве источника.
{
"links": {
"<string>": "<string>",
...
}
}
{
"links": {
"myDatasetKeyName": "qvnkqzm0wstyf",
"connectionKey": "ch96co0501xy1",
"apiConnectionKey": "uzrou8sqm5zaj"
}
}
Params
Вкладка предназначена для установки дефолтных параметров чарта/селектора. Все параметры, которые используются в чарте/селекторе, должны быть описаны на вкладке Params. Значения параметров являются массивами строк. Если требуется передать только одно значение, его нужно оформить в виде массива из одного элемента.
{
"<string>": "<string>",
...
}
module.exports = {
count: ['10'],
setting: ['value'],
};
В случае, если на дашборде или в отчете установить в настройках виджета другие значения параметров для такого чарта, то значения со вкладки Params будут переопределены. Также значения будут переопределены, если в селекторе дашборда или отчета выбрать значения, отличные от значений в селекторе по умолчанию или если применить кросс-фильтрацию другим чартом. Подробнее о переопределении параметров
Значения всех актуальных параметров на последующих вкладках можно получить с помощью метода Editor.getParams(), а получить актуальное значение параметра по его названию можно с помощью Editor.getParam(name).
Переопределить параметры можно через URL графика. Например:
&period=40&metric=2012&metric=2014
Такой URL, наложенный на параметры по умолчанию, описанные выше, образует следующий объект:
{
period: 40,
metric: ['2012', '2014'],
id: ['1215', '1217', '979', '483']
}
При изначальной отрисовке дашборда или отчета параметры, которые связывают JS-селектор с чартами на дашборде или в отчете, остаются статичными. Если параметр динамически вычисляется в коде селектора, то перерисовка чартов с обновленными значениями параметра произойдет только при последующем изменении селектора.
Специальные параметры
Относительная дата
Форматы:
__relative_<знак><количество><единица_измерения>__relative_<знак><количество><единица_измерения>_<тип_приведения><единица_измерения>
<знак>:+или-<единица_измерения>:y- годQ- кварталM- месяцw- неделяd- деньh- часm- минутаs- секундаms- миллисекунда
<тип_приведения>:s- к началуe- к концу
Пример:
Если время на данный момент 2020-03-24T23:30:39.874Z, то
__relative_-7d- семь дней назад -2020-03-17T00:00:00.000Z__relative_+30m- через 30 минут -2020-03-25T00:00:39.874Z__relative_-0d- сегодня -2020-03-24T00:00:00.000Z__relative_-0h- сейчас -2020-03-24T23:30:39.874Z__relative_-3M_sQ- минус 3 месяца -
2019-12-24T00:00:00.000Z- приведенные к началу квартала -
2019-10-01T00:00:00.000Z
- приведенные к началу квартала -
- минус 3 месяца -
__relative_+15s_em- плюс 15 секунд -
2020-03-24T23:30:54.874Z- приведенные к концу минуты -
2020-03-24T23:30:59.999Z
- приведенные к концу минуты -
- плюс 15 секунд -
Примечание: если не указаны приведения, то для единиц измерения от дня и выше время приводится к началу дня,
т.е. 00:00:00.000, а для единиц измерения меньше дня используется текущее время.
Вспомогательный метод: Editor.resolveRelative(arg)
Интервал
Формат: __interval_<начало>_<конец>
начало/конец - относительная дата или ISO дата.
Пример:
Если время на данный момент 2020-03-24T23:30:39.874Z, то
__interval_2019-03-11T09:35:48_2019-12-28T09:35:48- с
2019-03-11T09:35:48по2019-12-28T09:35:48
- с
__interval_2019-01-17T09:35:48___relative_+0d- с
2019-01-17T09:35:48по сегодня (2020-03-24T23:59:59.999Z)
- с
__interval___relative_-2w_sM___relative_+1d- от двух недель назад -
2020-03-10T00:00:00.000Z- приведенных к началу месяца -
2020-03-01T00:00:00.000Z
- приведенных к началу месяца -
- до завтра -
2020-03-25T23:59:59.999Z
- от двух недель назад -
Вспомогательный метод: Editor.resolveInterval(arg)
Ограничения
При использовании параметров существуют следующие ограничения:
-
Зарезервированные ключи, которые нельзя использовать:
tabstatemodefocusgridscaletztimezonedatedatetime_action_params_autoupdate_opened_inforeport_pagepreview_mode
Параметры с такими ключами будут проигнорированы и не будут сохранены.
-
В ссылках могут быть использованы только те параметры, которые заданы в настройках дашборда. В противном случае они будут проигнорированы. Например, если в ссылке будет указано
?product=Furniture, но в настройках дашборда не будет задан параметрproduct(даже с пустым значением), то такой параметр будет проигнорирован. -
Параметры дашборда в любом случае будут применены к виджетам, что может привести к ошибкам в запросах данных.
Sources
На этой вкладке определяется структура для запроса данных, которые нужно визуализировать.
Данные можно запросить, используя:
Подключение к источнику данных через датасет
Для использования данных из датасета:
Возвращаемый на вкладке JSON-объект вида:
{
datasetId: "<string>",
data: {
fields: [
{
ref: {
title: "<string>",
type: "title"| "id",
},
},
...
],
}
}
Где:
-
datasetId— id датасета, описанного на вкладке Meta и полученного с помощью метода Editor.getId(arg). -
fields— массив имен колонок датасета:title— название или id колонки;type— тип колонки, указанной в title (выбирать колонку по названию или по id).
module.exports = {
'myDatasetSource': {
datasetId: Editor.getId('myDatasetKeyName'),
data: {
fields: [
{
ref: {
type: "title",
title: "PaymentType",
},
},
{
ref: {
type: "title",
title: "OrderYear",
},
},
{
ref: {
type: "title",
title: "OrderMonth",
},
},
],
},
},
};
Для удобства можно использовать вспомогательный служебный модуль для работы с датасетами, тогда Пример 1 будет выглядеть так:
const {buildSource} = require('libs/dataset/v2');
module.exports = {
'myDatasetSource': buildSource({
datasetId: Editor.getId('myDatasetKeyName'),
columns: ['PaymentType', 'OrderYear', 'OrderMonth'],
}),
};
Где:
datasetId— id датасета, описанного на вкладке Meta и полученного с помощью метода Editor.getId(arg).columns— массив имен колонок датасета.
В дальнейшем появится дополнительный параметр, в котором можно будет передать массив идентификаторов колонок датасета.
Пример с получением только списка полей из датасета:
module.exports = {
fields: {
datasetId: Editor.getId('mySource'),
path: 'fields'
}
};
Полезные ссылки
Подключение к источнику данных через SQL-запрос
Для получения данных из подключения (через SQL запрос):
{
qlConnectionId: "<string>",
data: {
sql_query: "<string>",
},
}
Где:
qlConnectionId— id подключения, описанного на вкладке Meta и полученного с помощью метода Editor.getId(arg).sql_query— запрос данных.
module.exports = {
'myDataSource': {
qlConnectionId: Editor.getId('connectionKey'),
data: {
sql_query: 'SELECT 1 + 1',
},
}
}
Полезные ссылки
Подключение к источнику данных через API Connector
Для получения данных с помощью API Connector:
{
apiConnectionId: "<string>",
path: "<string>",
method: "GET"|"POST",
body: <object>,
}
Где:
apiConnectionId— id подключения с типом API Connector, описанного на вкладке Meta и полученного с помощью метода Editor.getId(arg).path— путь к API после хоста.method— метод: поддерживаются GET и POST.body— тело запроса.
module.exports = {
'myApiDataSource': {
apiConnectionId: Editor.getId('apiConnectionKey'),
path: '/html',
method: 'GET',
}
}
Полезные ссылки
Config
В этой вкладке задаются настройки визуализации, например настройки кросс-чарт фильтрации.
Доступно для типов визуализаций: График (Gravity UI Charts) и Таблица. Возможное содержимое зависит от конкретного типа визуализации.
Prepare
Вкладка отвечает за препроцессинг данных перед их передачей на отрисовку и предполагает следующие действия:
-
Получение загруженных данных из источников с помощью метода Editor.getLoadedData().
-
Обработка и приведение к нужному формату (зависит от типа визуализации).
-
Запись результатов в
module.exports, откуда они попадают на отрисовку.
Доступно для типов визуализаций: График (Gravity UI Charts), Advanced-чарт, Таблица, Markdown.
Controls
В декларативном стиле описываются возможные контролы — элементы управления на чарте. В отличие от селекторов дашборда и селекторов отчета, контролы влияют только на текущий чарт, и их состояние не созраняется после обновления страницы.
Вкладка доступна для всех типов визуализаций.
Подробный формат вкладки зависит от типа контролов.
Activities
Вкладка позволяет конфигурировать интерактивные действия для элементов дашборда, например, отправлять HTTP-запрос по клику на строку таблицы.
Доступно для типов визуализаций: Селектор, Таблица и График (Gravity UI Charts).
module.exports = {
sources: ({params}) => { /* конфигурация источников */ },
handleResponse: ({data}) => { /* обработка ответа */ }
}
module.exports = {
sources: ({params}) => {
const ticketId = params.cells[0].value;
return {
todoList: {
apiConnectionId: Editor.getId('todoListConnection'),
path: `?ticketId=${ticketId}`,
method: "GET",
},
};
},
handleResponse: ({data}) => {
const ticket = data.todoList.data.body;
return {
action: 'popup',
title: ticket.title,
content: ticket.description,
};
}
};
Доступные методы
-
Метод
sources()— функция, возвращающая объект для подключения к источнику данных. Используется для отправки запросов. Формат идентичен формату вкладки Sources.sources: ({params}) => ({ sourceKey: { apiConnectionId: Editor.getId("mySourceKeyName"), path: '/api/endpoint', method: 'POST', body: { /* данные запроса */ } } })Где:
params— объект с параметрами из элементов управления дашборда.apiConnectionId— ID подключения с типом API Connector, описанного на вкладке Meta и полученного с помощью метода Editor.getId(arg).mySourceKeyName— имя-алиас источника данных, описанного на вкладке Meta.path— путь к API после хоста.method— метод запроса.body— данные запроса.
-
Метод
handleResponse()— функция, возвращающая объект в формате, зависящем от типа действия. Обрабатывает ответ от сервера и определяет действие в интерфейсе.handleResponse: ({data}) => { /* обработка ответа */ }Где
data— объект с ответами от источников данных.
Доступные действия
-
toast— всплывающее уведомление:ФорматПример{ action: "toast", title: "<string>", content: "<string>", type: "warning"|"success"|"normal"|"info"|"danger"|"utility", }Где:
action— тип действия, которое нужно вызывать после отправки запроса. Значениеtoastпоказывает компоненту всплывающего кратковременного уведомления в правом нижнем углу.title— заголовок уведомления.content— содержимое уведомления.
{ action: 'toast', title: 'Заголовок', content: 'Текст уведомления' } -
popup— всплывающее окно:ФорматПример{ action: "popup", title: "<string>", /** текст или разметка в формате markdown */ content: "<string>", }Где:
action— тип действия, которое нужно вызывать после отправки запроса. Значениеpopupпоказывает компоненту всплывающего окна по центру экрана.title— заголовок окна.content— содержимое окна.
{ action: 'popup', title: 'Заголовок', content: 'Содержимое окна' } -
setParams— установка параметров:ФорматПример{ action: "setParams", params: object, }Где:
action— тип действия, которое нужно вызывать после отправки запроса. ЗначениеsetParamsобновляет значения параметров из переданного поляparams.params— объект со списком ключей и значений параметров для установки.
{ action: "setParams", params: {p: ["1"]} }
Выполнение действий
Чтобы выполнить действия вкладки Activities, обработайте события элементов интерфейса:
- Для селекторов: на вкладке Controls для кнопки укажите действие
runActivityпо событиюonClick. - Для чартов График (Gravity UI Charts) и Таблица: настройте действие
runActivityна вкладке Config.
Ограничения
- На вкладке Activities доступен ограниченный набор источников данных для отправки запросов: запросы к датасетам, стандартным подключениям и подключениям API Connector.
- Функциональность на текущий момент доступна для следующих типов чартов: Селектор, Таблица и График (Gravity UI Charts).