Завдання 5. Моделювання бізнес-процесу із декількома учасниками

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

1. Мета завдання

Мета завдання:
  • навчити моделювати бізнес-процес, що має декількох учасників.

  • навчити моделювати форми та налаштовувати їх за допомогою formVariables.

В рамках цього завдання моделювальники мають:
  • змоделювати 1 бізнес-процес;

  • змоделювати 5 форм внесення даних до бізнес-процесу;

  • створити ролі, необхідні для функціонування у бізнес-процесі;

  • надати доступи до бізнес-процесу для відповідних ролей;

  • зберегти створені артефакти до локального git-репозиторію;

  • перенести локальні зміни до віддаленого Gerrit-репозиторію.

3. Процес виконання завдання

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

На етапі моделювання бізнес-процесу необхідно створити та зберегти відповідну BPMN-діаграму.

Використовуйте файл citizen-add-lab.bpmn із готовою схемою бізнес-процесу як приклад.

Чекліст моделювання бізнес-процесу

Використовуйте наведений чекліст із переліком кроків для створення бізнес-процесу:

Важливо! Після проходження всіх етапів, не забудьте зберегти змодельовану схему бізнес-процесу до відповідної папки з регламентом реєстру (див. Збереження змодельованої схеми бізнес-процесу)

3.1.1. Створення пулу для бізнес-процесу

Найперше, змоделюйте пул для бізнес-процесу. Для цього виконайте кроки, подані нижче:

Моделювання діаграми бізнес-процесу має відбуватися в рамках елемента Create Pool/Participant.
  1. Відкрийте додаток Camunda Modeler та створіть нову діаграму BPMN. Для цього у лівому верхньому куті натисніть меню FileNew FileBPMN Diagram:

    bp 1

  2. На панелі інструментів зліва знайдіть елемент Create pool/Participant та перетягніть його до панелі моделювання:

    bp 2

  3. Заповніть наступні поля відповідними значеннями:

    • у полі Name введіть значення Створення лабораторії;

    • у полі Process id вкажіть citizen-add-lab;

    • у полі Process name вкажіть Процес створення лабораторії:

    task 5 bp 1

3.1.2. Створення початкової події

Створіть початкову подію. Для цього виконайте наступні кроки:

  1. На панелі інструментів, зліва, знайдіть елемент (коло) CreateStartEvent та перетягніть його до панелі моделювання:

    bp keys create start event
    bp keys create start event 1
  2. На панелі налаштувань справа заповніть наступні параметри відповідними значеннями:

    • у полі Name введіть Початок;

    • у полі Initiator введіть initiator.

    task 5 bp 2

3.1.3. Створення задачі скриптування "Підготовка даних для показу"

На цьому етапі необхідно змоделювати задачу скриптування для підготовки даних до показу. Для цього виконайте наступні кроки:

  1. Оберіть коло із початковою подією, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task:

    task 5 bp 03

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування):

    task 5 bp 03 1

  3. Виділіть додану задачу скриптування та налаштуйте наступні параметри:

    • у полі Id вкажіть convertSignFormDataToDataFactoryFormatActivity;

    • у полі Name введіть Підготовка даних для показу;

    • у полі Script Format зазначте формат (мову) скриптування groovy;

    • у полі Script type вкажіть тип скрипту InlineScript;

    • у полі Script вставте безпосередньо groovy-скрипт:

      Натисніть, щоб розгорнути або згорнути
      def cephData = [:]
      
      cephData['edrpou'] = initiator().edrpou
      
      execution.removeVariable('payload')
      set_transient_variable('payload', S(cephData, 'application/json'))

      task 5 bp 3

3.1.4. Створення користувацької задачі "Додати інформацію про лабораторію"

На цьому етапі необхідно змоделювати користувацьку задачу Додати інформацію про лабораторію.

На прикладі Завдання 3 створіть користувацьку задачу, призначену для внесення даних користувачем. Для цього виконайте наступні кроки:

  1. Оберіть прямокутник із задачею скриптування, змодельованою на попередньому етапі, та приєднайте нову задачу.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  3. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form із каталогу та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Id зазначте addLabCitizenActivity;

    • у полі Name введіть Додати інформацію про лабораторію;

    • у полі Form key введіть citizen-add-lab-bp-add-lab;

    • у полі Assignee вкажіть ${initiator};

    • у полі Form data pre-population вкажіть ${payload}.

    task 5 bp 4

3.1.5. Створення сервісної задачі "Пошук даних про лабораторію (transient var)"

На цьому етапі необхідно створити сервісну задачу Пошук даних про лабораторію (transient var).

На прикладі Завдання 3 змоделюйте сервісну задачу для пошуку даних про лабораторію. Для цього виконайте наступні кроки:

  1. Оберіть прямокутник із користувацькою задачею Додати інформацію про лабораторію, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).

  3. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон Search for entities in data factory (Пошук значень у фабриці даних) та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Name має бути вказано Пошук даних про лабораторію (transient var);

    • у розділі Input ParametersResource зазначте наступне:

      • у полі Variable Assignment Type вкажіть String or Expression;

      • у полі Variable Assignment Value вкажіть laboratory-equal-edrpou-name-count;

      task 5 bp 5

    • у розділі Input ParametersSearch Variables вкажіть наступне:

      • у полі Variable Assignment type вкажіть Map.

      • у полі Add Entry додайте параметри name та edrpou, натиснувши на позначку плюса (+) та вкажіть для них відповідні значення:

        Key Value

        name

        ${submission('addLabCitizenActivity').formData.prop('name').value()}

        edrpou

        ${submission('addLabCitizenActivity').formData.prop('edrpou').value()}

        task 5 bp 6

    • у розділі Input ParametersX-Access-Token вкажіть наступне:

      • у полі Variable Assignment Type вкажіть String or Expression;

      • у полі Variable Assignment Value вкажіть ${completer('addLabCitizenActivity').accessToken}.

        Після відпрацювання першої користувацької задачі (User Task), намагайтеся використовувати функцію completer('<task_id>') для отримання даних користувача, замість initiator().

        Токен доступу береться з АБО ініціатора (наприклад, $initiator().accessToken}), АБО виконавця останньої користувацької задачі (наприклад, ${completer('taskDefinitionId').accessToken}).

        JWT-токен має свій термін дії, який триває 300 секунд. Якщо вказати токен ініціатора, який запустив бізнес-процес, а користувач довго не виконував задачу, то термін дії токена спливе, й бізнес-процес необхідно буде запускати повторно.

        Детальніше про JUEL-функції ви можете переглянути на сторінці JUEL-функції у бізнес-процесах.

    • У розділі Output ParametersResult Variable параметр Assign to Process Variable заповніть значенням response:

    task 5 bp 7

3.1.6. Створення та заповнення XOR-шлюзу "Дані присутні?"

На прикладі Завдання 3 приєднайте XOR-шлюз. Для цього виконайте кроки, подані нижче:

  1. Оберіть прямокутник із сервісною задачею Пошук даних про лабораторію (transient var), змодельованою на попередньому етапі, та приєднайте XOR-шлюз, натиснувши іконку Append Gateway.

  2. На панелі налаштувань справа, у полі Name вкажіть назву шлюзу — Дані присутні?.

    task 5 bp 8

3.1.7. Створення гілки з валідаційною помилкою

На прикладі Завдання 3 створіть гілку з валідаційною помилкою. Для цього виконайте кроки, подані нижче:

  1. Оберіть ромб із XOR-шлюзом Дані присутні?, змодельованим на попередньому етапі, та створіть нову сервісну задачу, натиснувши іконку Append Task.

  2. Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).

  3. Натисніть Open Catalog, оберіть шаблон Throw validation error та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Name введіть Формування валідаційної помилки.

    • У розділі Input ParametersValidation Errors зазначте наступне:

      • у полі Variable Assignment Type вкажіть тип List;

      • для поля Value додайте наступне значення:

        Значення
        {"field": "name", "value": "${submission('addLabCitizenActivity').formData.prop('name').stringValue().replaceAll("\"", "\\\\\"")}", "message": "Дані про цю лабораторію вже присутні"}

    task 5 bp 9

  5. На гілці, що прямує від шлюзу Дані присутні? до сервісної задачі Формування валідаційної помилки, потрібно налаштувати наступне:

    • у полі Name введіть так;

    • у полі Condition Type введіть тип Expression;

    • у полі Expression введіть ${!response.value.responseBody.elements().isEmpty()}.

    task 5 bp 10

3.1.8. Створення гілки з подальшим продовженням бізнес-процесу

На прикладі Завдання 3 необхідно створити гілку, що продовжить бізнес-процес.

Для цього на гілці, що прямує від шлюзу Дані присутні? до користувацької задачі Підписати дані про лабораторію (див. нижче Створення користувацької задачі для підпису даних) налаштуйте такі параметри:

  1. У полі Id лишіть значення за замовчуванням.

  2. У полі Name вкажіть ні.

  3. у полі Condition Type вкажіть Expression.

  4. У полі Expression вкажіть ${response.value.responseBody.elements().isEmpty()}.

    task 5 bp 11

3.1.9. Створення користувацької задачі для підпису даних

На прикладі Завдання 3 необхідно створити користувацьку задачу для підпису даних. Для цього виконайте наступні кроки:

  1. Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  2. Натисніть Open Catalog, оберіть шаблон Citizen Sign Task та натисніть Apply для підтвердження.

  3. На панелі налаштувань справа заповніть наступні поля:

    • у полі Id вкажіть signLabCitizenActivity;

    • у полі Name введіть Підписати дані про лабораторію;

    • у полі Form key введіть shared-citizen-sign-lab;

    • у полі Assignee вкажіть ${initiator};

    • у полі Form data pre-population введіть ${submission('addLabCitizenActivity').formData}.

      task 5 bp 12

    • поле INDIVIDUAL залиште у значенні disabled (за замовчуванням);

    • для поля ENTREPRENEUR оберіть значення enabled;

    • для поля LEGAL оберіть значення — enabled.

      task 5 bp 12 1

3.1.10. Створення сервісної задачі "Отримання користувачів із роллю 'officer' "

На прикладі Створення сервісної задачі "Пошук даних про лабораторію (transient var)" необхідно створити сервісну задачу для отримання користувачів із роллю "Посадова особа" із сервісу управління ідентифікацію та доступом Keycloak. Для цього виконайте наступні кроки:

  1. Оберіть прямокутник із користувацькою задачею Підписати дані про лабораторію, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).

  3. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон Get users by role from keycloak (Отримання користувачів у Keycloak за роллю) та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Name введіть Отримання користувачів з роллю 'officer';

    • у полі Result Variable вкажіть officerUsers.

    task 5 bp 13

3.1.11. Створення користувацької задачі "Призначення виконавця задачі "Перевірка документів на відповідність"

На прикладі Створення користувацької задачі для підпису даних необхідно створити користувацьку задачу, що дозволить призначати виконавця іншої задачі. Для цього виконайте наступні кроки:

  1. Оберіть прямокутник із користувацькою задачею Отримання користувачів із роллю 'officer', змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  3. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Id введіть dispatchTaskActivity;

    • у полі Name введіть Призначення виконавця задачі "Перевірка документів на відповідність";

    • у полі Form key вкажіть shared-dispatch-task;

    • у полі Assignee вкажіть ${initiator};

    • у полі Candidate roles введіть значення task-dispatcher — роль, для якої буде доступна ця задача;

    • у полі Form variables вкажіть officerUsers — змінну, що буде передана на форму.

    task 5 bp 14

3.1.12. Створення задачі скриптування "Підготовка даних документа для показу"

На прикладі Створення задачі скриптування "Підготовка даних для показу" змоделюйте та приєднайте нову задачу скриптування. Для цього виконайте наступні кроки:

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

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування).

  3. Виділіть додану задачу скриптування та налаштуйте наступні параметри:

    • у полі Name вкажіть Підготовка даних документа для показу;

    • у полі Script Format вкажіть тип (мову) скриптування — groovy;

    • у полі Script Type вкажіть тип скрипту InlineScript;

    • у полі Script вставте безпосередньо groovy-скрипт:

      Натисніть, щоб розгорнути або згорнути
      execution.removeVariable('officerAssignee')
      set_variable('officerAssignee', submission('dispatchTaskActivity').formData.prop('userTaskAssignee').prop('userName').value())

    task 5 bp 15

3.1.13. Створення користувацької задачі "Перевірка унікальности запису про лабораторію"

На прикладі Створення користувацької задачі "Призначення виконавця задачі "Перевірка документів на відповідність" створіть нову користувацьку задачу для перевірки унікальності запису про лабораторію. Для цього виконайте кроки, подані нижче:

  1. Оберіть прямокутник зі скрипт-задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  3. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Id введіть checkLabOfficerActivity;

    • у полі Name введіть Перевірка унікальности запису про лабораторію;

    • у полі Form key вкажіть shared-officer-check-lab;

    • у полі Assignee введіть ${officerAssignee};

    • у полі Form data pre-population вкажіть ${submission('signLabCitizenActivity').formData}.

    task 5 bp 16

3.1.14. Створення XOR-шлюзу "Лабораторія унікальна?"

На прикладі Створення та заповнення XOR-шлюзу "Дані присутні?" змоделюйте та приєднайте новий XOR-шлюз. Для цього виконайте кроки, подані нижче:

  1. Оберіть прямокутник із користувацькою задачею, змодельованою на попередньому етапі, та приєднайте XOR-шлюз, натиснувши іконку Append Gateway.

  2. На панелі налаштувань справа, у полі Name вкажіть назву шлюзу — Лабораторія Унікальна? labUniqueCheckFlag.

task 5 bp 17

3.1.15. Створення гілки із негативним результатом бізнес-процесу

На прикладі Створення гілки з валідаційною помилкою створіть нову гілку із негативним результатом бізнес-процесу. Для цього виконайте кроки, подані нижче:

  1. Оберіть ромб із XOR-шлюзом Лабораторія унікальна?, змодельованим на попередньому етапі, та створіть нову сервісну задачу, натиснувши іконку Append Task.

  2. Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).

  3. Натисніть Open Catalog, оберіть шаблон Define business process status та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа заповніть наступні поля:

    • у полі Name введіть значення Результат виконання "Лабораторія не створена - Дублікат";

    • у полі Status введіть Лабораторія не створена - Така лабораторія вже існує.

    task 5 bp 18

  5. Виділіть гілку, що прямує до сервісної задачі "Результат виконання "Лабораторія не створена - Дублікат" та налаштуйте такі параметри:

    • у полі Name введіть значення ні;

    • у полі Condition Type тип Expression;

    • у полі Expression вкажіть вираз ${!submission('checkLabOfficerActivity').formData.hasProp('labUniqueCheckFlag') || submission('checkLabOfficerActivity').formData.prop('labUniqueCheckFlag').value() == false}.

    task 5 bp 19

3.1.16. Створення гілки із подальшим продовженням бізнес-процесу

На прикладі Створення гілки з подальшим продовженням бізнес-процесу створіть нову гілку для продовження процесу.

Для цього на гілці, що прямує від шлюзу Лабораторія унікальна? (див. Створення XOR-шлюзу "Лабораторія унікальна?") до користувацької задачі Підписати дані лабораторії (див. нижче Створення користувацької задачі для підпису даних) налаштуйте такі параметри:

  1. У полі Id лишіть значення за замовчуванням.

  2. У полі Name вкажіть так.

  3. у полі Condition Type вкажіть Expression.

  4. У полі Expression вкажіть вираз ${submission('checkLabOfficerActivity').formData.hasProp('labUniqueCheckFlag') && submission('checkLabOfficerActivity').formData.prop('labUniqueCheckFlag').value() == true}.

task 5 bp 20

3.1.17. Створення користувацької задачі для підпису даних

Необхідно створити користувацьку задачу для підпису даних. Для цього виконайте наступні кроки:

  1. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task.

  2. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form та натисніть Apply для підтвердження.

  3. Заповніть наступні поля відповідними значеннями:

    • у полі Id вкажіть signLabOfficerActivity;

    • у полі Name введіть Підписати дані лабораторії;

    • у полі Form key введіть shared-officer-sign-lab;

    • у полі Assignee вкажіть ${officerAssignee};

    • у полі Form data pre-population введіть ${submission('checkLabOfficerActivity').formData}.

    task 5 bp 21

3.1.18. Створення задачі скриптування "Підготовка даних до запису (transient var)"

Створіть нову задачу скриптування для підготовки даних до запису_. Для цього виконайте подальші налаштування:

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

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування).

  3. Виділіть додану задачу скриптування та налаштуйте наступні параметри:

    • у полі Name вкажіть Підготовка даних для запису (transient var);

    • у полі Script Format вкажіть тип (мову) скриптування — groovy;

    • у полі Script Type вкажіть тип скрипту InlineScript;

    • у полі Script вставте безпосередньо groovy-скрипт:

      Натисніть, щоб розгорнути або згорнути
      def signedFormData = submission('signLabOfficerActivity').formData
      
      signedFormData.prop('oblast', signedFormData.prop('oblast').prop('code'))
      
      signedFormData.prop('koatuuId', signedFormData.prop('koatuu').prop('koatuuId'))
      signedFormData.deleteProp('koatuu')
      signedFormData.prop('ownershipId', signedFormData.prop('ownership').prop('ownershipId'))
      signedFormData.deleteProp('ownership')
      
      if(signedFormData.hasProp('premisesFile') && !signedFormData.prop('premisesFile').isNull() &&
      !signedFormData.prop('premisesFile').elements().isEmpty()) {
      signedFormData.prop('premisesFile', signedFormData.prop('premisesFile').elements()[0])
      } else {
      signedFormData.prop('premisesFile', null as String)
      }
      
      if(signedFormData.hasProp('accreditationFile') && !signedFormData.prop('accreditationFile').isNull() && !signedFormData.prop('accreditationFile').elements().isEmpty()) {
      signedFormData.prop('accreditationFile', signedFormData.prop('accreditationFile').elements()[0])
      } else {
      signedFormData.prop('accreditationFile', null as String)
      }
      
      
      execution.removeVariable('dataPayload')
      set_transient_variable('dataPayload', signedFormData)

    task 5 bp 22

3.1.19. Моделювання сервісної задачі для підпису даних системним ключем

Створіть сервісну задачу (Service Task) для підпису даних системним ключем та налаштуйте відповідне інтеграційне розширення. Для цього виконайте кроки, подані нижче:

  1. Оберіть прямокутник зі скриптовою задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task.

  3. На панелі налаштувань справа натисніть Open Catalog, щоб відкрити список доступних шаблонів делегатів.

    task 5 bp 23

  4. З отриманого переліку оберіть шаблон System signature by DSO service, який необхідно використовувати для підписання даних системним ключем.

    task 5 bp 24

  5. На панелі налаштувань справа, відкрийте вкладку General та сконфігуруйте параметри делегата:

    • у полі Name вкажіть назву задачі — "Підписати дані системним ключем";

    • у полі Payload передайте дані, на які треба накласти системний підпис — ${dataPayload};

      • у полі X-Access-Token source передайте токен доступу особи, яка наразі виконує задачу з ID 'signLabOfficerActivity' — ${completer('signLabOfficerActivity').accessToken};

        Після відпрацювання першої користувацької задачі (User Task), намагайтеся використовувати функцію completer('<task_id>') для отримання даних користувача, замість initiator().

        Токен доступу береться з АБО ініціатора (наприклад, $initiator().accessToken}), АБО виконавця останньої користувацької задачі (наприклад, ${completer('taskDefinitionId').accessToken}).

        JWT-токен має свій термін дії, який триває 300 секунд. Якщо вказати токен ініціатора, який запустив бізнес-процес, а користувач довго не виконував задачу, то термін дії токена спливе, й бізнес-процес необхідно буде запускати повторно.

        Детальніше про JUEL-функції ви можете переглянути на сторінці JUEL-функції у бізнес-процесах.

      • у полі Result variable зазначте назву змінної, до якої запишеться цифровий підпис вказаних даних — system_signature_ceph_key.

    task 5 bp 24 1

3.1.20. Створення сервісної задачі "Зберегти дані до Фабрики даних"

На цьому кроці необхідно створити та налаштувати нову сервісну задачу для збереження даних до Дата-фабрики. Для цього виконайте кроки, зазначені нижче:

  1. Оберіть прямокутник зі створеною на попередньому етапі задачею Call Activity та створіть нову сервісну задачу Зберегти дані до Фабрики даних, натиснувши іконку ключа та обравши з меню пункт Service Task.

  2. Натисніть Open Catalog, оберіть шаблон Create entity in data factory та натисніть Apply для підтвердження.

  3. На панелі налаштувань справа сконфігуруйте наступні параметри:

    • у полі Name введіть Зберегти дані до Фабрики даних;

    • у полі Resource вкажіть laboratory;

    • у полі Payload введіть ${dataPayload};

    • у полі X-Access-Token введіть ${completer('signLabOfficerActivity').accessToken};

      Після відпрацювання першої користувацької задачі (User Task), намагайтеся використовувати функцію completer('<task_id>') для отримання даних користувача, замість initiator().

      Токен доступу береться з АБО ініціатора (наприклад, $initiator().accessToken}), АБО виконавця останньої користувацької задачі (наприклад, ${completer('taskDefinitionId').accessToken}).

      JWT-токен має свій термін дії, який триває 300 секунд. Якщо вказати токен ініціатора, який запустив бізнес-процес, а користувач довго не виконував задачу, то термін дії токена спливе, й бізнес-процес необхідно буде запускати повторно.

      Детальніше про JUEL-функції ви можете переглянути на сторінці JUEL-функції у бізнес-процесах.

    • у полі X-Digital-Signature source введіть ${sign_submission('signLabOfficerActivity').signatureDocumentId};

    • у полі X-Digital-Signature-Derived source введіть ${system_signature_ceph_key};

    • у полі Result Variable вкажіть response.

    task 5 bp 25

3.1.21. Створення події для опрацювання помилки

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

  1. Перетягніть Intermediate/Boundary event з панелі інструментів та прикріпіть його до Service Task "Зберегти дані в Дата-фабрику".

    task 5 bp error boundary branch 1

  2. Визначте тип події як Error Boundary Event (Проміжна гранична подія "Помилка").

    task 5 bp error boundary branch 2

  3. Створіть Gateway (шлюз), який буде виконувати роль контрольної точки для перенаправлення у випадку виникнення помилки.

    task 5 bp error boundary branch 3

  4. Додайте логіку опрацювання помилки за допомогою з’єднання Error Boundary Event та Gateway.

    Це буде означати, що при виникненні помилки на етапі "Збереження даних в Дата-фабрику" ми автоматично повернемося до контрольної точки, звідки заново почнеться виконання процесу.

    task 5 bp error boundary branch 4

Компоненти моделювання "Дата Фабрика" та усі пунктирні лінії носять виключно інформаційний характер. Прикладу їх створення в інструкції немає, але можете додати їх самостійно за бажанням.

3.1.22. Створення сервісної задачі для встановлення результату бізнес-процесу

На прикладі Завдання 3 змоделюйте нову сервісну задачу, що встановлюватиме результат бізнес-процесу. Для цього виконайте кроки, подані нижче:

  1. Оберіть прямокутник із сервісною задачею, створеною на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.

  2. Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task.

  3. Натисніть Open Catalog, оберіть шаблон Define business process status та натисніть Apply для підтвердження.

  4. На панелі налаштувань справа сконфігуруйте наступні параметри:

    • у полі Name вкажіть Результат виконання "Лабораторія створена";

    • у полі Status вкажіть Лабораторія створена.

    task 5 bp 26

3.1.23. Створення події завершення бізнес-процесу

На цьому етапі необхідно створити подію, яка завершуватиме бізнес-процес.

  1. На прикладі Завдання 3 приєднайте та налаштуйте подію завершення бізнес-процесу.

  2. На панелі налаштувань справа для параметра Name вкажіть значення Лабораторія створена.

    task 3 26 bp

В результаті маємо змодельований бізнес-процес для використання декількома учасниками та з викликом зовнішнього підпроцесу Call Activity.

3.1.24. Збереження змодельованої схеми бізнес-процесу

Після завершення процесу моделювання збережіть отриману схему бізнес-процесу із назвою citizen-add-lab.bpmn до регламентної папки bpmn проєкту в Gerrit-репозиторії. Для цього у лівому верхньому куті відкрийте меню File > Save File As.., введіть відповідну назву та шлях.

3.2. Моделювання UI-форм для бізнес-процесу

На етапі моделювання форм необхідно створити та прив’язати JSON-форми до попередньо змодельованих задач в рамках бізнес-процесу.

Форми прив’язуються до бізнес-процесів за службовою назвою.

Використовуйте файли shared-officer-sign-lab.json, shared-officer-check-lab.json, shared-dispatch-task.json, shared-citizen-sign-lab.json, citizen-add-lab-bp-add-lab.json зі змодельованими формами для прикладу.

3.2.1. Створення форми для внесення даних

Змоделюйте форму для внесення даних користувачем, використовуючи приклад із Завдання 3.
  1. Увійдіть до застосунку Кабінет адміністратора регламентів.

    admin portal form modeling step 1

    За замовчуванням користувач опиняється на домашній сторінці Огляд версії майстер-версії регламенту.

    new admin portal 1

    Детальніше про майстер-версію регламенту ви можете переглянути за посиланням:

    Майстер-версія змін до регламенту реєстру дозволяє працювати з UI-формами лише у режимі перегляду.

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

  2. Створіть новий запит на внесення змін до регламенту, тобто створіть нову версію-кандидат на внесення змін.

    task 5 forms new change request

    АБО

    Оберіть наявну версію-кандидат на внесення змін.

    task 5 forms new change request 1

    Детальніше про створення та перегляд запитів на внесення змін до регламенту ви можете переглянути за посиланнями:

  3. В рамках своєї версії-кандидата перейдіть до розділу UI-форми.

    task 5 forms overview

  4. Скопіюйте форму add-lab-bp-add-lab, змодельовану в рамках Завдання 3, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону.

    task 3 49 forms

  5. У новому вікні, на вкладці Загальна введіть бізнес-назву форми — Внести дані про лабораторію. Назва відповідає бізнес-назві змодельованої користувацької задачі addLabCitizenActivity.

  6. Заповніть поле Службова назва форми значенням citizen-add-lab-bp-add-lab (відповідає значенню поля Form key тієї ж користувацької задачі addLabCitizenActivity);

    task 5 forms 2

  7. Перейдіть на вкладку Конструктор.

    • У компонентах "Область", "Назва населеного пункту", та "Форма власності", на вкладці Data у полі Data Source type URL видаліть /officer.

    task 5 forms 2 1

    • Переконайтеся, що остаточний вигляд компонентів є наступним:

      • компонент "Область" — /api/data-factory/koatuu-obl-contains-name;

      • компонент "Назва населеного пункту" — /api/data-factory/koatuu-np-starts-with-name-by-obl;

      • компонент "Форма власності" — /api/data-factory/ownership-contains-name.

  8. Збережіть форму, натиснувши кнопку Зберегти зміни у правому верхньому куті.

    task 5 forms 3

3.2.2. Моделювання форми підпису даних отримувачем послуг реєстру

Після завершення попереднього етапу зі створенням форми для внесення даних, створіть ще одну форму — для підпису даних.

Змоделюйте форму для внесення даних користувачем, використовуючи приклад із Завдання 3.
  1. Скопіюйте UI-форму для внесення даних про лабораторію, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону.

  2. Увійдіть до режиму редагування форми та перейдіть на вкладку Загальна.

  3. У полі Бізнес-назва форми введіть назву відповідної користувацької задачі Підписати дані про лабораторію (signLabCitizenActivity);

  4. Заповніть поле Службова назва форми значенням shared-citizen-sign-lab (відповідає значенню поля Form key тієї ж користувацької задачі signLabCitizenActivity).

    task 5 forms 4

  5. Перейдіть на вкладку Конструктор та у налаштуваннях кожного компонента виконайте наступне:

    • На вкладці Display встановіть прапорець для параметра Disabled.

    • Натисніть кнопку Save для збереження змін.

      task 5 forms 4 01

      task 3 50 forms

  6. Перейдіть на вкладку Перегляд. Тут ви можете побачити, як виглядатиме форма в інтерфейсі користувачів. Усі поля є неактивними.

    task 5 forms 4 1

  7. Збережіть форму, натиснувши кнопку Зберегти зміни у правому верхньому куті.

3.3. Моделювання форм за допомогою formVariables

3.3.1. Моделювання форми призначення виконавця задачі

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

    task 5 forms overview

  2. Щоб створити нову форму для бізнес-процесу, натисніть кнопку Створити нову форму:

    task 5 forms overview 1

    task 5 forms 5

  3. Перейдіть на вкладку Конструктор та виконайте моделювання форми за допомогою компонентів.

    task 5 forms 5 1

  4. З панелі компонентів зліва перетягніть компонент Select до панелі моделювання та виконайте подальші налаштування компонента:

    task 3 37 forms drag select

    • Перейдіть на вкладку Display та заповніть поле Label значенням Оберіть ПІБ виконавця:

      task 5 forms 6

    • Перейдіть на вкладку API та заповніть поле Property Name значенням userTaskAssignee:

      task 5 forms 7

    • Перейдіть на вкладку Data та налаштуйте наступні параметри:

      • у полі Data source type введіть Custom;

      • у полі Id Path вкажіть userName;

      • у полі Custom Values вкажіть values = formVariables.officerUsers;

      • у полі Item Template введіть <span>{{ item.fullName }}</span>.

    • Натисніть кнопку Save для збереження.

      task 5 forms 8

  5. Збережіть форму, натиснувши кнопку Створити форму у правому верхньому куті:

    task 5 forms 9

3.3.2. Моделювання форми перевірки даних посадовою особою

Змоделюйте форму для можливості перевірки даних посадовою особою. Для цього виконайте наступні кроки:

  1. Скопіюйте форму Призначення виконавця задачі, змодельовану вище, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону:

    • У новому вікні відкрийте вкладку Загальна.

    • У полі Бізнес-назва форми введіть назву Перевірка унікальності запису про лабораторію, що відповідає назві користувацької задачі checkLabOfficerActivity.

    • Заповніть поле Службова назва форми значенням shared-officer-check-lab (має відповідати значенню поля Form key тієї ж користувацької задачі — checkLabOfficerActivity.

    task 5 forms 10

  2. Перейдіть на вкладку Конструктор виконайте моделювання форми за допомогою компонентів.

  3. З панелі компонентів зліва перетягніть компонент Checkbox до панелі моделювання та виконайте подальші налаштування:

    • Перейдіть на вкладку Display та заповніть поле Label значенням Лабораторія не дублюється:

      task 5 forms 11

    • Перейдіть на вкладку API та заповніть поле Property Name значенням labUniqueCheckFlag.

    • Натисніть кнопку Save для збереження змін:

      task 5 forms 12

  4. Збережіть форму, натиснувши кнопку Створити форму у правому верхньому куті:

    task 5 forms 13

3.3.3. Моделювання форми підпису даних посадовою особою

Змоделюйте форму для можливості підпису даних посадовою особою. Для цього виконайте наступні кроки:

  1. Скопіюйте форму перевірки даних посадовою особою, змодельовану вище, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону:

    • У новому вікні перейдіть до вкладки Загальна.

    • У полі Бізнес-назва форми введіть назву Підписати дані лабораторії, що відповідає назві користувацької задачі signLabOfficerActivity.

    • Заповніть поле Службова назва форми значенням shared-officer-sign-lab (має відповідати значенню поля Form key тієї ж користувацької задачі signLabOfficerActivity.

    task 5 forms 14

  2. Перейдіть на вкладку Конструктор та виконайте наступні налаштування для усіх компонентів форми:

    • Перейдіть на вкладку Display та встановіть прапорець для параметра Disabled — True.

    • Натисніть кнопку Save для збереження.

  3. Збережіть форму, натиснувши кнопку Створити форму у правому верхньому куті.

    task 5 forms 14 1

3.3.4. Завантаження змодельованих форм бізнес-процесу до локальної директорії

Завантажте форми, натиснувши (іконку завантаження) , та помістіть їх до регламентної папки forms проєкту в локальному Gerrit-репозиторії. task 1 14 forms

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

На цьому етапі необхідно надати доступ до бізнес-процесу із Кабінету отримувача послуг.

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

  1. Створіть файл citizen.yml та сконфігуруйте в ньому наступні параметри:

    Приклад. Налаштування доступу до бізнес-процесу із Кабінету отримувача послуг реєстру
    authorization:
      realm: 'citizen'
      process_definitions:
        - process_definition_id: 'citizen-add-lab'
          process_name: 'Процес створення лабораторії'
          process_description: 'Бізнес-процес створення лабораторії отримувачем послуг реєстру'
          roles:
            - 'unregistered-individual'
            - 'unregistered-entrepreneur'
            - 'unregistered-legal'
  2. Збережіть файл до папки bp-auth проєкту.

3.4.1. Створення нової ролі для розподілення задач в Кабінеті посадової особи

  1. Перейдіть до регламентної папки roles, знайдіть файл officer.yml та додайте у ньому до наявних 2 нових параметри:

    Приклад. Додавання параметрів для створення ролі для розподілення задач
      - name: task-dispatcher
        description: Task dispatcher role
  2. Збережіть файл до папки bp-auth проєкту.

3.4.2. Збереження файлів із налаштуваннями доступу

Збережіть файл officer.yml до регламентної папки bp-auth проєкту в локальному Gerrit-репозиторії.

4. Перенесення файлів регламенту до віддаленого репозиторію Gerrit

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

Для цього виконайте кроки з інструкції Процес розгортання регламенту в Gerrit.

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