Оновлення сутності у Фабриці даних: Update entity in data factory

1. Загальна інформація

Інтеграційне розширення Update entity in data factory дозволяє налаштовувати завдання для оновлення записів у базі даних у бізнес-процесі. Це розширення допомагає автоматизувати процеси оновлення даних, забезпечуючи належне оброблення запитів та передачу їх до наступних етапів бізнес-процесу. Розширення додає різні властивості до завдання типу Service Task.

Таблиця 1. Короткі відомості про делегат
Назва Пояснення

Бізнес-назва інтеграційного розширення

Update entity in data factory

Службова назва інтеграційного розширення

${dataFactoryConnectorUpdateDelegate}

Назва файлу у бібліотеці розширень

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. Налаштування завдання

  1. Створіть завдання типу Service Task у вашому бізнес-процесі.

  2. Назвіть завдання, наприклад, Оновлення даних у БД.

  3. Застосуйте шаблон делегата, обравши Update entity in data factory зі списку в налаштуваннях завдання.

    update entity 1

3.2. Налаштування делегата

Виконайте наступні налаштування:

Resource

У полі Resource вкажіть ендпоінт / таблицю, в якій необхідно оновити дані. Наприклад, entity-build-acts.

Resource id

У полі Resource id вкажіть ідентифікатор сутності, яку потрібно оновити. Наприклад:

${submission('UserTask_SignUpdateBuildInfo').formData.prop('building').prop('entityId').value()}

Цей вираз виконує такі дії:

  1. submission('UserTask_SignUpdateBuildInfo'):

    • Отримує дані форми, яка була заповнена користувачем у завданні з ID UserTask_SignUpdateBuildInfo.

  2. formData:

    • Звертається до даних форми, отриманих у попередньому кроці.

  3. prop('building'):

    • Знаходить властивість (поле) форми з назвою building.

  4. prop('entityId'):

    • Знаходить властивість (поле) entityId всередині поля building.

  5. 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 зберігається як транзитна змінна для подальшого використання у процесі, наприклад, для оновлення даних у базі даних.

Деталі скрипту:
  1. Отримання даних форми:

    def formDataForm = submission('UserTask_SignUpdateBuildInfo').formData
    • Отримує дані форми, яка була заповнена користувачем у завданні UserTask_SignUpdateBuildInfo. Дані форми зберігаються у змінній formDataForm.

  2. Отримання конкретного значення з форми:

    def buildTypeId = formDataForm.prop('buildType').prop("buildTypeId").value()
    • Отримує значення властивості buildTypeId, яка знаходиться всередині властивості buildType. Це значення зберігається у змінній buildTypeId.

  3. Формування об’єкта 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 з форми.

  4. Створення об’єкта payload у форматі JSON:

    def payload = S(data, 'application/json')
    • Перетворює об’єкт data у формат JSON та зберігає його у змінній payload.

  5. Встановлення змінної 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.

Після успішного завершення операції, делегат отримує у відповідь HTTP-код:

204 OK

Тіло відсутнє.

4. Приклад

Ось приклад, який показує, як відповідний делегат використовується у бізнес-процесі:

update entity 2
Зображення 1. Приклад. Налаштування делегата Update entity in data factory
Де можна знайти приклад бізнес-процесу?

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

Еталонний регламент з прикладами для України зберігається в репозиторії ua-registry-demo-regulation.

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

Update entity in data factory — делегат, який використовується у бізнес-процесах, що потребують оновлення записів у БД.

Ви можете використати один із прикладів процесів за пошуком по ключовим словам — reference-search-type-or.

У Кабінеті користувача бізнес-процес буде доступний у розділі Доступні послуги.

Більш детально з описом бізнес-процесу ви можете ознайомитися на сторінці Референтний бізнес-процес: управління логічними операторами AND та OR в рамках однієї таблиці.