Создание отчётов из скриптов КАСКАД
Статья описывает создание отчётов ТехноДок из CONTROL-скриптов проекта КАСКАД. Скрипт создаёт отчёт по шаблону за заданный интервал, интерфейс ТехноДок при этом не открывается. Отчёт создаётся, например, по нажатию кнопки на панели проекта и сохраняется в ТехноДок так же, как отчёт, созданный на форме «Отчёты».
Принцип работы
Отчёт создаёт функция createReport из библиотеки scripts\libs\Technodoc\Reports\technodocReports.ctl, которая входит в компоненты интеграции. Функция получает у сервера приложений ТехноДок токен пользователя и отправляет запрос на создание отчёта. Адрес сервера приложений функция берёт из скрипта scripts\libs\Technodoc\Core\technodocServerSettings.ctl. Если в скрипте задано несколько адресов, запрос получает первый сервер приложений, который отвечает на проверку состояния.
Предварительные требования
- Компоненты интеграции установлены в проект КАСКАД, как описано в разделе «Установка компонентов в проект КАСКАД».
- Сервер приложений ТехноДок запущен и доступен с сервера КАСКАД по адресу из скрипта
technodocServerSettings.ctl. По умолчанию в скрипте задан адресhttp://127.0.0.1:8003. Другой адрес задаётся так же, как для панели ТехноДок: порядок описан в разделе «Отображение ТехноДок в панели проекта». - В ТехноДок создан шаблон отчёта.
- У пользователя ТехноДок, от имени которого создаётся отчёт, есть право «Создание отчёта» для этого шаблона. Права описаны в статье «Роли».
Шаг 1. Определение идентификатора шаблона
Шаблон, по которому создаётся отчёт, задаётся идентификатором. Идентификатор записан в файле экспорта шаблона.
Чтобы определить идентификатор шаблона:
- Экспортируйте шаблон отчёта в файл JSON, как описано в разделе «Экспорт шаблона отчёта».
- Откройте экспортированный файл в текстовом редакторе.
- Скопируйте значение поля
UniqueGuid, например3f82b90e-89a4-4d78-b934-85cdecb7854b.
Шаг 2. Настройка учётной записи
По умолчанию функция createReport создаёт отчёт от имени пользователя с логином admin и паролем admin. Логин и пароль заданы в скрипте technodocServerSettings.ctl в переменных TECHNODOC_DEFAULT_USER_LOGIN и TECHNODOC_DEFAULT_USER_PASSWORD. Если пароль этого пользователя в ТехноДок изменён, функция не получает токен и отчёт не создаётся.
Логин и пароль хранятся в скрипте открытым текстом, а учётная запись администратора даёт все права в ТехноДок. Создайте для скриптов отдельного пользователя и назначьте ему только право «Создание отчёта» для нужных шаблонов.
Чтобы задать учётную запись:
- Создайте в ТехноДок роль с правом «Создание отчёта» для шаблонов, по которым скрипт создаёт отчёты, и пользователя с этой ролью. Работа с ролями и пользователями описана в статьях «Роли» и «Пользователи».
- Откройте в проекте КАСКАД скрипт
scripts\libs\Technodoc\Reports\technodocReports.ctl. - Замените в функции
createReportпеременныеTECHNODOC_DEFAULT_USER_LOGINиTECHNODOC_DEFAULT_USER_PASSWORDна логин и пароль созданного пользователя:string token = getAccessToken(activeServerUrl, "логин", "пароль"); - Обновите библиотеки CTRL в КАСКАД: «Редактировать» → «Обновить библиотеки CTRL».
Переменные TECHNODOC_DEFAULT_USER_LOGIN и TECHNODOC_DEFAULT_USER_PASSWORD использует и скрипт бланков переключений technodocSwitchoverForms.ctl. Поэтому учётная запись для создания отчётов задаётся в функции createReport, а не в скрипте technodocServerSettings.ctl.
Шаг 3. Вызов функции из скрипта
Функция createReport принимает идентификатор шаблона, начало и окончание интервала отчёта.
Чтобы создать отчёт из скрипта:
- Подключите библиотеку
Technodoc/Reports/technodocReportsв скрипте, из которого создаётся отчёт, например в обработчике нажатия кнопки на панели. - Вызовите функцию
createReportс идентификатором шаблона и границами интервала. Пример создаёт отчёт за предыдущие сутки:#uses "Technodoc/Reports/technodocReports"// Идентификатор шаблона отчёта из шага 1const 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. |
Не удалось создать отчет в ПО "ТехноДок" | Сервер приложений отклонил запрос. Причина указана в сообщении после слова Подробности. Проверьте идентификатор шаблона и право «Создание отчёта» у пользователя. |