Отчёты
Отчеты необходимы для генерации файлов отчетов на базе шаблонов с данными из внешних источников.
Форма отчетов доступна через пункт меню «Отчеты». Через форму можно настроить, запустить генерацию, и просмотреть сформированный экземпляр отчета.
Имеется возможность формирования и просмотра экземпляра отчета через HTTP API.
Доступные типы отчетов: DOCX, XLSX, JRXML, HTML.
Поддержка форматов различными типами отчетов:
- JRXML: docx, html, pdf, pptx, rtf, xls, xlsx, odt, ods;
- XLSX: xlsx, с возможностью полноценного редактирования;
- DOCX: docx, с возможностью редактирования;
- HTML: txt, html.
Данные для заполнения отчетов могут быть:
- получены из внешних источников с помощью провайдеров, предоставляющих данные (например, из PostgreSQL, Visiology ViQube и т.д.);
- переданы внешней системой при вызове API генерации отчета в POLYHUB (например, для генерации отчета с дашборда Visology).
Создание отчета
Описание создания отчета приводится на примере создания JRXML-отчета. Создание отчетов остальных типов в общем случае совпадает – за исключением процесса настройки отображения отчета, определяемого его шаблоном.
1.Для создания отчета необходимо перейти на страницу «Отчеты», используя пункт «Отчеты» в левом меню, и нажать кнопку «Создать».

2.На открывшейся форме заполнить поля:

- FQN: указать путь до папки с отчетом, например, path/to/report/folder
- Тип шаблона: выбрать из списка необходимый тип отчёта
- Ограниченный доступ: по умолчанию выключен, при включении позвляет просмотр сгенерированных экземпляров отчета только пользователю, который его сгенерировал.
- Описание - описание структуры отчета в JSON формате в конструкторе.
- Параметры - параметры отчета, описанные в JSON формате в конструкторе.
- Дополнительные опции - дополнительные опции
3.И нажать кнопку «Создать».
Созданны отчет появится в списке доступных отчетов.

В результате создания отчета на томе resources в директории reporting/reports cгенерируется каталог с шаблоном и файлами с описаниями датасетов и параметров отчета.
4.Далее необходимо отчет настроить активным. Для этого нужно открыть отчет на редактирование с помощью кнопки «Редактировать» через панель «Действия» и выбрать значение «Активен».
Генерация отчета
Для создания экземпляра отчета нужно нажать на кнопку «Сгенерировать отчёт» через панель «Действия».

После нажатия кнопки откроется форма для ввода параметров, при нажатии на кнопку «Построить» запуститься процесс генерации отчета, согласно заданным настройкам шаблона и описания отчета.
После запуска генерации отчёта, необходимо кликнуть по ссылке наименования отчёта и перейти на форму «Экземпляры отчёта».
Откроется список экземпляров отчета в которых отражена информация по Дате создания, Состоянию.
После того как процесс генерации отчета завершится (иконка в столбце состояние изменится), можно загрузить отчет с помощью кнопки «Скачать» на панели Действия.
Описание отчета
Для описания отчетов допускается параметризация. В качестве параметром могут быть применены jinja переменные и подстановки jsqlib.

Структура Датасета
Датасет(dataset) - описывает получение данных из источников. Поддерживаемые источники: JSON, PostgreSQL, Viqube, Веб снимок.
Типы получения данных:
SQL Запрос
Позволяет получить данные из БД.

- Адаптер (
adapter) - позволяет адаптировать аргументы полученные из источника к аргументам запроса- Провайдер (
provider) - провайдер для подключения к источнику - Запрос (
query) - запрос, соответсвующий правилам типу источника
- Провайдер (
- Колонки (
columns) - столбцы таблицы - Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider)- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Запрос (
query) - запрос данных из БД в формате JSON, сформированный согласно правилам jsqlib. Поддерживает переменные подставовки для уточнения запроса по определенным параметрам.
Пример запроса:
Пример запроса:
"dataset": [
{
"name": "sqlquery",
"type": "sql",
"query": {
"select": [
{
"name": "name"
}
],
"from": [
{
"name": "dwh.datagrid"
}
],
"where": {
"eq": [
"<=code=>",
"<-{{ codes|from_json|first }}->"
]
}
},
"form": "list",
"provider": {
"code": "testdbconn"
}
}
]
Viqube Запрос

Позволяет получить данные из Visiology
- Адаптер (
adapter) - используется для обработки различных типов запросов, поддерживает sql и visiology- Провайдер (
provider) - провайдер для подключения к источнику, тип: VIQUBE - Запрос (
query) - запрос, соответсвующий правилам типу источника
- Провайдер (
- Колонки (
columns) - столбцы таблицы - Эндпоинт API (
endpoint) - тип для описания запроса получения, значениеsql - Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider)- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Запрос (
query) - запрос данных из БД в формате JSON, сформированный согласно правилам jsqlib. Поддерживает переменные подставовки для уточнения запроса по определенным параметрам.
Пример запроса:
"dataset": [
{
"name": "viquery",
"type": "visiology",
"endpoint": "viqube/metadata/rawdata/query",
"query": {
"database": "DB",
"mgid": "test_msv_types",
"columns": [
{
"mid": "ftime"
},
{
"mid": "fdate"
},
{
"mid": "fdatetime"
},
{
"mid": "flong"
},
{
"mid": "fshort"
},
{
"mid": "fboolean"
},
{
"mid": "fstring"
},
{
"mid": "finteger"
},
{
"mid": "freal"
}
],
"limit": 10
},
"adapter": {
"query": {
"select": [
{
"eval": "<=ftime=>"
},
{
"eval": "<=fdate=>"
},
{
"eval": "<=fdatetime=>"
},
{
"eval": "<=flong=>"
},
{
"eval": "<=fshort=>"
},
{
"eval": "<=fboolean=>"
},
{
"eval": "<=fstring=>"
},
{
"eval": "<=finteger=>"
},
{
"eval": "<=freal=>"
}
],
"from": [
{
"name": "viquery"
}
]
},
"form": "list"
},
"provider": {
"code": "testviconn"
}
}
]
JSON Запрос

Позволяет получить данные из готового набора JSON
- Наименование (
name) - наименование параметра, для использования в шаблоне - Данные (
query) - описание набора данных в формате JSON, поддерживает Jinja переменные, для дополнения набора данных.
Пример запроса:
"dataset": [
{
"name": "person",
"type": "json",
"query": [
{
"name": "Торговый дом Воткинский завод",
"street": "ул. Декабристов, д. 8",
"city": "Воткинск",
"phone": "+7 341 456 55 51"
},
{
"name": "ООО GIPERTEC",
"street": "ул. Вавилова, 9А, стр. 3",
"city": "Москва",
"phone": "8 (800) 550-32-13"
},
{
"name": "ООО Metal Master",
"street": "4-й Рощинский проезд, д. 18, стр. 7",
"city": "Москва",
"phone": "+7 495 374 64 07"
},
{
"name": "ООО АВТОграф Инструментальные Решения",
"street": "ул. Заусадебная, д. 15, строение 5",
"city": "Санкт-Петербург",
"phone": "+7 (812) 640-39-96"
},
{
"name": "ООО Алькор-С",
"street": "ул. 22 Партсъезда, 7а",
"city": "Самара",
"phone": "+7 846 977 74 57"
}
]
},
{
"name": "context",
"type": "json",
"data": {
"login": "{{ login }}"
}
}
]
Веб-снимок

Позволяет получить скриншот
- Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider) - провайдер для подключения к источнику, тип: VIQUBE, с заполненным полем Хост- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Источник (
source)- Снимок (
shot)- Локальный путь (
path) - путь в источнике, где храниться физический файл - URL (
url) - ссылка для подстановки
- Локальный путь (
- Снимок (
Пример запроса:
"dataset": [
{
"name": "web",
"type": "webshot",
"form": "file",
"provider": {"code": "webshot"},
"source": {
"shot": {
"url": "viewer/public?dashboardGuid=dd1e5ce33fb84b7f946610bed1f3abbb",
"path": "shot.png"
}
}
}
]
Параметры отчетов
Для описания отчетов допускается параметризация. В качестве параметром могут быть применены jinja переменные и подстановки jsqlib.
Структура параметров

- Группы
- Наименование (
label) - наименование группы - Элементы группы (
fields) - список параметров, входящих в группу
- Наименование (
Допустимые типы параметров:
- Число (
number) - Строка (
text) - Дата (
date) - Время (
time) - Дата и время (
datetime) - Логический (
boolean) - Интервал (
range) - Список (
select) - Произвольный (
textarea)
Значения параметров задаются при генерации отчетов на форме Параметров.
API
Для использования api требуется активный токен с действующими правами на вызываемое действие. Процесс создания токен описан в разделе Токены
Запрос на генерацию отчета
mutation($input: GenerateReportInstanceInput!) {
public {
report {
generateInstance(input: $input) {
payload {
instance {
phase
slug
note
}
}
}
}
}
}
{
"input": {
"token": token,
"refresh": false,
"arguments": [ // зависит от заданных параметров отчета
{
"name": "context",
"body": "{\"value\":{\"boo\":[1,2],\"foo\":1}}",
"type": "json"
}
]
}
}
- если в refresh передан true, то будет запущена перегенерация отчета даже если он в статусе GENERATED, иначе - просто вернется текущий статус
- в note возвращается описание ошибки, в случае нештатного завершения генерации
Ответ:
{
"data": {
"public": {
"report": {
"generateInstance": {
"payload": {
"instance": {
"phase": "GENERATED",
"slug": "/api/reporting/reports/e532109e-cf9e-4b91-9b03-8b938f5ee5f1/jrxml/99914b93-2bd3-7a50-b983-c5e7c90ae93b/test_report.docx",
"note": null
}
}
}
}
}
}
}
Получение отчета (выполняется запросом GET с токеном по ссылке из slug, токен при этом передается в хидере Authorization и без префикса)
GET /api/reporting/reports/e532109e-cf9e-4b91-9b03-8b938f5ee5f1/jrxml/99914b93-2bd3-7a50-b983-c5e7c90ae93b/test_report.docx HTTP/1.1
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IkVWbENReklabmFRYjNHNDNXZU0zNkEifQ.eyJvYmplY3QiOiJlMDM4ODIwNS1hOTZkLTRlZGQtYThlMi01NzNlMDliNDkxZDciLCJ0eXBlIjoiUkVQT1JUIiwidXNlciI6Ijg5NDNlMWE4LWI0MDYtNDM1Zi05Y2JmLWFiZmI0YmZiMzQ2NCIsImNhcGFiaWxpdGllcyI6WyJyZWFkSW5zdGFuY2VzIiwid3JpdGVJbnN0YW5jZXMiXX0.dQweL0MalJjazg5NWgHquez8noDsL_xwRdSMW3aBVMY
Host: polyhub.domain.local:8000