Завдання 5. Моделювання бізнес-процесу із декількома учасниками
- 1. Мета завдання
- 2. Передумови
- 3. Процес виконання завдання
- 3.1. Моделювання бізнес-процесу
- Чекліст моделювання бізнес-процесу
- 3.1.1. Створення пулу для бізнес-процесу
- 3.1.2. Створення початкової події
- 3.1.3. Створення задачі скриптування "Підготовка даних для показу"
- 3.1.4. Створення користувацької задачі "Додати інформацію про лабораторію"
- 3.1.5. Створення сервісної задачі "Пошук даних про лабораторію (transient var)"
- 3.1.6. Створення та заповнення XOR-шлюзу "Дані присутні?"
- 3.1.7. Створення гілки з валідаційною помилкою
- 3.1.8. Створення гілки з подальшим продовженням бізнес-процесу
- 3.1.9. Створення користувацької задачі для підпису даних
- 3.1.10. Створення сервісної задачі "Отримання користувачів із роллю 'officer' "
- 3.1.11. Створення користувацької задачі "Призначення виконавця задачі "Перевірка документів на відповідність"
- 3.1.12. Створення задачі скриптування "Підготовка даних документа для показу"
- 3.1.13. Створення користувацької задачі "Перевірка унікальности запису про лабораторію"
- 3.1.14. Створення XOR-шлюзу "Лабораторія унікальна?"
- 3.1.15. Створення гілки із негативним результатом бізнес-процесу
- 3.1.16. Створення гілки із подальшим продовженням бізнес-процесу
- 3.1.17. Створення користувацької задачі для підпису даних
- 3.1.18. Створення задачі скриптування "Підготовка даних до запису (transient var)"
- 3.1.19. Моделювання сервісної задачі для підпису даних системним ключем
- 3.1.20. Створення сервісної задачі "Зберегти дані до Фабрики даних"
- 3.1.21. Створення події для опрацювання помилки
- 3.1.22. Створення сервісної задачі для встановлення результату бізнес-процесу
- 3.1.23. Створення події завершення бізнес-процесу
- 3.1.24. Збереження змодельованої схеми бізнес-процесу
- 3.2. Моделювання UI-форм для бізнес-процесу
- 3.3. Моделювання форм за допомогою formVariables
- 3.4. Моделювання доступу до бізнес-процесу
- 3.1. Моделювання бізнес-процесу
- 4. Перенесення файлів регламенту до віддаленого репозиторію Gerrit
- 5. Додатки
| 🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
1. Мета завдання
- Мета завдання:
-
-
навчити моделювати бізнес-процес, що має декількох учасників.
-
навчити моделювати форми та налаштовувати їх за допомогою formVariables.
-
- В рамках цього завдання моделювальники мають:
-
-
змоделювати 1 бізнес-процес;
-
змоделювати 5 форм внесення даних до бізнес-процесу;
-
створити ролі, необхідні для функціонування у бізнес-процесі;
-
надати доступи до бізнес-процесу для відповідних ролей;
-
зберегти створені артефакти до локального git-репозиторію;
-
перенести локальні зміни до віддаленого Gerrit-репозиторію.
-
2. Передумови
Перед проходженням завдання необхідно виконати наступні передумови:
3. Процес виконання завдання
3.1. Моделювання бізнес-процесу
|
На етапі моделювання бізнес-процесу необхідно створити та зберегти відповідну BPMN-діаграму. Використовуйте файл citizen-add-lab.bpmn із готовою схемою бізнес-процесу як приклад. |
Чекліст моделювання бізнес-процесу
Використовуйте наведений чекліст із переліком кроків для створення бізнес-процесу:
-
Створення користувацької задачі "Додати інформацію про лабораторію"
-
Створення сервісної задачі "Пошук даних про лабораторію (transient var)"
-
Створення сервісної задачі "Отримання користувачів із роллю 'officer' "
-
Створення задачі скриптування "Підготовка даних документа для показу"
-
Створення користувацької задачі "Перевірка унікальности запису про лабораторію"
-
Створення задачі скриптування "Підготовка даних до запису (transient var)"
-
Моделювання сервісної задачі для підпису даних системним ключем
-
Створення сервісної задачі для встановлення результату бізнес-процесу
| Важливо! Після проходження всіх етапів, не забудьте зберегти змодельовану схему бізнес-процесу до відповідної папки з регламентом реєстру (див. Збереження змодельованої схеми бізнес-процесу) |
3.1.1. Створення пулу для бізнес-процесу
Найперше, змоделюйте пул для бізнес-процесу. Для цього виконайте кроки, подані нижче:
| Моделювання діаграми бізнес-процесу має відбуватися в рамках елемента Create Pool/Participant. |
-
Відкрийте додаток Camunda Modeler та створіть нову діаграму BPMN. Для цього у лівому верхньому куті натисніть меню File → New File → BPMN Diagram:

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

-
Заповніть наступні поля відповідними значеннями:
-
у полі
Nameвведіть значенняСтворення лабораторії; -
у полі
Process idвкажітьcitizen-add-lab; -
у полі
Process nameвкажітьПроцес створення лабораторії:

-
3.1.2. Створення початкової події
Створіть початкову подію. Для цього виконайте наступні кроки:
-
На панелі інструментів, зліва, знайдіть елемент (коло) CreateStartEvent та перетягніть його до панелі моделювання:
-
На панелі налаштувань справа заповніть наступні параметри відповідними значеннями:
-
у полі
NameвведітьПочаток; -
у полі
Initiatorвведітьinitiator.

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

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

-
Виділіть додану задачу скриптування та налаштуйте наступні параметри:
-
у полі
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'))
-
3.1.4. Створення користувацької задачі "Додати інформацію про лабораторію"
На цьому етапі необхідно змоделювати користувацьку задачу Додати інформацію про лабораторію.
На прикладі Завдання 3 створіть користувацьку задачу, призначену для внесення даних користувачем. Для цього виконайте наступні кроки:
-
Оберіть прямокутник із задачею скриптування, змодельованою на попередньому етапі, та приєднайте нову задачу.
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон User Form із каталогу та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
IdзазначтеaddLabCitizenActivity; -
у полі
NameвведітьДодати інформацію про лабораторію; -
у полі
Form keyвведітьcitizen-add-lab-bp-add-lab; -
у полі
Assigneeвкажіть${initiator}; -
у полі
Form data pre-populationвкажіть${payload}.

-
3.1.5. Створення сервісної задачі "Пошук даних про лабораторію (transient var)"
На цьому етапі необхідно створити сервісну задачу Пошук даних про лабораторію (transient var).
На прикладі Завдання 3 змоделюйте сервісну задачу для пошуку даних про лабораторію. Для цього виконайте наступні кроки:
-
Оберіть прямокутник із користувацькою задачею
Додати інформацію про лабораторію, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task. -
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон Search for entities in data factory (Пошук значень у фабриці даних) та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
Nameмає бути вказаноПошук даних про лабораторію (transient var); -
у розділі Input Parameters → Resource зазначте наступне:
-
у полі
Variable Assignment TypeвкажітьString or Expression; -
у полі
Variable Assignment Valueвкажітьlaboratory-equal-edrpou-name-count;

-
-
у розділі Input Parameters → Search 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()}
-
-
у розділі Input Parameters → X-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-функції ви можете переглянути на сторінці registry-develop:bp-modeling/bp/modeling-facilitation/modelling-with-juel-functions.adoc.
-
-
У розділі Output Parameters → Result Variable параметр
Assign to Process Variableзаповніть значеннямresponse:

-
3.1.6. Створення та заповнення XOR-шлюзу "Дані присутні?"
На прикладі Завдання 3 приєднайте XOR-шлюз. Для цього виконайте кроки, подані нижче:
-
Оберіть прямокутник із сервісною задачею
Пошук даних про лабораторію (transient var), змодельованою на попередньому етапі, та приєднайте XOR-шлюз, натиснувши іконку Append Gateway. -
На панелі налаштувань справа, у полі
Nameвкажіть назву шлюзу —Дані присутні?.
3.1.7. Створення гілки з валідаційною помилкою
На прикладі Завдання 3 створіть гілку з валідаційною помилкою. Для цього виконайте кроки, подані нижче:
-
Оберіть ромб із XOR-шлюзом
Дані присутні?, змодельованим на попередньому етапі, та створіть нову сервісну задачу, натиснувши іконку Append Task. -
Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).
-
Натисніть
Open Catalog, оберіть шаблон Throw validation error та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
NameвведітьФормування валідаційної помилки. -
У розділі Input Parameters → Validation Errors зазначте наступне:
-
у полі
Variable Assignment Typeвкажіть типList; -
для поля
Valueдодайте наступне значення:Значення{"field": "name", "value": "${submission('addLabCitizenActivity').formData.prop('name').stringValue().replaceAll("\"", "\\\\\"")}", "message": "Дані про цю лабораторію вже присутні"}
-

-
-
На гілці, що прямує від шлюзу
Дані присутні?до сервісної задачіФормування валідаційної помилки, потрібно налаштувати наступне:-
у полі
Nameвведітьтак; -
у полі
Condition Typeвведіть типExpression; -
у полі
Expressionвведіть${!response.value.responseBody.elements().isEmpty()}.

-
3.1.8. Створення гілки з подальшим продовженням бізнес-процесу
На прикладі Завдання 3 необхідно створити гілку, що продовжить бізнес-процес.
Для цього на гілці, що прямує від шлюзу Дані присутні? до користувацької задачі Підписати дані про лабораторію (див. нижче Створення користувацької задачі для підпису даних) налаштуйте такі параметри:
-
У полі
Idлишіть значення за замовчуванням. -
У полі
Nameвкажітьні. -
у полі
Condition TypeвкажітьExpression. -
У полі
Expressionвкажіть${response.value.responseBody.elements().isEmpty()}.
3.1.9. Створення користувацької задачі для підпису даних
На прикладі Завдання 3 необхідно створити користувацьку задачу для підпису даних. Для цього виконайте наступні кроки:
-
Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).
-
Натисніть
Open Catalog, оберіть шаблон Citizen Sign Task та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
IdвкажітьsignLabCitizenActivity; -
у полі
NameвведітьПідписати дані про лабораторію; -
у полі
Form keyвведітьshared-citizen-sign-lab; -
у полі
Assigneeвкажіть${initiator}; -
у полі
Form data pre-populationвведіть${submission('addLabCitizenActivity').formData}.
-
поле
INDIVIDUALзалиште у значенніdisabled(за замовчуванням); -
для поля
ENTREPRENEURоберіть значенняenabled; -
для поля
LEGALоберіть значення —enabled.
-
3.1.10. Створення сервісної задачі "Отримання користувачів із роллю 'officer' "
На прикладі Створення сервісної задачі "Пошук даних про лабораторію (transient var)" необхідно створити сервісну задачу для отримання користувачів із роллю "Посадова особа" із сервісу управління ідентифікацію та доступом Keycloak. Для цього виконайте наступні кроки:
-
Оберіть прямокутник із користувацькою задачею
Підписати дані про лабораторію, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task. -
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон Get users by role from keycloak (Отримання користувачів у Keycloak за роллю) та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
NameвведітьОтримання користувачів з роллю 'officer'; -
у полі
Result VariableвкажітьofficerUsers.

-
3.1.11. Створення користувацької задачі "Призначення виконавця задачі "Перевірка документів на відповідність"
На прикладі Створення користувацької задачі для підпису даних необхідно створити користувацьку задачу, що дозволить призначати виконавця іншої задачі. Для цього виконайте наступні кроки:
-
Оберіть прямокутник із користувацькою задачею
Отримання користувачів із роллю 'officer', змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task. -
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон User Form та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
IdвведітьdispatchTaskActivity; -
у полі
NameвведітьПризначення виконавця задачі "Перевірка документів на відповідність"; -
у полі
Form keyвкажітьshared-dispatch-task; -
у полі
Assigneeвкажіть ${initiator}; -
у полі
Candidate rolesвведіть значенняtask-dispatcher— роль, для якої буде доступна ця задача; -
у полі
Form variablesвкажітьofficerUsers— змінну, що буде передана на форму.

-
3.1.12. Створення задачі скриптування "Підготовка даних документа для показу"
На прикладі Створення задачі скриптування "Підготовка даних для показу" змоделюйте та приєднайте нову задачу скриптування. Для цього виконайте наступні кроки:
-
Оберіть прямокутник із користувацькою задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування).
-
Виділіть додану задачу скриптування та налаштуйте наступні параметри:
-
у полі
NameвкажітьПідготовка даних документа для показу; -
у полі
Script Formatвкажіть тип (мову) скриптування —groovy; -
у полі
Script Typeвкажіть тип скриптуInlineScript; -
у полі
Scriptвставте безпосередньо groovy-скрипт:Натисніть, щоб розгорнути або згорнути
execution.removeVariable('officerAssignee') set_variable('officerAssignee', submission('dispatchTaskActivity').formData.prop('userTaskAssignee').prop('userName').value())

-
3.1.13. Створення користувацької задачі "Перевірка унікальности запису про лабораторію"
На прикладі Створення користувацької задачі "Призначення виконавця задачі "Перевірка документів на відповідність" створіть нову користувацьку задачу для перевірки унікальності запису про лабораторію. Для цього виконайте кроки, подані нижче:
-
Оберіть прямокутник зі скрипт-задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон User Form та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
IdвведітьcheckLabOfficerActivity; -
у полі
NameвведітьПеревірка унікальности запису про лабораторію; -
у полі
Form keyвкажітьshared-officer-check-lab; -
у полі
Assigneeвведіть${officerAssignee}; -
у полі
Form data pre-populationвкажіть${submission('signLabCitizenActivity').formData}.

-
3.1.14. Створення XOR-шлюзу "Лабораторія унікальна?"
На прикладі Створення та заповнення XOR-шлюзу "Дані присутні?" змоделюйте та приєднайте новий XOR-шлюз. Для цього виконайте кроки, подані нижче:
-
Оберіть прямокутник із користувацькою задачею, змодельованою на попередньому етапі, та приєднайте XOR-шлюз, натиснувши іконку Append Gateway.
-
На панелі налаштувань справа, у полі
Nameвкажіть назву шлюзу —Лабораторія Унікальна? labUniqueCheckFlag.

3.1.15. Створення гілки із негативним результатом бізнес-процесу
На прикладі Створення гілки з валідаційною помилкою створіть нову гілку із негативним результатом бізнес-процесу. Для цього виконайте кроки, подані нижче:
-
Оберіть ромб із XOR-шлюзом
Лабораторія унікальна?, змодельованим на попередньому етапі, та створіть нову сервісну задачу, натиснувши іконку Append Task. -
Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task (Сервісна задача).
-
Натисніть
Open Catalog, оберіть шаблон Define business process status та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа заповніть наступні поля:
-
у полі
Nameвведіть значенняРезультат виконання "Лабораторія не створена - Дублікат"; -
у полі
StatusвведітьЛабораторія не створена - Така лабораторія вже існує.

-
-
Виділіть гілку, що прямує до сервісної задачі
"Результат виконання "Лабораторія не створена - Дублікат"та налаштуйте такі параметри:-
у полі
Nameвведіть значенняні; -
у полі
Condition TypeтипExpression; -
у полі
Expressionвкажіть вираз${!submission('checkLabOfficerActivity').formData.hasProp('labUniqueCheckFlag') || submission('checkLabOfficerActivity').formData.prop('labUniqueCheckFlag').value() == false}.

-
3.1.16. Створення гілки із подальшим продовженням бізнес-процесу
На прикладі Створення гілки з подальшим продовженням бізнес-процесу створіть нову гілку для продовження процесу.
Для цього на гілці, що прямує від шлюзу Лабораторія унікальна? (див. Створення XOR-шлюзу "Лабораторія унікальна?") до користувацької задачі Підписати дані лабораторії (див. нижче Створення користувацької задачі для підпису даних) налаштуйте такі параметри:
-
У полі
Idлишіть значення за замовчуванням. -
У полі
Nameвкажітьтак. -
у полі
Condition TypeвкажітьExpression. -
У полі
Expressionвкажіть вираз${submission('checkLabOfficerActivity').formData.hasProp('labUniqueCheckFlag') && submission('checkLabOfficerActivity').formData.prop('labUniqueCheckFlag').value() == true}.

3.1.17. Створення користувацької задачі для підпису даних
Необхідно створити користувацьку задачу для підпису даних. Для цього виконайте наступні кроки:
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт User Task.
-
На панелі налаштувань справа натисніть
Open Catalog, оберіть шаблон User Form та натиснітьApplyдля підтвердження. -
Заповніть наступні поля відповідними значеннями:
-
у полі
IdвкажітьsignLabOfficerActivity; -
у полі
NameвведітьПідписати дані лабораторії; -
у полі
Form keyвведітьshared-officer-sign-lab; -
у полі
Assigneeвкажіть${officerAssignee}; -
у полі
Form data pre-populationвведіть${submission('checkLabOfficerActivity').formData}.

-
3.1.18. Створення задачі скриптування "Підготовка даних до запису (transient var)"
Створіть нову задачу скриптування для підготовки даних до запису_. Для цього виконайте подальші налаштування:
-
Оберіть прямокутник із користувацькою задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування).
-
Виділіть додану задачу скриптування та налаштуйте наступні параметри:
-
у полі
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)

-
3.1.19. Моделювання сервісної задачі для підпису даних системним ключем
Створіть сервісну задачу (Service Task) для підпису даних системним ключем та налаштуйте відповідне інтеграційне розширення. Для цього виконайте кроки, подані нижче:
-
Оберіть прямокутник зі скриптовою задачею, змодельованою на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.
-
Вкажіть тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task.
-
На панелі налаштувань справа натисніть
Open Catalog, щоб відкрити список доступних шаблонів делегатів.
-
З отриманого переліку оберіть шаблон System signature by DSO service, який необхідно використовувати для підписання даних системним ключем.

-
На панелі налаштувань справа, відкрийте вкладку 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-функції ви можете переглянути на сторінці registry-develop:bp-modeling/bp/modeling-facilitation/modelling-with-juel-functions.adoc.
-
у полі
Result variableзазначте назву змінної, до якої запишеться цифровий підпис вказаних даних —system_signature_ceph_key.
-

-
3.1.20. Створення сервісної задачі "Зберегти дані до Фабрики даних"
На цьому кроці необхідно створити та налаштувати нову сервісну задачу для збереження даних до Дата-фабрики. Для цього виконайте кроки, зазначені нижче:
-
Оберіть прямокутник зі створеною на попередньому етапі задачею Call Activity та створіть нову сервісну задачу
Зберегти дані до Фабрики даних, натиснувши іконку ключа та обравши з меню пункт Service Task. -
Натисніть
Open Catalog, оберіть шаблон Create entity in data factory та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа сконфігуруйте наступні параметри:
-
у полі
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-функції ви можете переглянути на сторінці registry-develop:bp-modeling/bp/modeling-facilitation/modelling-with-juel-functions.adoc.
-
у полі
X-Digital-Signature sourceвведіть${sign_submission('signLabOfficerActivity').signatureDocumentId}; -
у полі
X-Digital-Signature-Derived sourceвведіть${system_signature_ceph_key}; -
у полі
Result Variableвкажітьresponse.

-
3.1.21. Створення події для опрацювання помилки
На цьому етапі необхідно змоделювати та налаштувати проміжну граничну подію для опрацювання сценарію із виникненням передбачених помилок. Для цього виконайте кроки, подані нижче:
-
Перетягніть Intermediate/Boundary event з панелі інструментів та прикріпіть його до Service Task "Зберегти дані в Дата-фабрику".

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

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

-
Додайте логіку опрацювання помилки за допомогою з’єднання Error Boundary Event та Gateway.
Це буде означати, що при виникненні помилки на етапі "Збереження даних в Дата-фабрику" ми автоматично повернемося до контрольної точки, звідки заново почнеться виконання процесу. 
| Компоненти моделювання "Дата Фабрика" та усі пунктирні лінії носять виключно інформаційний характер. Прикладу їх створення в інструкції немає, але можете додати їх самостійно за бажанням. |
3.1.22. Створення сервісної задачі для встановлення результату бізнес-процесу
На прикладі Завдання 3 змоделюйте нову сервісну задачу, що встановлюватиме результат бізнес-процесу. Для цього виконайте кроки, подані нижче:
-
Оберіть прямокутник із сервісною задачею, створеною на попередньому етапі, та приєднайте нову задачу, натиснувши іконку Append Task.
-
Визначте тип задачі, натиснувши іконку ключа та обравши з меню пункт Service Task.
-
Натисніть
Open Catalog, оберіть шаблон Define business process status та натиснітьApplyдля підтвердження. -
На панелі налаштувань справа сконфігуруйте наступні параметри:
-
у полі
NameвкажітьРезультат виконання "Лабораторія створена"; -
у полі
StatusвкажітьЛабораторія створена.

-
3.1.23. Створення події завершення бізнес-процесу
На цьому етапі необхідно створити подію, яка завершуватиме бізнес-процес.
-
На прикладі Завдання 3 приєднайте та налаштуйте подію завершення бізнес-процесу.
-
На панелі налаштувань справа для параметра
Nameвкажіть значенняЛабораторія створена.
| В результаті маємо змодельований бізнес-процес для використання декількома учасниками та з викликом зовнішнього підпроцесу 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 зі змодельованими формами для прикладу. |
Чекліст моделювання UI-форм
- Використовуйте наведений чекліст із переліком кроків для створення форм:
| Після проходження всіх етапів, завантажте та збережіть файли зі схемами форм до відповідної папки з регламентом реєстру (див. Завантаження змодельованих форм бізнес-процесу до локальної директорії) |
3.2.1. Створення форми для внесення даних
| Змоделюйте форму для внесення даних користувачем, використовуючи приклад із Завдання 3. |
-
Увійдіть до застосунку Кабінет адміністратора регламентів.
За замовчуванням користувач опиняється на домашній сторінці Огляд версії майстер-версії регламенту.

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

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

Детальніше про створення та перегляд запитів на внесення змін до регламенту ви можете переглянути за посиланнями:
-
В рамках своєї версії-кандидата перейдіть до розділу UI-форми.

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

-
У новому вікні, на вкладці Загальна введіть бізнес-назву форми —
Внести дані про лабораторію. Назва відповідає бізнес-назві змодельованої користувацької задачіaddLabCitizenActivity. -
Заповніть поле
Службова назва формизначеннямcitizen-add-lab-bp-add-lab(відповідає значенню поляForm keyтієї ж користувацької задачіaddLabCitizenActivity);
-
Перейдіть на вкладку Конструктор.
-
У компонентах "Область", "Назва населеного пункту", та "Форма власності", на вкладці Data у полі
Data Source type URLвидаліть/officer.

-
Переконайтеся, що остаточний вигляд компонентів є наступним:
-
компонент "Область" —
/api/data-factory/koatuu-obl-contains-name; -
компонент "Назва населеного пункту" —
/api/data-factory/koatuu-np-starts-with-name-by-obl; -
компонент "Форма власності" —
/api/data-factory/ownership-contains-name.
-
-
-
Збережіть форму, натиснувши кнопку
Зберегти зміниу правому верхньому куті.
3.2.2. Моделювання форми підпису даних отримувачем послуг реєстру
Після завершення попереднього етапу зі створенням форми для внесення даних, створіть ще одну форму — для підпису даних.
| Змоделюйте форму для внесення даних користувачем, використовуючи приклад із Завдання 3. |
-
Скопіюйте UI-форму для внесення даних про лабораторію, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону.
-
Увійдіть до режиму редагування форми та перейдіть на вкладку Загальна.
-
У полі
Бізнес-назва формивведіть назву відповідної користувацької задачіПідписати дані про лабораторію(signLabCitizenActivity); -
Заповніть поле
Службова назва формизначеннямshared-citizen-sign-lab(відповідає значенню поляForm keyтієї ж користувацької задачіsignLabCitizenActivity).
-
Перейдіть на вкладку Конструктор та у налаштуваннях кожного компонента виконайте наступне:
-
На вкладці Display встановіть прапорець для параметра Disabled.
-
Натисніть кнопку
Saveдля збереження змін.

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

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

-
Щоб створити нову форму для бізнес-процесу, натисніть кнопку
Створити нову форму:
-
У новому вікні, у полі
Бізнес-назва формивкажіть назву, що відповідає назві змодельованої користувацької задачі —Призначення виконавця задачі(dispatchTaskActivity). -
Заповніть поле
Службова назва формизначеннямshared-dispatch-task(має відповідати значенню поляForm keyтієї ж користувацької задачіПризначення виконавця задачі(dispatchTaskActivity).

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

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

-
Перейдіть на вкладку Display та заповніть поле
LabelзначеннямОберіть ПІБ виконавця:
-
Перейдіть на вкладку API та заповніть поле
Property NameзначеннямuserTaskAssignee:
-
Перейдіть на вкладку Data та налаштуйте наступні параметри:
-
у полі
Data source typeвведітьCustom; -
у полі
Id PathвкажітьuserName; -
у полі
Custom Valuesвкажітьvalues = formVariables.officerUsers; -
у полі
Item Templateвведіть<span>{{ item.fullName }}</span>.
-
-
Натисніть кнопку
Saveдля збереження.
-
-
Збережіть форму, натиснувши кнопку
Створити формуу правому верхньому куті:
3.3.2. Моделювання форми перевірки даних посадовою особою
Змоделюйте форму для можливості перевірки даних посадовою особою. Для цього виконайте наступні кроки:
-
Скопіюйте форму Призначення виконавця задачі, змодельовану вище, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону:
-
У новому вікні відкрийте вкладку Загальна.
-
У полі
Бізнес-назва формивведіть назвуПеревірка унікальності запису про лабораторію, що відповідає назві користувацької задачіcheckLabOfficerActivity. -
Заповніть поле
Службова назва формизначеннямshared-officer-check-lab(має відповідати значенню поляForm keyтієї ж користувацької задачі —checkLabOfficerActivity.

-
-
Перейдіть на вкладку Конструктор виконайте моделювання форми за допомогою компонентів.
-
З панелі компонентів зліва перетягніть компонент Checkbox до панелі моделювання та виконайте подальші налаштування:
-
Перейдіть на вкладку Display та заповніть поле
LabelзначеннямЛабораторія не дублюється:
-
Перейдіть на вкладку API та заповніть поле
Property NameзначеннямlabUniqueCheckFlag. -
Натисніть кнопку
Saveдля збереження змін:
-
-
Збережіть форму, натиснувши кнопку
Створити формуу правому верхньому куті:
3.3.3. Моделювання форми підпису даних посадовою особою
Змоделюйте форму для можливості підпису даних посадовою особою. Для цього виконайте наступні кроки:
-
Скопіюйте форму перевірки даних посадовою особою, змодельовану вище, натиснувши іконку копіювання — це дозволить створити форму із готового шаблону:
-
У новому вікні перейдіть до вкладки Загальна.
-
У полі
Бізнес-назва формивведіть назвуПідписати дані лабораторії, що відповідає назві користувацької задачіsignLabOfficerActivity. -
Заповніть поле
Службова назва формизначеннямshared-officer-sign-lab(має відповідати значенню поляForm keyтієї ж користувацької задачіsignLabOfficerActivity.

-
-
Перейдіть на вкладку Конструктор та виконайте наступні налаштування для усіх компонентів форми:
-
Перейдіть на вкладку Display та встановіть прапорець для параметра
Disabled—True. -
Натисніть кнопку
Saveдля збереження.
-
-
Збережіть форму, натиснувши кнопку
Створити формуу правому верхньому куті.
3.3.4. Завантаження змодельованих форм бізнес-процесу до локальної директорії
Завантажте форми, натиснувши ⤓ (іконку завантаження) , та помістіть їх до регламентної папки forms проєкту в локальному Gerrit-репозиторії.

3.4. Моделювання доступу до бізнес-процесу
|
На цьому етапі необхідно надати доступ до бізнес-процесу із Кабінету отримувача послуг. Параметри доступу налаштовуються у конфігураційному файлі, що має назву citizen.yml. |
-
Створіть файл citizen.yml та сконфігуруйте в ньому наступні параметри:
Приклад. Налаштування доступу до бізнес-процесу із Кабінету отримувача послуг реєструauthorization: realm: 'citizen' process_definitions: - process_definition_id: 'citizen-add-lab' process_name: 'Процес створення лабораторії' process_description: 'Бізнес-процес створення лабораторії отримувачем послуг реєстру' roles: - 'unregistered-individual' - 'unregistered-entrepreneur' - 'unregistered-legal' -
Збережіть файл до папки bp-auth проєкту.
3.4.1. Створення нової ролі для розподілення задач в Кабінеті посадової особи
-
Перейдіть до регламентної папки roles, знайдіть файл officer.yml та додайте у ньому до наявних 2 нових параметри:
Приклад. Додавання параметрів для створення ролі для розподілення задач- name: task-dispatcher description: Task dispatcher role -
Збережіть файл до папки bp-auth проєкту.
3.4.2. Збереження файлів із налаштуваннями доступу
Збережіть файл officer.yml до регламентної папки bp-auth проєкту в локальному Gerrit-репозиторії.
4. Перенесення файлів регламенту до віддаленого репозиторію Gerrit
Для успішного розгортання бізнес-процесу, форм, а також застосування правильних налаштувань доступу до бізнес-процесу у цільовому середовищі, адміністратор регламенту має завантажити збережені локально файли регламенту реєстру до віддаленого сховища коду Gerrit.
Для цього виконайте кроки з інструкції Операції з регламентом в Gerrit.
| Після того, як локальні зміни потраплять до регламенту в Gerrit, та після того, як ви переконаєтеся, що все працює коректно, видаліть створену версію-кандидат на внесення змін у Кабінеті адміністратора регламентів. |
5. Додатки
Розділ містить приклади іх готовими артефактами моделювання регламенту, які ви можете використовувати під час виконання цього завдання.