Оновлення сутностей в асинхронному режимі (оновлення IBAN)

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

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

2. Моделювання структур даних

Створіть модель даних реєстру за прикладом нижче.

  1. Створіть таблицю та критерій пошуку.

    Ця модель даних створює таблицю, а також визначає критерій пошуку.

    Базова модель даних для нашого прикладу
        <changeSet id="23733-1" author="registry owner">
            <createTable tableName="account" ext:historyFlag="true">
                <column name="id" type="UUID" defaultValueComputed="uuid_generate_v4()">
                    <constraints nullable="false" primaryKey="true" primaryKeyName="user_account_id"/>
                </column>
                <column name="username" type="TEXT">
                    <constraints nullable="false"/>
                </column>
                <column name="bank_number" type="TEXT">
                    <constraints nullable="false"/>
                </column>
            </createTable>
        </changeSet>
    
        <changeSet id="23733-2" author="registry owner">
            <ext:createSearchCondition name="search_account_bank_number">
                <ext:table name="account">
                    <ext:column name="id" sorting="asc"/>
                    <ext:column name="bank_number"/>
                </ext:table>
            </ext:createSearchCondition>
        </changeSet>
    
        <changeSet id="23733-3" author="registry owner">
            <ext:partialUpdate name="update_account_bank_number">
                <ext:table name = "account">
                    <ext:column name="bank_number"/>
                </ext:table>
            </ext:partialUpdate>
        </changeSet>

3. Моделювання бізнес процесу

bp iban update 1
Зображення 1. Загальний вигляд бізнес-процесу, який працює в асинхронному режимі
  1. Створіть стартову подію (Start event) та виконайте наступні налаштування для секції Execution listeners:

    bp iban update 2

    Опція Script дозволяє використати функцію set_variable() для збереження змінної limit, яка буде використана для обмеження кількості сутностей під часу пошуку у Фабриці даних.

  2. Додайте послідовний цикл, всередині якого буде виконуватись асинхронний пошук та обробка партій акаунтів. Використайте Expanded subprocess із наступними налаштуваннями у секції Multi-instance:

    bp iban update 3

    Цей приклад використовує максимальне значення Integer для налаштування Loop cardinality. Цикл завершиться, коли кількість акаунтів, яку буде знайдено у Фабриці даних, стане меншою за встановлений ліміт:

    ${accountSCResponse.value.responseBody.elements().size() < limit}
  3. Створіть стартову подію (Start event), яка буде запускатися в асинхронному режимі. Для цього виконайте наступні налаштування у секції Asynchronous continuations:

    bp iban update 4

    Це означає, що після запуску цієї події процес продовжує виконуватися, не очікуючи завершення всіх ітерацій циклу у підпроцесі.

  4. Після стартової події додайте сервісну задачу пошуку партії аккаунтів:

    bp iban update 5

    У цьому процесі для поля X-Access-Token використовується токен системного користувача в усіх сервісних задачах, де це необхідно:

    ${system_user().accessToken}
  5. Наступним кроком йде оновлення кожного акаунту з отриманої партії за рахунок послідовного циклу. Дані для циклу передаються у секції Multi-instance-підпроцесу у полі Collection:

    ${accountSCResponse.value.responseBody.elements()}
    bp iban update 6