Моделювання бізнес-процесу з формування витягів у форматі 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. Бізнес процес "Перевірка статусу генерації витягу" -
-
Додайте елемент 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. Приклад використання бізнес-процесу користувачем
Детальніше ознайомитися з процесом формування витягів користувачем за результатом змодельованого бізнес-процесу ви можете за посиланнями: