JUEL-функції у бізнес-процесах
🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
Документ у процесі оновлення. |
1. Загальний опис
У Camunda ви можете використовувати скрипти в різних місцях бізнес-процесу. Наприклад, при роботі зі Script Task. Camunda Engine підтримує скриптування мовами JavaScript, Groovy або JUEL тощо.
У розрізі Платформи реєстрів реалізовано підтримку скриптування за допомогою Groovy та JUEL (Java Unified Expression Language) — уніфікованої скриптової мови виразів Java — з використанням спеціальних розроблених JUEL-функцій.
Використовуйте платформні JUEL-функції для спрощення моделювання бізнес-процесів. Наразі імплементовано такі функції та їх автодоповнення у візуальному редакторі коду:
-
get_variable()
-
set_variable()
-
set_transient_variable()
-
process_caller()
-
message_payload()
Детальніше про використання редактор коду ви можете переглянути на сторінці Редагування скриптів бізнес-процесів у візуальному редакторі коду. |
2. Функція initiator()
Функція initiator()
призначена для отримання та подальшого використання ініціатора (initiator
) в процесі.
Повертає клас UserDto
.
UserDto — клас, що є обгорткою даних користувача (тут — ініціатора).
Завжди містить у собі userName , токен і JwtClaimsDto (дані для авторизації) до першої задачі користувача.
|
Методи взаємодії
Функція надає наступні методи:
-
getUserName()
— повертає ім’я користувача, що можна використовувати в поляхAssignee
таCandidate Users
задач користувача. -
getAccessToken()
— повертає токен користувача, що можна використовувати в інтеграційних конекторах для інтеграції від імені користувача. -
getDrfo()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутdrfo
користувача. -
getEdrpou()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутedrpou
користувача. -
getFullName()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутfullName
користувача.
Токен ініціатора, а разом з ним і всі атрибути Keycloak, будуть доступні тільки до першої користувацької задачі (User Task) у бізнес-процесі. |
3. Функція completer()
Функція completer(<task_id>)
дозволяє отримати виконавця користувацької задачі для подальшого використання у процесі.
Повертає клас UserDto
.
UserDto — клас, що є обгорткою даних користувача (тут — ініціатора).
Завжди містить у собі userName , токен і JwtClaimsDto (дані для авторизації).
|
Методи взаємодії
Функція надає наступні методи:
-
getUserName()
— повертає ім’я користувача, що можна використовувати в поляхAssignee
таCandidate Users
задач користувача. -
getAccessToken()
— повертає токен користувача, що можна використовувати в інтеграційних конекторах для інтеграції від імені користувача. -
getDrfo()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутdrfo
користувача. -
getEdrpou()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутedrpou
користувача. -
getFullName()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутfullName
користувача.
Функція completer(<task_id>) доступна для використання після успішного завершення користувацької задачі.
|
4. Функція submission()
Функція submission(<activity_id|event_id>)
дозволяє отримати дані форми користувацької задачі та повертає клас UserFormDataDto
.
UserFormDataDto — клас, що є обгорткою даних форми користувача.
|
Функція submission(<activity_id|event_id>) доступна для використання після успішного завершення користувацької задачі або стартової форми.
|
5. Функція sign_submission()
Функція sign_submission(<activity_id|event_id>)
використовується для отримання підпису та даних форми користувацьких задач.
Повертає клас SignUserFormDataDto
.
SignUserFormDataDto — клас, що є обгорткою для даних форми користувача, підпису та ключа CEPH-документа, де зберігається підпис.
|
Функція sign_submission(<activity_id|event_id>) доступна для використання після успішного завершення задачі, що потребує валідації підписом користувача, або стартової форми.
|
6. Функція system_user()
Функція system_user()
необхідна для отримання системного користувача з Keyclock.
Повертає клас UserDto
.
UserDto — клас, що є обгорткою даних користувача (тут — ініціатора).
Завжди містить у собі userName , токен і JwtClaimsDto .
|
Методи взаємодії
Функція надає наступні методи:
-
getUserName()
— повертає ім’я користувача, що можна використовувати в поляхAssignee
таCandidate Users
задач користувача. -
getAccessToken()
— повертає токен користувача, що можна використовувати в інтеграційних конекторах для інтеграції від імені користувача. -
getDrfo()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутdrfo
користувача. -
getEdrpou()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутedrpou
користувача. -
getFullName()
— делегує виклик наJwtClaimsDto
та повертає Keycloak-атрибутfullName
користувача.
7. Функція get_trembita_auth_token()
Функція get_trembita_auth_token()
дозволяє отримати токен авторизації для доступу до сервісів СЕВ ДЕІР "Трембіта", з якими попередньо налаштовано взаємодію. Така взаємодія конфігурується в інтерфейсі адміністративної панелі Control Plane (див. детальніше — Налаштування взаємодії з реєстрами через ШБО "Трембіта" у Control Plane).
Функція застосовується у скрипт-задачах (Script Task) бізнес-процесів і приймає один параметр (String
) — назву системи/сервісу, до якої необхідно виконати запит. Наприклад:
def registryAuthSecretValue = get_trembita_auth_token('trembita-registry-test')
-
trembita-registry-test
— назва системи у СЕВ ДЕІР "Трембіта".
Детальніше про роботу функції та її використання у бізнес-процесах ви можете переглянути у статті Загальний Trembita SOAP-конектор. |
8. Робота з цифровими документами
8.1. Функція load_digital_document()
JUEL-функція load_digital_document(String documentId): byte[]
призначена для завантаження цифрових документів. Ця функція використовує ідентифікатор документа (documentId
), який передається як вхідний параметр для отримання відповідного документа через внутрішній API сервісу цифрових документів.
GET /internal-api/documents/{processInstanceId}/{id} (binary response)
Функція повертає документ у форматі байтів — byte[]
, що дозволяє працювати з даними документа на низькому рівні. Ця функція може бути корисна для розробників, яким потрібно працювати з цифровими документами, використовуючи скриптування Groovy.
Застосування функції load_digital_document() детально представлено у референтному прикладі на сторінці Завантаження файлу та його редагування.
|
8.2. Функція get_digital_document_metadata()
JUEL-функція get_digital_document_metadata(String documentId): DocumentMetadata
використовується для отримання метаданих документа, які зберігаються в сервісі цифрових документів.
GET /internal-api/documents/{processInstanceId}/{id}/metadata (DocumentMetadata)
class DocumentMetadata {
String id
String name
String type
String checksum
Long size
}
Ця функція приймає на вхід ідентифікатор документа (documentId
) і повертає об’єкт типу DocumentMetadata
, що містить наступну інформацію:
-
id
: ідентифікатор документа. -
name
: ім’я документа. -
type
: тип документа. -
checksum
: контрольна сума документа. Використовується для перевірки цілісності документа після його передачі або збереження. -
size
: розмір документа.
Ця функція може бути корисною, коли вам потрібно отримати метадані документа в рамках вашого бізнес-процесу. Вона дозволяє вам працювати з документами в сервісі цифрових документів, не здійснюючи прямі запити до API цього сервісу. Замість цього, ви можете використовувати цю JUEL-функцію безпосередньо в Groovy-редакторі.
Застосування функції get_digital_document_metadata() детально представлено у референтному прикладі на сторінці Завантаження файлу та його редагування.
|
8.3. Функція save_digital_document()
JUEL-функція save_digital_document(byte[] content, String targetFileName): DocumentMetadata
використовується для збереження документа в сервісі цифрових документів.
Ця функція приймає два аргументи:
-
content
: це байтовий масив, що представляє вміст документа, який потрібно зберегти. -
targetFileName
: це ім’я файлу, під яким буде збережено документ.
POST /internal-api/documents/{processInstanceId} (multipart file + filename) : DocumentMetadata
class DocumentMetadata {
String id
String name
String type
String checksum
Long size
}
Після виконання, ця функція повертає об’єкт типу DocumentMetadata
, що містить метадані новозбереженого документа. Ці метадані включають:
-
id
: ідентифікатор нового документа. -
name
: ім’я нового документа (це буде те саме ім’я, що було передано якtargetFileName
). -
type
: тип нового документа. -
checksum
: контрольна сума нового документа, що використовується для перевірки його цілісності. -
size
: розмір нового документа в байтах.
Ця функція дуже корисна, коли вам потрібно зберегти документ в рамках ваших бізнес-процесів. Замість того, щоб робити прямі запити до API сервісу цифрових документів, ви можете використовувати цю JUEL-функцію прямо в Groovy-редакторі.
Застосування функції save_digital_document() детально представлено у референтному прикладі на сторінці Завантаження файлу та його редагування.
|
8.4. Функція save_digital_document_from_url()
Функція save_digital_document_from_url()
дозволяє отримувати цифрові файли/документи за віддаленою адресою від публічних API, тобто таких, що не потребують автентифікації. ЇЇ можна використовувати для спрощення моделювання бізнес-процесів у скриптах.
- Функція може приймати 2 вхідні параметри:
-
-
URL цифрового документа
-
Назва файлу
Можливо отримати лише один документ за один запит до зовнішнього джерела. Обидва параметри є рядком (
String
), тому моделювальник може передати функції фактично будь-який аргумент:Приклад 2. Шаблон функціїsave_digital_document_from_url(String remoteFileUrl, String targetFileName)
-
Детальніше про роботу функції та її використання у бізнес-процесах ви можете переглянути на сторінці Завантаження цифрових документів за зовнішнім посиланням. |