3.12. Серверні скрипти
Серверні скрипти — це механізм для виконання певного кастомного JS-коду на сервері. Як правило, вони містять деяку бізнес-логіку, яка не залежить від актуальної версії моделі і не вимагає створення окремих UB-моделей домену.
Оскільки скрипти виконуються на сервері, вони дозволяють реалізувати дуже багато можливостей:
- власну бізнес-логіку, наприклад, валідації або агрегації;
- управління даними БД, наприклад, вибірка/вставка/оновлення/видалення;
- робота з файлами;
- виклик зовнішніх API;
- надсилання пошти;
- інше.
Кожен скрипт форми повинен бути модулем CommonJS, тобто він повинен експортувати об'єкт або функцію і може вимагати інші модулі.
У серверних скриптах є можливість використовувати весь серверний API платформи UB.
3.12.1. Бібліотека серверних модулів
Серверний модуль — це функція або група функцій, які створюється в окремому записі і можуть бути повторно використані в інших серверних скриптах або інших модулях. Серверні модулі можна експортувати в інші середовища за допомогою пакетів налаштувань, щоб легко ділитися розробленою бізнес-логікою.
Для створення групи виконавців необхідно в панелі навігації робочого столу Студія, далі Бібліотека серверних модулів, натиснути кнопку Додати.
3.12.1.1. Серверні модулі
Необхідно заповнити поля, опис яких наведено у таблиці, та натиснути кнопку Зберегти або Зберегти і закрити.
3.12.1.2. Створення серверного модуля
| Назва поля | Опис |
|---|---|
| Код* | Унікальний код модуля. Буде використовуватись виклику модуля з інших серверних скриптів. |
| Найменування* | Найменування серверного модуля. Є можливість встановлювати різні значення для різних локалізацій |
| Опис | Опис серверного модуля |
| Скрипт* | JavaScript код серверного модуля |
Поля позначені символом "*" є обов'язковими до заповнення.
Після збереження серверного модуля, буде відображено поле Скрипт для включення даного модуля в якому буде відображено код, який треба використовувати для виклику цього модуля з інших серверних скриптів чи модулів. Для копіювання коду необхідно натиснути на відповідну кнопку.
В довіднику серверних модулів Admin може виконувати стандартні дії для грідів (Сортування, Фільтрацію, Додавання, Видалення).
Заборонено видаляти серверний модуль, якщо він використаний в серверних скриптах чи інших серверних модулях.
Приклади скриптів наведено в Додатку 2 до інструкції.
3.12.2. Обробник "Скрипт"
За допомогою обробника Скрипт в подіях типу документа є можливість виконувати серверні скрипти. Скрипт можна додавати в обробнику, також є можливість викликати скрипти з бібліотеки серверних модулів.
При створенні обробника Скрипт буде автоматично додано код для запуску модуля.
3.12.2.1. Обробник Скрипт
В серверний скрипт передається event в залежності від контексту, наприклад, якщо скрипт викликається з документа, будуть доступні такі параметри event:
{"event":"actionExec_new_s3","eventType":"actionExec","docID":3000006583316,"docTypeID":3000005759706,"stateID":3000002278725,"stateCode":"new","actionCode":"s3","actionID":3000005892174,"store":{}}
Для отримання в скрипті, наприклад номеру поточного документа можна використати значення event.docID.
Якщо скрипт викликається по події завершення процесу будуть доступні такі параметри event:
{"eventType":"processComplete","event":"processComplete_main","docID":3000006583316,"docTypeID":3000005759706,"processInstanceID":3000006583721,"processCode":"main"}
Тобто для отримання ID процесу можна використати значення event.processInstanceID
Щоб використати в обробнику Скрипт скрипти з бібліотеки серверних модулів, необхідно додати посилання з кодом модуля в форматі:
const myModule = require('#LDOC3326_01'), де myModule назва модуля, що буде використовуватися в коді скрипта, LDOC3326_01 - код серверного модуля з бібліотеки.
Для виклику функції з серверного модуля необхідно використати такий код:
myModule.clear(event.docID, event), де myModule назва модуля, clear - назва функції, event.docID, event - параметри, які передаються в функцію.
Приклади скриптів наведено в Додатку 2 до інструкції.
3.12.2.2. Приклад виклику серверного модуля в обробнику Скрипт
3.12.3. Виклик серверного скрипт з бізнес-процесу
Система надає можливість викликати скрипт з бібліотеки серверних модулів з бізнес-процесу за допомогою завдання сервісу. В разі редагування скрипту в серверному модулі, вони будуть застосовані відразу після збереження, при цьому вносити зміни в бізнес-процес не потрібно.
Приклад виклику скрипта з бібліотеки серверних модулі без виклику функції:
JSON.stringify({
entity: 'bpm_ExtTaskService',
method: 'callServerModule',
execParams: {
code: 'deleteDocumentLink', //код серверного модуля
params: {
docID: $ID
}
}
})
3.12.3.1. Приклад виклику скрипта з бібліотеки серверних модулі без виклику функції
Приклад виклику скрипт з бібліотеки серверних модулі з викликом функції:
JSON.stringify({
entity: 'bpm_ExtTaskService',
method: 'callServerModule',
execParams: {
code: 'documentUtils', //код серверного модуля
method: 'deleteDocumentLinks', //код функції з серверного модуля
params: {
docID: $ID
}
}
})
3.12.3.2. Серверний модуль без функції, який викликається з бізнес-процесу
Приклад виклику скрипт з бібліотеки серверних модулі з викликом функції:
3.12.3.3. Приклад виклику скрипт з бібліотеки серверних модулі з викликом функції
3.12.4. В шаблоні документа
Серверний скрипт в шаблоні документа відпрацьовує в момент формування документа та дозволяє виконувати будь-які операції з атрибутами, наприклад, формування поточної дати та часу формування документа, заміна значень атрибутів, формування індексу (номера за порядком) для таблиць, тощо.
Для створення серверного скрипта в шаблоні документа необхідно відкрити робочий стіл Студія, далі папку Налаштування типів документів та ярлик Шаблони документів. Обрати та відкрити необхідний шаблон документа, потім натиснути на кнопку Увімкнути серверну логіку.
В шаблоні буде додана вкладка Серверна логіка, в якій будуть приклади скриптів.
Приклад скрипт для формування індексу таблиці:
module.exports = {
transformTemplateData({dataEntityName, dataID, templateData}) {
//ms16 - код табличного атрибута
templateData['attrValues.ms16'].forEach(function(item, index) {
item.index = index;
item['attrValues.index'] = index + 1;
})
}
}
В серверних скриптах шаблону документа можна використовувати скрипти з бібліотеки серверних модулів, для цього в скрипт необхідно додати відповідне посилання (require).
Приклади скриптів наведено в Додатку 2 до інструкції.
3.12.5. В шаблоні IDP (доступні при встановленні пакету dfx-idp)
Серверний скрипт в шаблоні IDP відпрацьовує в момент збереження результатів розпізнавання та дозволяє виконувати будь-які операції з атрибутами.
Для створення серверного скрипта в шаблоні IDP необхідно відкрити робочий стіл Студія, далі папку Налаштування типів документів та ярлик Шаблони IDP. Обрати та відкрити необхідний шаблон IDP, потім натиснути на кнопку Увімкнути серверну логіку.
В серверних скриптах шаблону IDP можна використовувати скрипти з бібліотеки серверних модулів, для цього в скрипт необхідно додати відповідне посилання (require).
В шаблоні буде додана вкладка Серверна логіка, в якій будуть приклади скриптів.
Приклади скриптів наведено в Додатку 2 до інструкції.