Skip to main content

Создание отчётов из скриптов КАСКАД

Статья описывает создание отчётов ТехноДок из CONTROL-скриптов проекта КАСКАД. Скрипт создаёт отчёт по шаблону за заданный интервал, интерфейс ТехноДок при этом не открывается. Отчёт создаётся, например, по нажатию кнопки на панели проекта и сохраняется в ТехноДок так же, как отчёт, созданный на форме «Отчёты».

Принцип работы​

Отчёт создаёт функция createReport из библиотеки scripts\libs\Technodoc\Reports\technodocReports.ctl, которая входит в компоненты интеграции. Функция получает у сервера приложений ТехноДок токен пользователя и отправляет запрос на создание отчёта. Адрес сервера приложений функция берёт из скрипта scripts\libs\Technodoc\Core\technodocServerSettings.ctl. Если в скрипте задано несколько адресов, запрос получает первый сервер приложений, который отвечает на проверку состояния.

Предварительные требования​

  • Компоненты интеграции установлены в проект КАСКАД, как описано в разделе «Установка компонентов в проект КАСКАД».
  • Сервер приложений ТехноДок запущен и доступен с сервера КАСКАД по адресу из скрипта technodocServerSettings.ctl. По умолчанию в скрипте задан адрес http://127.0.0.1:8003. Другой адрес задаётся так же, как для панели ТехноДок: порядок описан в разделе «Отображение ТехноДок в панели проекта».
  • В ТехноДок создан шаблон отчёта.
  • У пользователя ТехноДок, от имени которого создаётся отчёт, есть право «Создание отчёта» для этого шаблона. Права описаны в статье «Роли».

Шаг 1. Определение идентификатора шаблона​

Шаблон, по которому создаётся отчёт, задаётся идентификатором. Идентификатор записан в файле экспорта шаблона.

Чтобы определить идентификатор шаблона:

  1. Экспортируйте шаблон отчёта в файл JSON, как описано в разделе «Экспорт шаблона отчёта».
  2. Откройте экспортированный файл в текстовом редакторе.
  3. Скопируйте значение поля UniqueGuid, например 3f82b90e-89a4-4d78-b934-85cdecb7854b.

Шаг 2. Настройка учётной записи​

По умолчанию функция createReport создаёт отчёт от имени пользователя с логином admin и паролем admin. Логин и пароль заданы в скрипте technodocServerSettings.ctl в переменных TECHNODOC_DEFAULT_USER_LOGIN и TECHNODOC_DEFAULT_USER_PASSWORD. Если пароль этого пользователя в ТехноДок изменён, функция не получает токен и отчёт не создаётся.

Предупреждение

Логин и пароль хранятся в скрипте открытым текстом, а учётная запись администратора даёт все права в ТехноДок. Создайте для скриптов отдельного пользователя и назначьте ему только право «Создание отчёта» для нужных шаблонов.

Чтобы задать учётную запись:

  1. Создайте в ТехноДок роль с правом «Создание отчёта» для шаблонов, по которым скрипт создаёт отчёты, и пользователя с этой ролью. Работа с ролями и пользователями описана в статьях «Роли» и «Пользователи».
  2. Откройте в проекте КАСКАД скрипт scripts\libs\Technodoc\Reports\technodocReports.ctl.
  3. Замените в функции createReport переменные TECHNODOC_DEFAULT_USER_LOGIN и TECHNODOC_DEFAULT_USER_PASSWORD на логин и пароль созданного пользователя:
    string token = getAccessToken(activeServerUrl, "логин", "пароль");
  4. Обновите библиотеки CTRL в КАСКАД: «Редактировать» → «Обновить библиотеки CTRL».
Примечание

Переменные TECHNODOC_DEFAULT_USER_LOGIN и TECHNODOC_DEFAULT_USER_PASSWORD использует и скрипт бланков переключений technodocSwitchoverForms.ctl. Поэтому учётная запись для создания отчётов задаётся в функции createReport, а не в скрипте technodocServerSettings.ctl.

Шаг 3. Вызов функции из скрипта​

Функция createReport принимает идентификатор шаблона, начало и окончание интервала отчёта.

Чтобы создать отчёт из скрипта:

  1. Подключите библиотеку Technodoc/Reports/technodocReports в скрипте, из которого создаётся отчёт, например в обработчике нажатия кнопки на панели.
  2. Вызовите функцию createReport с идентификатором шаблона и границами интервала. Пример создаёт отчёт за предыдущие сутки:
    #uses "Technodoc/Reports/technodocReports"

    // Идентификатор шаблона отчёта из шага 1
    const string REPORT_TEMPLATE_GUID = "3f82b90e-89a4-4d78-b934-85cdecb7854b";

    main()
    {
    time currentTime = getCurrentTime();

    // Интервал отчёта: от начала предыдущих суток до начала текущих
    time endTimestamp = makeTime(year(currentTime), month(currentTime), day(currentTime));
    time startTimestamp = endTimestamp - 86400;

    createReport(REPORT_TEMPLATE_GUID, startTimestamp, endTimestamp);
    }

Проверка. После выполнения скрипта в журнале проекта появляется запись Отчет с идентификатором "3f82b90e-89a4-4d78-b934-85cdecb7854b" за интервал[<начало>-<окончание>] успешно создан. Отчёт появляется в списке отчётов шаблона на форме «Отчёты».

Предупреждение

Функция createReport переводит начало и окончание интервала в UTC функцией formatTimeUTC, а ТехноДок принимает время без пересчёта часового пояса. Интервал отчёта смещается на разницу между местным временем сервера КАСКАД и UTC. Чтобы интервал отчёта совпадал с местным временем, замените в функции createReport оба вызова formatTimeUTC на formatTime и обновите библиотеки CTRL.

Устранение неполадок​

Сообщения функции createReport выводятся в журнал проекта КАСКАД.

ПризнакПричина и решение
Не удалось авторизоваться в ПО "ТехноДок"Неверный логин или пароль либо сервер приложений недоступен. Проверьте логин и пароль в функции createReport и адрес сервера приложений в скрипте technodocServerSettings.ctl.
Не удалось создать отчет в ПО "ТехноДок"Сервер приложений отклонил запрос. Причина указана в сообщении после слова Подробности. Проверьте идентификатор шаблона и право «Создание отчёта» у пользователя.