Моделювання бізнес-процесу з формування витягів у форматі csv та docx
| 🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
Опис механізму моделювання бізнес-процесу наведений на прикладі Реєстру атестованих лабораторій, а саме формування витягу "Звіт по лабораторіях у форматі csv". Моделювання бізнес-процесу з витягом у форматі docx є аналогічним, за винятком кроку, де зазначається формат файлу.
| Виконайте необхідні передумови для створення бізнес-процесу, інструкція за посиланням. |
1. Початкові кроки створення бізнес-процесу
-
Створіть нову BPMN-діаграму.

-
Додайте елемент Create pool/Participant.
У правому вікні з параметрами необхідно заповнити поля відповідними значеннями:
-
в полі
Participant Nameвведіть назву пулуФормування звіту по лабораторіям в форматі csv; -
в полі
Process idвведіть ідентифікатор бізнес-процесуzvit-csv-bp; -
в полі
Process nameвкажіть бізнес-назву процесуФормування звіту по лабораторіям в форматі csv.

-
-
Створіть початкову подію для запуску бізнес-процесу користувачем.
На панелі налаштувань справа заповніть наступні параметри відповідними значеннями:
-
на вкладці
General:-
в полі
Idвведіть значенняStartEvent_lab1; -
в полі
Nameвведіть назву початкової подіїСтартова форма; -
в полі
Initiatorвведіть значенняinitiator.initiator— спеціальна змінна, що встановлюється для користувача, який розпочав процес.
-
-
на вкладці
Form:-
в полі
FormKeyвведіть ідентифікатор формиadd-startform-zvit.В полі
FormKeyзазначається службова назва створеної UI-форми в Кабінеті адміністратора регламентів.
На подальших кроках буде розглянуто моделювання стартової форми.
-
-
2. Підготування даних та їх підписання
-
Створіть сервісну задачу "Читання даних по laboratoryId".
Оберіть налаштований шаблон (Template)
Read entity from data factory.Детальніше ознайомитися з описом делегата Читання сутності із фабрики даних (
Read entity from data factory) ви можете за посиланням.На панелі налаштувань вкажіть наступні значення:
-
в полі
Nameвкажіть назву задачіЧитання даних по laboratoryId; -
в полі
Resourceвкажіть ресурсlaboratory; -
в полі
Resource idвведіть ідентифікатор ресурсу${submission('StartEvent_lab1').formData.prop('laboratory').prop('laboratoryId').value()};В нашому випадку ми передаємо ідентифікатор ресурсу
StartEvent_lab1за допомогою функціїsubmission()зі стартової форми бізнес-процесу. -
в полі
X-Access-Tokenвкажіть токен доступу до системи користувача, під яким виконується операція${initiator().accessToken}; -
в полі
Result Variableвкажіть назву для вихідного параметра —labResponse.

-
-
Створіть сервісну задачу "Пошук даних про співробітників".
Оберіть налаштований шаблон (Template)
Search for entities in data factory.Детальніше ознайомитися з описом делегата Пошук сутностей у фабриці даних (
Search for entities in data factory) ви можете за посиланням.На панелі налаштувань вкажіть наступні значення:
-
У полі
Nameвкажіть назву задачіПошук даних про співробітників; -
У розділі
Input Parameters:-
Розгорніть блок
Resource:-
Local Variable Assigmentмає значенняon, це дозволить створити локальну змінну для тіла запита; -
Variable Assignment Typeоберіть з випадного списку тип призначення змінноїString of Expression; -
Variable Assignment Valueвведітьstaff-equal-laboratory-id.staff-equal-laboratory-id— це назва ендпоінту для критерію пошуку куди здійснюється запит для пошуку сутностей.
-
-
Розгорніть блок
Search variable:-
Local Variable Assigmentмає значенняon; -
Variable Assignment TypeвиберітьMap; -
Add Entry→ вKeyзазначтеlaboratoryId, вValueзазначте${submission('StartEvent_lab1').formData.prop('laboratory').prop('laboratoryId').value()}.
-
-
Розгорніть блок
X-Access-Token:-
Local Variable Assigmentмає значенняon; -
Variable Assignment TypeоберітьString of Expression; -
Variable Assignment Valueвведіть значення${initiator().accessToken}.
-
-
-
У розділі
Output Parameters:-
Розгорніть блок
Result variable:-
Local Variable Assigmentмає значенняon; -
Assign to Process Variableвведіть значення змінної до якої буде записано результат запита —staffResponse.
-
-

-
-
Створіть задачу скриптування "Підготовка даних для показу".
На панелі налаштувань вкажіть наступні значення:
-
в полі
Nameвкажіть назвуПідготовка даних для показу; -
в полі
Script Formatвкажіть тип (мову) скриптування —groovy; -
в полі
Script Typeвкажіть тип скриптуInline Script; -
в полі
Scriptвставте безпосередньо groovy-скрипт:def labResponseBody = labResponse.responseBody def payload = [:] def personnelGrid = [] def addPersonPropClosure = { person, staffIt, key -> if (staffIt.hasProp(key)) { if (!staffIt.prop(key).isNull()) { person[key] = staffIt.prop(key).value() } } } staffResponse.responseBody.elements().each { def person = [:] addPersonPropClosure(person, it, 'fullName') addPersonPropClosure(person, it, 'specializationDate') addPersonPropClosure(person, it, 'salary') addPersonPropClosure(person, it, 'hygienistFlag') addPersonPropClosure(person, it, 'fullTimeFlag') personnelGrid.add(person) } payload['name'] = labResponseBody .prop('name').value() payload['edrpou'] = labResponseBody .prop('edrpou').value() payload['address'] = labResponseBody .prop('address').value() payload['headName'] = labResponseBody .prop('headName').value() payload['personnelGrid'] = personnelGrid execution.removeVariable('payload') set_transient_variable('payload', S(payload, 'application/json'))

-
-
Створіть користувацьку задачу "Відобразити дані про персонал".
На панелі налаштувань вкажіть наступні значення:
-
в полі
Idвведіть значенняpersonnelDataZvitForm; -
в полі
Nameвкажіть назвуВідобразити дані про персонал; -
в полі
Form keyвведіть значенняread-personnel-data-zvit;В полі
FormKeyзазначається службова назва створеної UI-форми в Кабінеті адміністратора регламентів.На подальших кроках буде розглянуто моделювання форми відображення даних про персонал.
-
в полі
Assigneeвведіть значення${initiator};${initiator}вказує на те, що бізнес-процес буде призначено користувачеві, що ініціював бізнес-процес. -
в полі
Form data pre-populationвведіть значення${payload}.

-
-
Створіть задачу скриптування "Підготовка даних для запису (transient var)".
На панелі налаштувань вкажіть наступні значення:
-
в полі
Nameвведіть значенняПідготовка даних для запису (transient var); -
в полі
Script Formatвкажіть тип (мову) скриптування —groovy; -
в полі
Script Typeвкажіть тип скриптуInline Script; -
в полі
Scriptвставте безпосередньо groovy-скрипт:def personnelFormData = submission('personnelDataZvitForm').formData def excerptInputData = [:] def requests = [] def prepopulatedDataMap = [:] prepopulatedDataMap['name'] = personnelFormData.prop('name').value() prepopulatedDataMap['address'] = personnelFormData.prop('address').value() prepopulatedDataMap['headName'] = personnelFormData.prop('headName').value() prepopulatedDataMap['edrpou'] = personnelFormData.prop('edrpou').value() personnelFormData.prop('personnelGrid').elements().each { def request = [:] request.putAll(prepopulatedDataMap) it.fieldNames().each { fieldName -> request[fieldName] = it.prop(fieldName).value() } request['hygienistFlag'] = it.prop('hygienistFlag').boolValue() ? '1' : '0' request['fullTimeFlag'] = it.prop('fullTimeFlag').boolValue() ? '1' : '0' requests.add(request) } excerptInputData['requests'] = requests def request = [:] request['recordId'] = null request['excerptType'] = 'lab-staff-excerpt-csv' request['excerptInputData'] = excerptInputData request['requiresSystemSignature'] = false def payload = S(request, 'application/json') execution.removeVariable('payload') set_transient_variable('payload', payload) execution.removeVariable('excerpt') set_transient_variable('excerpt', excerptInputData)

-
-
Додайте сервісну задачу для підпису даних системним ключем.
Детальніше ознайомитися з описом делегата для підпису даних системним ключем ви можете за посиланням.
Оберіть налаштований шаблон (Template) Digital signature by DSO service.
На панелі налаштувань вкажіть наступні значення:
-
У полі Name вкажіть назву задачі
Підпис даних системним ключем. -
У полі Payload введіть дані для підпису —
${payload}. -
У полі X-Access-Token source вкажіть токен доступу користувача, під яким виконується операція —
${initiator().accessToken}. -
У полі Result variable вкажіть назву змінної
system_signature_ceph_key, до якої необхідно зберегти системний ключ для підпису.
-
3. Формування звіту
-
Створіть сервісну задачу "Запит на формування витягу-звіту".
Оберіть налаштований шаблон (Template)
Generate Excerpt.-
в полі
Nameвведіть назвуЗапит на формування витягу-звіту; -
в полі
Excerpt Typeвведіть назву файлу, яким визначено форматlab-staff-excerpt-csv; -
в полі
Excerpt Input Dataвведіть значення${excerpt}; -
в полі
Requires System Signatureвведіть значенняfalse;Можливість підписання даних витягів у форматі .csv і .docx системним ключем відсутня, тому за замовчуванням параметр
Requires System Signatureмає містити значенняfalse. Якщо буде вказано значенняtrue, бізнес-процес не буде працювати. Підписання системним ключем доступно лише для формату .pdf. -
в полі
X-Access-Tokenзазначте токен доступу користувача, під яким виконується операція —${initiator().accessToken}; -
в полі
X-Digital-Signature sourceвкажіть джерело цифрового підпису${sign_submission('StartEvent_lab1').signatureDocumentId}; -
в полі
X-Digital-Signature-Derived sourceвкажіть джерело системного цифрового підпису${system_signature_ceph_key}; -
в полі
Result variableвкажіть назву для вихідного параметраresponse.
Дані, що передаються для генерації витягу
excerptInputDataповинні мати відповідний формат:{ "requests":[ { "field1":"value1" }, { "field2":"value2" } .......... ] } -
-
Створіть файл у корені кластера, розмістивши його у відповідному каталозі проєкту.
Файл повинен мати назву ідентичну зазначеній у полі
Excerpt Type(на попередньому кроці), у нашому прикладі —lab-staff-excerpt-csv.csv.На цьому етапі визначається формат файлу .csv та .docx.
-
Створіть задачу скриптування "Зберегти Id запиту витягу-звіту".
На панелі налаштувань вкажіть наступні значення:
-
в полі
Nameвведіть назву задачіЗберегти Id запиту витягу-звіту; -
в полі
Script Formatвкажіть тип (мову) скриптування —groovy; -
в полі
Script Typeвкажіть тип скриптуInline Script; -
в полі
Scriptвставте безпосередньо groovy-скрипт:response.responseBody.prop('excerptIdentifier').value() -
в полі
Result Variableвкажіть назву змінної, до якої буде записано ідентифікатор витягу, —excerptIdentifier.

-
4. Налаштування умов перевірок результату генерації витягу
-
Додайте задачу виклику зовнішнього бізнес-процесу (Call Activity) "Перевірка статусу генерації витягу-звіту".
Оберіть налаштований шаблон (Template) — Check excerpt status.
Детальніше ознайомитися з описом делегата
Check excerpt statusви можете за посиланням.На панелі налаштувань вкажіть наступні значення:
-
в полі
Nameвкажіть назву задачіПеревірка статусу генерації витягу-звіту; -
в полі
Input excerpt identifierвкажіть ID витягу, який необхідно передати бізнес-процесу, що викликається, —${excerptIdentifier}; -
в полі
Output variable nameвкажіть назву змінної —excerptStatus, до якої необхідно зберегти статус витягу, отриманий в результаті виконання підпроцесу, що викликається.
Приклад 1. Бізнес-процес "Перевірка статусу генерації витягу"
Де можна знайти приклад бізнес-процесу?
Адміністратор Платформи може розгорнути для вас демо-реєстр — еталонний реєстр, що містить референтні та інші приклади файлів для створення цифрового регламенту. Він містить різноманітні елементи для розробки моделі даних, бізнес-процесів, UI-форм, аналітичної звітності, витягів, сповіщень, зовнішніх інтеграцій та багато іншого.
Еталонний регламент з прикладами для України зберігається в репозиторії
ua-registry-demo-regulation.Детальну інструкцію щодо розгортання демо-реєстру та отримання референтних прикладів моделювання ви знайдете на сторінці Розгортання демо-реєстру із референтними прикладами.
Приклад BPMN-схеми процесу буде доступний у регламенті демо-реєстру за пошуком по ключовим словам — check-excerpt-status.
Назви форм ви можете знайти всередині відповідних користувацьких задач (User Task) бізнес-процесу у полі
Form key. -
-
Додайте елемент Create Intermediate/Boundary Event, визначте її тип, натиснувши іконку ключа (Change type) та обравши з меню пункт Timer Boundary Event.
Детальніше ознайомитися з описом елемента моделювання події "Timer" ви можете за посиланням.
Перейдіть до панелі налаштувань та сконфігуруйте подію:
-
в полі
Nameвведіть значенняВичерпано час на очікування P2M; -
в полі
Timer Definition Typeвкажіть тип таймераDuration(тривалість); -
в полі
Timer Definitionзазначте тривалість таймераP2M.

-
-
Додайте XOR-шлюзи для Call Activity "Перевірка статусу генерації витягу-звіту" і Timer Boundary Event "Вичерпано час на очікування P2M".

-
Створіть сервісну задачу "Зберегти ідентифікатор згенерованого витягу-звіту у системну БП".
На панелі налаштувань вкажіть наступні значення:
-
на вкладці
General:-
в полі
Nameвведіть значенняЗберегти ідентифікатор згенерованого витягу-звіту у системну БП; -
в полі
Implementationвиберіть значенняDelegate Expression; -
в полі
Delegate Expressionвведіть значення${defineProcessExcerptIdDelegate}.
-
-
на вкладці
Intup/Output:-
в полі
Local Variable Nameвведіть значенняexcerptId; -
в полі
Variable Assignment Typeвиберіть значенняString or Expression; -
в полі
Variable Assignment Valueвведіть значення${excerptIdentifier}.

↓

-
Значення, що вказано в полі
Idвикористовується як назва файлу, який користувач буде завантажувати з Кабінету. -
-
Налаштуйте процес потоку для XOR-шлюзу.
Створіть Connect using sequence (гілки):
-
до сервісної задачі "Зберегти ідентифікатор згенерованого витягу-звіту у системну БП":
-
у полі
Nameвведіть значеннятак; -
у полі
Condition Typeвиберіть значенняExpression; -
у полі
Expressionвведіть значення${excerptStatus.equals('COMPLETED')}.
-
-
до іншого XOR-шлюзу:
-
у полі
Nameвведіть значенняні; -
у полі
Condition Typeвиберіть значенняExpression; -
у полі
Expressionвведіть значення${excerptStatus.equals('FAILED')}.
-
-
5. Результат виконання процесу
5.1. Неусіпішний результат виконання бізнес-процесу
-
Створіть сервісну задачу "Результат виконання "Витяг-звіт не сформовано"".
Оберіть налаштований шаблон (Template)
Define business process status.На панелі налаштувань вкажіть наступні значення:
-
у полі
Nameвведіть значенняРезультат виконання "Витяг-звіт не сформовано"; -
у полі
Statusвведіть значенняВитяг не сформованостатус, що відображатиметься після завершення процесу.

-
-
Налаштуйте процес потоку від XOR-шлюзу до сервісної задачі "Результат виконання "Витяг-звіт не сформовано"", створивши Connect using sequence (гілку).
І створіть подію завершення бізнес-процесу.
-
у полі
Nameвведіть значенняДокумент витяг-звіт не сформовано.

-
5.2. Успішний результат виконання бізнес-процесу
-
Створіть сервісну задачу "Результат виконання "Витяг-звіт сформовано"".
Оберіть налаштований шаблон (Template)
Define business process status.На панелі налаштувань вкажіть наступні значення:
-
у полі
Nameвведіть значенняРезультат виконання "Витяг-звіт сформовано"; -
у полі
Statusвведіть значенняВитяг сформованостатус, що відображатиметься після завершення процесу.

-
-
Cтворіть подію завершення бізнес-процесу.
-
у полі
Nameвведіть значенняДокумент витяг-звіт сформовано.

-
6. Моделювання форм
Змоделюйте форми згідно з інструкцією за посиланням.
6.1. Моделювання стартової форми
Моделювання стартової форми передбачає створення форми для пошуку лабораторії за назвою.
-
У полі
Бізнес-назва формивведіть значенняСтартова форма лаб звіт. -
У полі
Службова назва формивведіть значенняadd-startform-zvit(що використовувалось на минулому кроці як значення параметраForm Key).

|
Завантажити налаштовану форму можливо за посиланням: add-startform-zvit.json |
6.2. Моделювання форми відображення даних про персонал
Моделювання форми відображення даних про персонал передбачає створення форми для формування даних запитуваної лабораторії.
-
У полі
Бізнес-назва формивведіть значенняВідобразити дані про персонал звіт. -
У полі
Службова назва формивведіть значенняread-personnel-data-zvit,(що використовувалось на минулому кроці як значення параметраForm Key).

|
Завантажити налаштовану форму можливо за посиланням: read-personnel-data-zvit.json |
7. Приклад використання бізнес-процесу користувачем
Детальніше ознайомитися з процесом формування витягів користувачем за результатом змодельованого бізнес-процесу ви можете за посиланнями: