Оновлення сутності у Фабриці даних: Update entity in data factory
1. Загальна інформація
Інтеграційне розширення Update entity in data factory дозволяє налаштовувати завдання для оновлення записів у базі даних у бізнес-процесі. Це розширення допомагає автоматизувати процеси оновлення даних, забезпечуючи належне оброблення запитів та передачу їх до наступних етапів бізнес-процесу. Розширення додає різні властивості до завдання типу Service Task.
Назва | Пояснення |
---|---|
Бізнес-назва інтеграційного розширення |
Update entity in data factory |
Службова назва інтеграційного розширення |
|
Назва файлу у бібліотеці розширень |
dataFactoryConnectorUpdateDelegate.json |
2. Перед початком
Якщо ви використовуєте функціональність Кабінету адміністратора регламентів для розробки реєстру, вам не потрібно встановлювати типові розширення, додаткові зовнішні застосунки та плагіни. Портал містить усе необхідне вбудоване з коробки. При моделюванні бізнес-процесів із використанням сторонніх застосунків, важливо інтегрувати каталог типових розширень з нашого репозиторію. Завітайте до business-process-modeler-extensions, щоб завантажити необхідні файли. Наприклад, для таких інструментів, як Camunda Modeler, у вашій теці /element-templates мають бути включені відповідні JSON-файли. Для детальних інструкцій, будь ласка, перегляньте Встановлення типових розширень. |
3. Налаштування
Делегат Update entity in data factory призначений для використання у сервісних завданнях (Service Task) бізнес-процесу. Він дозволяє налаштувати автоматичне оновлення даних у базі даних.
Делегат Update entity in data factory використовує HTTP-метод PUT , який передбачає обов’язкове оновлення усіх полів сутності. Іншими словами, сутність щоразу перезаписується. Якщо потрібно оновити якісь конкретні поля (одне або більше), використовуйте делегат Часткове оновлення сутності у Фабриці даних: Update entity in data factory partially. Він використовує метод PATCH .
|
3.1. Налаштування завдання
-
Створіть завдання типу Service Task у вашому бізнес-процесі.
-
Назвіть завдання, наприклад,
Оновлення даних у БД
. -
Застосуйте шаблон делегата, обравши Update entity in data factory зі списку в налаштуваннях завдання.
3.2. Налаштування делегата
Виконайте наступні налаштування:
- Resource
-
У полі Resource вкажіть ендпоінт / таблицю, в якій необхідно оновити дані. Наприклад,
entity-build-acts
. - Resource id
-
У полі Resource id вкажіть ідентифікатор сутності, яку потрібно оновити. Наприклад:
${submission('UserTask_SignUpdateBuildInfo').formData.prop('building').prop('entityId').value()}
Цей вираз виконує такі дії:
-
submission('UserTask_SignUpdateBuildInfo')
:-
Отримує дані форми, яка була заповнена користувачем у завданні з ID
UserTask_SignUpdateBuildInfo
.
-
-
formData
:-
Звертається до даних форми, отриманих у попередньому кроці.
-
-
prop('building')
:-
Знаходить властивість (поле) форми з назвою
building
.
-
-
prop('entityId')
:-
Знаходить властивість (поле)
entityId
всередині поляbuilding
.
-
-
value()
:-
Отримує значення властивості
entityId
.
-
-
- Payload
-
У полі Payload зазначте дані для оновлення у форматі JSON. Наприклад,
${payload}
.Ви можете отримати значення
payload
зі скрипту. Наприклад:def formDataForm = submission('UserTask_SignUpdateBuildInfo').formData def buildTypeId = formDataForm.prop('buildType').prop("buildTypeId").value() def data = [:] data['buildType'] = buildTypeId; data['buildNumber'] = formDataForm.prop('buildNumber').value() data['sectionNumber'] = formDataForm.prop('sectionNumber').value() data['flatNumber'] = formDataForm.prop('flatNumber').value() data['autoGeneratedNumber'] = formDataForm.prop('building').prop('autoGeneratedNumber').value() def payload = S(data, 'application/json') set_transient_variable('payload', payload)
Скрипт отримує дані з форми, формує об’єкт
payload
у форматі JSON, який містить інформацію про тип будівлі, номер будівлі, номер секції, номер квартири та автоматично згенерований номер. Цей об’єктpayload
зберігається як транзитна змінна для подальшого використання у процесі, наприклад, для оновлення даних у базі даних.- Деталі скрипту:
-
-
Отримання даних форми:
def formDataForm = submission('UserTask_SignUpdateBuildInfo').formData
-
Отримує дані форми, яка була заповнена користувачем у завданні
UserTask_SignUpdateBuildInfo
. Дані форми зберігаються у зміннійformDataForm
.
-
-
Отримання конкретного значення з форми:
def buildTypeId = formDataForm.prop('buildType').prop("buildTypeId").value()
-
Отримує значення властивості
buildTypeId
, яка знаходиться всередині властивостіbuildType
. Це значення зберігається у зміннійbuildTypeId
.
-
-
Формування об’єкта
data
:def data = [:] data['buildType'] = buildTypeId; data['buildNumber'] = formDataForm.prop('buildNumber').value() data['sectionNumber'] = formDataForm.prop('sectionNumber').value() data['flatNumber'] = formDataForm.prop('flatNumber').value() data['autoGeneratedNumber'] = formDataForm.prop('building').prop('autoGeneratedNumber').value()
-
Створюється порожній об’єкт
data
у вигляді map (словника). -
Додаються наступні поля у цю мапу:
-
buildType
з отриманим значеннямbuildTypeId
. -
buildNumber
з значенням поляbuildNumber
з форми. -
sectionNumber
з значенням поляsectionNumber
з форми. -
flatNumber
з значенням поляflatNumber
з форми. -
autoGeneratedNumber
з значенням поляautoGeneratedNumber
всередині властивостіbuilding
з форми.
-
-
-
Створення об’єкта
payload
у форматі JSON:def payload = S(data, 'application/json')
-
Перетворює об’єкт
data
у формат JSON та зберігає його у зміннійpayload
.
-
-
Встановлення змінної
payload
як транзитної:set_transient_variable('payload', payload)
-
Зберігає змінну
payload
як транзитну змінну, що дозволяє використовувати її у подальших кроках процесу.
-
-
В результаті для оновлення сутності формується JSON-об’єкт у наступному форматі:
{ "buildNumber": "string", "entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "flatNumber": "string", "buildType": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "autoGeneratedNumber": "string", "sectionNumber": "string" }
- X-Access-Token
-
У полі X-Access-Token вкажіть токен доступу користувача, під яким виконується операція. Цей токен забезпечує повноваження виконавця задачі щодо доступу до даних.
-
Наприклад, вкажіть токен ініціатора процесу через JUEL-функцію
initiator()
, використавши методaccessToken
:${initiator().accessToken}
-
Альтернативно, ви можете вказати токен виконавця останнього користувацького завдання. Для цього ви можете використати JUEL-функцію
completer()
, передавши ID попередньої задачі та використавши методaccessToken
. Наприклад:${completer('UserTask_SignUpdateBuildInfo').accessToken}
-
completer()
— назва JUEL-функції. -
'UserTask_SignUpdateBuildInfo'
— ID попередньої задачі користувача. -
accessToken
— метод, який передає JWT-токен користувача.
-
-
- X-Digital-Signature source
-
У полі X-Digital-Signature source вкажіть джерело цифрового підпису. Це поле вказує на Ceph-документ із цифровим підписом даних КЕП на стороні користувача (див. детальніше про підпис КЕП у делегатах Підписання даних КЕП надавача послуг: Officer Sign Task та Підписання даних КЕП отримувача послуг: Citizen Sign Task). Функція
sign_submission()
та методsignatureDocumentId
дозволяють отримати підписані дані з UI-форми та передати ID Ceph-документа. Наприклад:${sign_submission('UserTask_SignUpdateBuildInfo').signatureDocumentId}
-
sign_submission
— назва JUEL-функції. -
'UserTask_SignUpdateBuildInfo'
— ID завдання користувача, із даними, на які накладено КЕП. -
signatureDocumentId
— метод, який дозволяє отримати ID Ceph-документа, в якому зберігаються підписані КЕП дані.
-
- X-Digital-Signature-Derived source
-
-
У полі X-Digital-Signature-Derived source вкажіть джерело системного цифрового підпису (цифрової печатки). Це поле вказує на Ceph-документ із системним цифровим підписом (цифровою печаткою), накладеним на дані. Наприклад,
${system_signature_key}
. -
(Альтернативно) Скористайтеся наступним виразом для отримання системного підпису:
${execution.getVariable("secure-sys-var-ref-task-form-data-{taskDefinitionId}")}
де
taskDefinitionId
— ID задачі, звідки потрібно отримати змінну.Значення ключа/ідентифікатора системного підпису можна отримати після підпису даних за допомогою делегата Підписання даних системним ключем: System signature by DSO service. Результат виконання операції підписання даних системним ключем буде збережено до вказаної змінної, наприклад,
system_signature_key
. Надалі ви зможете використати змінну в іншому місці процесу, зокрема під час оновлення даних до БД тощо.
-
- Result variable
-
У полі Result variable задайте ім’я для змінної, в якій буде зберігатися відповідь від операції створення сутності, наприклад,
response
.
Unresolved include directive in modules/registry-develop/pages/bp-modeling/bp/element-templates/service-task-templates/entity-management/update-entity-in-data-factory.adoc - include::registry-develop:partial$snippets/element-templates/delegate-204-ok-response.adoc[]
4. Приклад
Ось приклад, який показує, як відповідний делегат використовується у бізнес-процесі:

Де можна знайти приклад бізнес-процесу?Адміністратор Платформи може розгорнути для вас демо-реєстр — еталонний реєстр, що містить референтні та інші приклади файлів для створення цифрового регламенту. Він містить різноманітні елементи для розробки моделі даних, бізнес-процесів, UI-форм, аналітичної звітності, витягів, сповіщень, зовнішніх інтеграцій та багато іншого. Детальну інструкцію щодо розгортання демо-реєстру та отримання референтних прикладів моделювання ви знайдете на сторінці Розгортання демо-реєстру із референтними прикладами. Update entity in data factory — делегат, який використовується у бізнес-процесах, що потребують оновлення записів у БД. Ви можете використати один із прикладів процесів за пошуком по ключовим словам — reference-search-type-or. У Кабінеті користувача бізнес-процес буде доступний у розділі Доступні послуги. |
Більш детально з описом бізнес-процесу ви можете ознайомитися на сторінці Референтний бізнес-процес: управління логічними операторами AND та OR в рамках однієї таблиці.
|