Skip to content

Отчёты

Отчеты необходимы для генерации файлов отчетов на базе шаблонов с данными из внешних источников.
Форма отчетов доступна через пункт меню «Отчеты». Через форму можно настроить, запустить генерацию, и просмотреть сформированный экземпляр отчета. Имеется возможность формирования и просмотра экземпляра отчета через 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