Skip to main content
Version: 52.0.0

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 до інструкції.