Запуск бізнес-процесу за таймером

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

1. Загальний опис

Ця сторінка демонструє приклад реалізації та запуску бізнес-процесу, який автоматично активується відповідно до графіка, визначеного у BPMN-елементі Timer. Процес самостійно ініціюється у визначений час та виконує задачі відповідно до встановленої послідовності.

Було створено референтний бізнес-процес, який має на меті допомогти розробникам та моделювальникам регламентів краще розуміти та ефективно використовувати таймери.

2. Референтний приклад

Де можна знайти приклад референтного бізнес-процесу?

Адміністратор Платформи може розгорнути для вас демо-реєстр — еталонний реєстр, що містить референтні та інші приклади файлів для створення цифрового регламенту. Він містить різноманітні елементи для розробки моделі даних, бізнес-процесів, UI-форм, аналітичної звітності, витягів, сповіщень, зовнішніх інтеграцій та багато іншого.

Детальну інструкцію щодо розгортання демо-реєстру та отримання референтних прикладів моделювання ви знайдете на сторінці Розгортання демо-реєстру із референтними прикладами.

Приклад BPMN-схеми процесу буде доступний у регламенті демо-реєстру за пошуком по ключовим словам — automatic-external-system-data-saving. Назви форм ви можете знайти всередині відповідних користувацьких задач (User Task) бізнес-процесу у полі Form key.

2.1. Короткий огляд компонентів процесу та їх призначення

  1. Стартова подія з таймером (Start event) — запускає бізнес-процес у встановлений час, щоденно з понеділка по п’ятницю о 8:00.

  2. Скрипт — отримує дані зі зовнішньої системи та формує об’єкт для подальшого збереження.

  3. Підписання даних системним ключем — гарантує, що дані, отримані від зовнішньої системи є автентичними та цілісними.

  4. Створення сутності у БД — зберігає отримані дані в базі даних.

  5. Встановлення статусу бізнес-процесу — відображає успішне завершення бізнес-процесу.

  6. Кінцева подія (End event) — позначає завершення бізнес-процесу.

2.2. Моделювання

  1. Увійдіть до Кабінету адміністратора регламентів.

  2. Відкрийте розділ Моделі процесів.

  3. Створіть новий процес, вкажіть бізнес- та службову назву та перейдіть до вкладки Конструктор.

    bp timer launch 1

  4. Змоделюйте пул для бізнес-процесу.

    bp timer launch 2

  5. Створіть стартову подію (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 може бути використаний для ідентифікації особи чи системи, що стартували процес, у подальших етапах бізнес-процесу або для контролю доступу до ресурсів.

    bp timer launch 3

  6. Створіть скрипт-задачу та використайте скрипт для отримання та обробки даних. Для цього відкрийте візуальний редактор коду (детальніше про редактор коду — на сторінці Редагування скриптів бізнес-процесів у візуальному редакторі коду).
    У нашому прикладі дані отримуємо з іншої системи.

    bp timer launch 4

    Скрипт для отримання та обробки даних
    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 з отриманими даними та зберігає його як змінну процесу для подальшого використання у наступних етапах бізнес-процесу, а саме:

    1. Імпортує класи java.text.SimpleDateFormat та java.util.Date для роботи з датами:

      import java.text.SimpleDateFormat;
      import java.util.Date;
    2. Створює новий об’єкт SimpleDateFormat з форматом "dd_MM_yyyy" для форматування дати:

      SimpleDateFormat date = new SimpleDateFormat("dd_MM_yyyy");
    3. Визначає URL-адресу зображення для завантаження:

      String url = 'https://wallpapercave.com/wp/wp2601438.jpg';
    4. Генерує ім’я файлу на основі поточної дати, додаючи префікс 'file_' та розширення '.jpeg':

      String fileName = 'file_'.concat(date.format(new Date())).concat('.jpeg');
    5. Викликає функцію save_digital_document_from_url(url, fileName) для збереження цифрового документа (зображення) із заданою URL-адресою та іменем файлу:

      def documentMetadata = save_digital_document_from_url(url, fileName);
    6. Створює порожній словник payload та список listFileObj для побудови JSON-структури даних:

      def payload = [:];
      def listFileObj = [];
    7. Присвоює згенероване ім’я файлу полю name словника payload:

      payload.name = fileName;
    8. Створює новий порожній словник fileObj:

      def fileObj = [:];
    9. Присвоює id та checksum з метаданих документа відповідним полям словника fileObj:

      fileObj.id = documentMetadata.id;
      fileObj.checksum = documentMetadata.checksum;
    10. Додає fileObj до списку listFileObj:

      listFileObj << fileObj;
    11. Присвоює список listFileObj полю image словника payload:

      payload.image = listFileObj;
    12. Встановлює змінну ‘payload’ зі значенням словника payload, перетвореного на JSON-рядок, для використання у подальших кроках бізнес-процесу:

      set_variable('payload', S(payload, 'application/json'));
  7. Змоделюйте сервісну задачу (Service Task) для підпису даних системним ключем.

    Налаштування:
    • Використовуйте делегат System signature by DSO service із каталогу шаблонів для накладання системного підпису.

    • Вхідні дані передайте як змінну ${payload} у відповідному полі.

    • Передайте токен користувача. Ви можете це зробити через JUEL-функцію system_user() та метод accessToken. Наприклад, ${system_user().accessToken. Його надалі можна використовувати в інтеграційних конекторах для інтеграції від імені користувача.

      Ви можете також використати токен ініціатора процесу. Наприклад, ${initiator().accessToken.

      Детальніше див. на сторінці JUEL-функції у бізнес-процесах.
    • Відповідь запишіть у змінну. Наприклад, system_signature_key.

    bp timer launch 5

  8. Збережіть дані до БД. Створіть новий запис у базі даних, зберігши значення об’єкта 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.

    bp timer launch 6

  9. Встановіть статус бізнес-процесу, що відображатиме успішне завершення бізнес-процесу. Для цього створіть сервісну задачу (Service Task) і застосуйте делегат Define business process status.

  10. Завершіть процес за допомогою End Event.

  11. Застосуйте внесені зміни до майстер-гілки, щоб опублікувати процес у регламенті.

3. Використання у Кабінеті користувача

Бізнес-процес, який було змодельовано та опубліковано в регламенті, стає доступним у Кабінеті посадової особи.

Цей процес можна знайти у розділі Доступні послуги > Референтні бізнес-процеси. Він буде запускатися та виконуватися відповідно до встановленого графіку.

Кабінет користувача (officer-portal) доступний за шаблонним посиланням:

https://officer-portal-<registry-name>-main.<dns-wildcard>

де <registry-name> — назва вашого реєстру, а <dns-wildcard> вказує на доменні та піддоменні імена для інстансу Платформи.

Наприклад, для демо-реєстру, який розгорнуто на екземплярі Платформи example.com, посилання до сервісу officer-portal виглядатиме так: