Створення сутностей у фабриці даних масивом: Batch creation of entities in data factory

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.
Використовуйте розширену версію цього делегата: Створення сутностей масивом у фабриці даних v2: Batch creation of entities in data factory v2.

Цей документ надає інструкції щодо завантаження даних до БД масивом.

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

Інтеграційне розширення Batch creation of entities in data factory надає змогу створювати сутності масивом через REST API, що сприяє оптимізації взаємодії з базою даних.

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

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

Batch creation of entities in data factory

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

${dataFactoryConnectorBatchCreateDelegate}

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

dataFactoryConnectorBatchCreateDelegate.json

2. Перед початком

Якщо ви використовуєте функціональність Кабінету адміністратора регламентів для розробки реєстру, вам не потрібно встановлювати типові розширення, додаткові зовнішні застосунки та плагіни. Портал містить усе необхідне вбудоване з коробки.

При моделюванні бізнес-процесів із використанням сторонніх застосунків, важливо інтегрувати каталог типових розширень з нашого репозиторію. Завітайте до business-process-modeler-extensions, щоб завантажити необхідні файли. Наприклад, для таких інструментів, як Camunda Modeler, у вашій теці /element-templates мають бути включені відповідні JSON-файли. Для детальних інструкцій, будь ласка, перегляньте Встановлення типових розширень.

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

Делегат Create Keycloak officer user призначений для використання у сервісних завданнях (Service Task) бізнес-процесу. Він дозволяє завантажити сутності до бази даних масивом як LIST.

Максимальна кількість записів для завантаження даних масивом як LIST через цей делегат — 50.

3.1. Налаштування сервісного завдання

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

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

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

    batch creation v1 01

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

У розділі Custom properties налаштуйте параметри завантаження:

  1. У полі Resource вкажіть ресурс, тобто ендпоінт таблиці для зберігання даних, наприклад, staff.

  2. У полі Payload введіть дані для створення в форматі тіла запита, наприклад, ${dataPayload}.

    Попередньо сформуйте Payload у скрипт-задачі процесу. Скрипт може виглядати наступним чином:

    // Завантаження даних персоналу з відповіді форми
    def personnelGrid = submission('signPersonnelFormActivity').formData.prop('personnelGrid').elements()
    
    // Перебір кожного об'єкта персоналу в списку
    for (var personnel : personnelGrid) {
      // Якщо є файл сертифікату гігієніста і він не порожній, зберегти перший файл, інакше встановити null
      if (personnel.hasProp('hygienistCertificateFile') && !personnel.prop('hygienistCertificateFile').isNull() && !personnel.prop('hygienistCertificateFile').elements().isEmpty()) {
        def hygienistCertificateFile = personnel.prop('hygienistCertificateFile').elements().first()
        personnel.prop('hygienistCertificateFile', hygienistCertificateFile)
      } else {
        personnel.prop('hygienistCertificateFile', null as String)
      }
    
      // Аналогічна перевірка та обробка для файлу з наказами
      if (personnel.hasProp('ordersFile') && !personnel.prop('ordersFile').isNull() && !personnel.prop('ordersFile').elements().isEmpty()) {
        def ordersFile = personnel.prop('ordersFile').elements().first()
        personnel.prop('ordersFile', ordersFile)
      } else {
        personnel.prop('ordersFile', null as String)
      }
    
      // Аналогічна перевірка та обробка для файлу найму персоналу
      if (personnel.hasProp('hireStaffFile') && !personnel.prop('hireStaffFile').isNull() && !personnel.prop('hireStaffFile').elements().isEmpty()) {
        def hireStaffFile = personnel.prop('hireStaffFile').elements().first()
        personnel.prop('hireStaffFile', hireStaffFile)
      } else {
        personnel.prop('hireStaffFile', null as String)
      }
    }
    
    // Видалення змінної dataPayload для очищення або уникнення конфлікту даних
    execution.removeVariable('dataPayload')
    // Створення нової тимчасової змінної з оновленими даними персоналу
    set_transient_variable('dataPayload', S(personnelGrid.toString()))
    Пояснення:

    Цей скрипт працює з інформацією про персонал, яка була зібрана через UI-форму. Ось що він робить:

    1. Завантажує список працівників із форми.

    2. Для кожного працівника перевіряє наявність трьох видів файлів: сертифікату гігієніста, файлу з наказами, та файлу про наймання на роботу.

    3. Якщо файл існує, записує перший файл зі списку в відповідне поле.

    4. Якщо файл відсутній, ставить відповідне поле порожнім.

    5. Видаляє старі дані змінної dataPayload.

    6. Створює нову змінну dataPayload із оновленою інформацією про працівників.

  3. У полі X-Access-Token source вкажіть токен доступу для авторизації, наприклад, ${completer('signPersonnelFormActivity').accessToken}.

  4. У полі X-Digital-Signature source вкажіть джерело цифрового підпису, наприклад, ${sign_submission('signPersonnelFormActivity').signatureDocumentId}.

  5. У полі Result variable вкажіть назву змінної, в яку потрібно записати результат. За замовчуванням — response.

Приклад формування масиву даних (LIST)
var data=
'''
[
   {
      "data":"test data",
      "description":"some description"
   },
   {
      "data2":"test data2",
      "description2":"some description2"
   }
]
'''

execution.setVariable("jsonArray", S(data))
Пояснення:
  • Вказаний код створює рядок data, який містить JSON-масив із двома об’єктами. Кожний об’єкт містить пари ключ-значення — дані, отримані з UI-форми.

  • Записує результат до змінної jsonArray, яка потім використовується при налаштуванні делегата.

  • Дані на форму можна завантажити як масив за допомогою компонента Edit Grid (детальніше про моделювання форм — за посиланням).

Unresolved include directive in modules/registry-develop/pages/bp-modeling/bp/element-templates/service-task-templates/entity-management/batch-creation-entities.adoc - include::registry-develop:partial$snippets/element-templates/delegate-http-code-response.adoc[]

4. Приклад

Нижче наведено приклад, який демонструє використання делегата Batch creation of entities in data factory:

batch creation v1 02
Зображення 1. Приклад. Внесення інформації про персонал масивом (LIST)
Де можна знайти приклад бізнес-процесу?

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

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

Приклад BPMN-схеми процесу буде доступний у регламенті демо-реєстру за пошуком по ключовим словам — feature-add-personnel. Назви форм ви можете знайти всередині відповідних користувацьких задач бізнес-процесу у полі Form key.