Запуск бізнес-процесу за таймером
🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
1. Загальний опис
Ця сторінка демонструє приклад реалізації та запуску бізнес-процесу, який автоматично активується відповідно до графіка, визначеного у BPMN-елементі Timer. Процес самостійно ініціюється у визначений час та виконує задачі відповідно до встановленої послідовності.
Було створено референтний бізнес-процес, який має на меті допомогти розробникам та моделювальникам регламентів краще розуміти та ефективно використовувати таймери.
2. Референтний приклад
Де можна знайти приклад референтного бізнес-процесу?Адміністратор Платформи може розгорнути для вас демо-реєстр — еталонний реєстр, що містить референтні та інші приклади файлів для створення цифрового регламенту. Він містить різноманітні елементи для розробки моделі даних, бізнес-процесів, UI-форм, аналітичної звітності, витягів, сповіщень, зовнішніх інтеграцій та багато іншого. Детальну інструкцію щодо розгортання демо-реєстру та отримання референтних прикладів моделювання ви знайдете на сторінці Розгортання демо-реєстру із референтними прикладами. Приклад BPMN-схеми процесу буде доступний у регламенті демо-реєстру за пошуком по ключовим словам — automatic-external-system-data-saving. Назви форм ви можете знайти всередині відповідних користувацьких задач (User Task) бізнес-процесу у полі |
2.1. Короткий огляд компонентів процесу та їх призначення
-
Стартова подія з таймером (Start event) — запускає бізнес-процес у встановлений час, щоденно з понеділка по п’ятницю о 8:00.
-
Скрипт — отримує дані зі зовнішньої системи та формує об’єкт для подальшого збереження.
-
Підписання даних системним ключем — гарантує, що дані, отримані від зовнішньої системи є автентичними та цілісними.
-
Створення сутності у БД — зберігає отримані дані в базі даних.
-
Встановлення статусу бізнес-процесу — відображає успішне завершення бізнес-процесу.
-
Кінцева подія (End event) — позначає завершення бізнес-процесу.
2.2. Моделювання
-
Увійдіть до Кабінету адміністратора регламентів.
-
Відкрийте розділ Моделі процесів.
-
Створіть новий процес, вкажіть бізнес- та службову назву та перейдіть до вкладки Конструктор.
-
Змоделюйте пул для бізнес-процесу.
-
Створіть стартову подію (Start event) та виконайте наступні налаштування:
-
Введіть назву задачі. Наприклад,
Старт
. -
У розділі Timer встановіть розклад, за яким буде запускатися та виконуватися бізнес-процес.
-
У полі
Type
(Timer Definition Type
) вкажіть тип таймера —Cycle
.Опція
Cycle
дозволяє налаштувати повторювані процеси або події на основі певного інтервалу часу. Циклічний таймер може бути встановлений на рівні стартової, проміжної події або граничної події, що пов’язані з виконавцем завдань.Детальніше про типи таймерів — див. на сторінці Подія «Таймер».
-
У полі
Value
вкажіть розклад у певному форматі для запуску процесу. Наприклад,0 8 * * MON-FRI
.Ви можете налаштувати циклічний таймер, використовуючи стандартний формат
ISO 8601
для інтервалів повторень абоcron
-вираз.- Приклади значень для формату ISO 8601:
-
-
R5/PT10S
— кожні 10 секунд, до 5 разів. -
R/P1D
— щодня, нескінченно.
-
- Приклади значень для формату cron:
-
-
0 8 * * MON-FRI
:0: хвилини (точно в 0 хвилин) 8: години (ранку, 8:00) *: день місяця (будь-який день місяця) *: місяць (будь-який місяць) MON-FRI: день тижня (понеділок - п'ятниця)
Таким чином, цей
cron
-вираз означає, що процес буде запускатися щодня з понеділка по п’ятницю о 8:00 ранку. -
0 0 9-17 * * MON-FRI
:Цей
cron
-вираз означає, що процес буде запускатися кожну годину з 9 до 17 години за UTC з понеділка по п’ятницю.
-
-
-
Вкажіть ініціатора процесу як
initiator
.Що таке ініціатор?
"Start initiator = initiator"
вказує на те, що значення ініціатора (тобто особи чи системи, яка розпочала процес) буде встановлено якinitiator
.У контексті бізнес-процесів, ініціатор — це той, хто починає процес або відповідає за його запуск. Зазвичай, ініціатор — це користувач, який викликає дію, або система, яка автоматично розпочинає процес.
У цьому випадку,
initiator
може бути використаний для ідентифікації особи чи системи, що стартували процес, у подальших етапах бізнес-процесу або для контролю доступу до ресурсів.
-
-
Створіть скрипт-задачу та використайте скрипт для отримання та обробки даних. Для цього відкрийте візуальний редактор коду (детальніше про редактор коду — на сторінці Редагування скриптів бізнес-процесів у візуальному редакторі коду).
У нашому прикладі дані отримуємо з іншої системи.Скрипт для отримання та обробки даних
import java.text.SimpleDateFormat; import java.util.Date; SimpleDateFormat date = new SimpleDateFormat("dd_MM_yyyy") String url = 'https://wallpapercave.com/wp/wp2601438.jpg' String fileName = 'file_'.concat(date.format(new Date())).concat('.jpeg') def documentMetadata = save_digital_document_from_url(url, fileName) def payload = [:] def listFileObj = [] payload.name = fileName def fileObj = [:] fileObj.id = documentMetadata.id fileObj.checksum = documentMetadata.checksum listFileObj << fileObj payload.image = listFileObj set_variable('payload', S(payload, 'application/json'))
Скрипт отримує дані із зовнішньої системи, створює об’єкт
payload
з отриманими даними та зберігає його як змінну процесу для подальшого використання у наступних етапах бізнес-процесу, а саме:-
Імпортує класи
java.text.SimpleDateFormat
таjava.util.Date
для роботи з датами:import java.text.SimpleDateFormat; import java.util.Date;
-
Створює новий об’єкт SimpleDateFormat з форматом "dd_MM_yyyy" для форматування дати:
SimpleDateFormat date = new SimpleDateFormat("dd_MM_yyyy");
-
Визначає URL-адресу зображення для завантаження:
String url = 'https://wallpapercave.com/wp/wp2601438.jpg';
-
Генерує ім’я файлу на основі поточної дати, додаючи префікс
'file_'
та розширення'.jpeg'
:String fileName = 'file_'.concat(date.format(new Date())).concat('.jpeg');
-
Викликає функцію
save_digital_document_from_url(url, fileName)
для збереження цифрового документа (зображення) із заданою URL-адресою та іменем файлу:def documentMetadata = save_digital_document_from_url(url, fileName);
-
Створює порожній словник payload та список
listFileObj
для побудови JSON-структури даних:def payload = [:]; def listFileObj = [];
-
Присвоює згенероване ім’я файлу полю name словника
payload
:payload.name = fileName;
-
Створює новий порожній словник
fileObj
:def fileObj = [:];
-
Присвоює
id
таchecksum
з метаданих документа відповідним полям словникаfileObj
:fileObj.id = documentMetadata.id; fileObj.checksum = documentMetadata.checksum;
-
Додає
fileObj
до спискуlistFileObj
:listFileObj << fileObj;
-
Присвоює список
listFileObj
полюimage
словникаpayload
:payload.image = listFileObj;
-
Встановлює змінну ‘payload’ зі значенням словника
payload
, перетвореного на JSON-рядок, для використання у подальших кроках бізнес-процесу:set_variable('payload', S(payload, 'application/json'));
-
-
Змоделюйте сервісну задачу (Service Task) для підпису даних системним ключем.
- Налаштування:
-
-
Використовуйте делегат System signature by DSO service із каталогу шаблонів для накладання системного підпису.
-
Вхідні дані передайте як змінну
${payload}
у відповідному полі. -
Передайте токен користувача. Ви можете це зробити через JUEL-функцію
system_user()
та методaccessToken
. Наприклад,${system_user().accessToken
. Його надалі можна використовувати в інтеграційних конекторах для інтеграції від імені користувача.Ви можете також використати токен ініціатора процесу. Наприклад,
${initiator().accessToken
.Детальніше див. на сторінці JUEL-функції у бізнес-процесах. -
Відповідь запишіть у змінну. Наприклад,
system_signature_key
.
-
-
Збережіть дані до БД. Створіть новий запис у базі даних, зберігши значення об’єкта
entityLocation
до відповідної колонки.-
Використовуйте делегат Create entity in data factory, щоб створити сутність у базі даних.
Альтернативно ви можете використовувати загальний інтеграційний конектор Connect to data factory. Детальніше про інтеграційні розширення до бізнес-процесів див. на сторінці Каталог типових розширень до бізнес-процесів.
-
Вкажіть ресурс/API-ендпоінт. Наприклад,
test-entity
, що відповідає назві таблиці, яку ви визначили при створенні моделі даних реєстру —test_entity
. -
Вхідні дані передайте як змінну
${payload}
у відповідному полі. -
Передайте токен користувача. Ви можете це зробити через JUEL-функцію
system_user()
та методaccessToken
. Наприклад,${system_user().accessToken
. -
Вкажіть
X-Digital-Signature source
— джерело системного підпису. Наприклад,${system_signature_key}
. -
Вкажіть
X-Digital-Signature-Derived source
— ключ Ceph-документа, який містить інформацію про підписані дані. Наприклад,${system_signature_key}
. -
Запишіть відповідь до змінної результату, наприклад,
response
.
-
-
Встановіть статус бізнес-процесу, що відображатиме успішне завершення бізнес-процесу. Для цього створіть сервісну задачу (Service Task) і застосуйте делегат Define business process status.
-
Завершіть процес за допомогою End Event.
-
Застосуйте внесені зміни до майстер-гілки, щоб опублікувати процес у регламенті.
Див. детальніше — на сторінці Перегляд та управління налаштуваннями версії-кандидата.
3. Використання у Кабінеті користувача
Бізнес-процес, який було змодельовано та опубліковано в регламенті, стає доступним у Кабінеті посадової особи.
Цей процес можна знайти у розділі Доступні послуги > Референтні бізнес-процеси. Він буде запускатися та виконуватися відповідно до встановленого графіку.
Кабінет користувача ( https://officer-portal-<registry-name>-main.<dns-wildcard> де Наприклад, для демо-реєстру, який розгорнуто на екземплярі Платформи |