Типові інтеграційні SOAP-конектори до інших реєстрів

ЗМІСТ

1. Загальний опис

Взаємодія з реєстрами, що знаходяться поза межами Платформи, можлива завдяки шлюзу безпечного обміну даними (ШБО) "Трембіта".

ШБО "Трембіта" є захищеним інтерфейсом для електронної взаємодії між державними системами, який розгортається в межах Платформи реєстрів як сервіс і дозволяє використовувати власні ресурси для отримання інформації із зовнішніх систем.

Для виклику зовнішніх сервісів через ШБО "Трембіта", на Платформі реєстрів розроблено типові інтеграційні розширення-конектори, що дозволяють комунікувати через інтерфейс ШБО із зовнішніми сервісами за протоколом SOAP.

Кожний конектор використовується у бізнес-процесах для отримання даних із реєстрів поза межами Платформи.

Наразі функціонування розроблених конекторів можливе лише з використанням серверів-заглушок, що імітують живе з’єднання.

Щоб мати змогу використовувати розроблені на Платформі SOAP-інтеграційні конектори до зовнішніх сервісів та отримувати інформацію від інших реєстрів через ШБО "Трембіта", необхідно попередньо виконати конфігурації на рівні регламенту реєстру.

За детальною інформацією зверніться до сторінки Конфігурація доступу до ШБО "Трембіта".

2. Встановлення типових розширень-конекторів

Налаштування розширень-конекторів відбувається у застосунку Camunda Modeler. Перед початком роботи переконайтеся, що виконано всі передумови, описані у розділі Встановлення каталогу типових розширень до бізнес-процесів.

3. Розширення-конектори для отримання даних з ЄДР

Для спрощення моделювання бізнес-процесів розроблені типові інтеграційні конектори для отримання інформації з ЄДР[1], налаштування яких відбувається на схемах бізнес-процесів у додатку Camunda Modeler.

Наразі імплементовано 2 типи конекторів для отримання даних із ЄДР:
  1. Інтеграційний конектор searchSubject — призначений для отримання інформації про суб’єкт за кодом ЄДРПОУ або РНОКПП (раніше — ІПН).

  2. Інтеграційний конектор subjectDetails — призначений для отримання деталізованої інформації про суб’єкт за ID.

3.1. Отримання інформації за суб’єктом в ЄДР

Розширення Search Subjects Edr Registry — делегат для виклику зовнішнього SOAP-сервісу для отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та датою народження, який налаштовується за допомогою розробленого однойменного шаблону Search Subjects Edr Registry (searchSubjectsEdrRegistryConnectorDelegate.json).

Передумови

Перед налаштуванням шаблону в Сamunda Modeler переконайтеся, що папка із застосунком resourceselement-templates містить файл searchSubjectsEdrRegistryConnectorDelegate.json.

  1. Відкрийте Service Task.

  2. На панелі налаштувань справа натисніть Open Catalog та оберіть шаблон Search Subjects Edr Registry зі списку.

    element template settings 01

  3. Налаштуйте обраний шаблон:

    • У полі Name вкажіть назву задачі. Наприклад, Пошук інформації за суб’єктом в ЄДР

    • У полі Authorization token зазначте токен для доступу до СЕВ ДЕІР "Трембіта". Наприклад, {token}.

      Authorization token надається постачальником сервісу (в нашому випадку — ЄДР), який є іншим учасником СЕВ ДЕІР "Трембіта".
    • У полі Code введіть код (ЄДРПОУ або РНОКПП) для пошуку в ЄДР. Наприклад, 88888888.

    • У полі Result variable зазначте назву вихідного параметру, до якого буде записано відповідь від сервісу. Наприклад, response.

    element template settings 1

3.2. Отримання деталізованої інформації за суб’єктом в ЄДР

Розширення Get Subject Detail Edr Registry — делегат для виклику зовнішнього SOAP-сервісу для отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та датою народження, який налаштовується за допомогою розробленого однойменного шаблону Get Subject Detail Edr Registry (subjectDetailEdrRegistryConnectorDelegate.json).

Передумови

Перед налаштуванням шаблону в Сamunda Modeler переконайтеся, що папка із застосунком resourceselement-templates містить файл subjectDetailEdrRegistryConnectorDelegate.json.

  1. Відкрийте Service Task.

  2. На панелі налаштувань справа натисніть Open Catalog та оберіть шаблон Get Subject Detail Edr Registry зі списку.

    element template settings 02

  3. Налаштуйте обраний шаблон:

    • У полі Name вкажіть назву задачі. Наприклад, Пошук деталізованої інформації за суб’єктом в ЄДР.

    • У полі Authorization token зазначте токен для доступу до СЕВ ДЕІР "Трембіта". Наприклад, {token}.

      Authorization token надається постачальником сервісу (в нашому випадку — ЄДР), який є іншим учасником СЕВ ДЕІР "Трембіта".
    • У полі Id зазначте унікальний ідентифікатор суб’єкта для пошуку в ЄДР. Наприклад, {subject_id}.

    • У полі Result variable зазначте назву вихідного параметру, до якого буде записано відповідь від сервісу. Наприклад, response.

    element template settings 2

3.3. Приклади використання у бізнес-процесі

Розглянемо ситуацію, коли у бізнес-процесі необхідно перевірити статус суб’єкта в ЄДР.

Для цього у процесі необхідно налаштувати інтеграційний конектор для пошуку суб’єкта з ЄДР (в нашому випадку відповідь буде записано до змінної responseEDR).

element template settings 3

Приклад 1. Приклад відповіді від сервісу
    {
    "name": "active user",
    "code": "77777777",
    "id": 213123,
    "state": "ACTIVE"
    }

Відповідь містить параметр state, що має значення "ACTIVE". Далі на шлюзі відбувається перевірка:

Якщо state має значення SUSPENDED або CANCELLED, то бізнес-процес видає валідаційну помилку.
Приклад 2. Приклад налаштування гілки
${responseEdr.value.responseBody.elements().get(0).prop('state').value().equals('SUSPENDED') || responseEdr.responseBody.elements().get(0).prop('state').value().equals('CANCELED')}

element template settings 4

Якщо state не дорівнює SUSPENDED або CANCELLED, то відбудеться подальше виконання процесу.
Приклад 3. Приклад налаштування гілки
${!responseEdr.value.responseBody.elements().get(0).prop('state').value().equals('SUSPENDED') && !responseEdr.value.responseBody.elements().get(0).prop('state').value().equals('CANCELED')}

element template settings 5

4. Розширення-конектори для отримання даних із ДРАЦС

Для спрощення моделювання бізнес-процесів розроблено типові інтеграційні конектори для отримання інформації із ДРАЦС[2], налаштування яких відбувається на схемах бізнес-процесів у додатку Camunda Modeler.

Наразі імплементовано 2 типи конекторів для отримання даних із ДРАЦС:
  1. Типове інтеграційне розширення-конектор до SOAP-сервісу ДРАЦС для отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та датою народження — GetCertByNumRoleBirthDate.

  2. Типове інтеграційне розширення-конектор до SOAP-сервісу ДРАЦС для отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та ПІБ — GetCertByNumRoleNames.

4.1. Отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та датою народження

Розширення Get Certificate By Birthdate — делегат для виклику зовнішнього SOAP-сервісу для отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та датою народження, який налаштовується за допомогою розробленого однойменного шаблону Get Certificate By Birthdate (getCertificateByBirthdateDracsRegistryDelegate.json).

Передумови

Перед налаштуванням шаблону в Сamunda Modeler переконайтеся, що папка із застосунком resourceselement-templates містить файл getCertificateByBirthdateDracsRegistryDelegate.json.

  1. Відкрийте Service Task.

  2. На панелі налаштувань справа натисніть Open Catalog та оберіть шаблон Get Certificate By Birthdate зі списку.

    get certificate dracs 1

  3. Налаштуйте обраний шаблон:

    • У полі Name вкажіть назву задачі. Це може бути призначення сервісної задачі. Наприклад, Отримати дані зі Свідоцтва про народження.

    • У полі Certificate Number вкажіть номер сертифіката. Наприклад, 218727.

    • У полі Certificate Serial вкажіть серію сертифіката. Наприклад, IV-AM.

      Актуальний формат номера свідоцтва та серію можна перевірити за посиланням.
    • У полі Role вкажіть роль CHILD.

      Наразі Платформа реєстрів підтримує отримання даних виключно для ролі CHILD. Тобто із сервісу ДРАЦС можна отримати виключно дані дитини із сертифіката Свідоцтва про народження. Всі інші передбачені ДРАЦС ролі не підтримуються.
    • У полі Birth Year введіть рік народження дитини. Наприклад, 2021.

    • У полі Birth Month вкажіть місяць народження дитини. Наприклад, 10.

    • У полі Birth Day вкажіть день народження дитини. Наприклад, 21.

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

      Приклад відповіді можна подивитися у розділі Імплементація на рівні API

      get certificate dracs 3

4.2. Отримання даних Свідоцтва про народження за вказаними серією і номером Свідоцтва, та ПІБ

Розширення Get Certificate By Name — делегат для виклику зовнішнього SOAP-сервісу для отримання даних за вказаними серією і номером Свідоцтва, та ПІБ, який налаштовується за допомогою розробленого однойменного шаблону Get Certificate By Name (getCertificateByNameDracsRegistryDelegate.json).

Передумови

Перед налаштуванням шаблону в Сamunda Modeler переконайтеся, що папка із застосунком resourceselement-templates містить файл getCertificateByNameDracsRegistryDelegate.json.

  1. Відкрийте Service Task.

  2. На панелі налаштувань справа натисніть Open Catalog та оберіть шаблон Get Certificate By Name зі списку.

    get certificate dracs 2

  3. Налаштуйте обраний шаблон:

    • У полі Name вкажіть назву задачі. Це може бути призначення сервісної задачі. Наприклад, Отримати дані зі Свідоцтва про народження.

    • У полі Certificate Number вкажіть номер сертифіката. Наприклад, 218727.

    • У полі Certificate Serial вкажіть серію сертифіката. Наприклад, IV-AM.

      Актуальний формат номера свідоцтва та серію можна перевірити за посиланням.
    • У полі Role вкажіть роль CHILD.

      Наразі Платформа реєстрів підтримує отримання даних виключно для ролі CHILD. Тобто із сервісу ДРАЦС можна отримати виключно дані дитини із сертифіката Свідоцтва про народження. Всі інші передбачені ДРАЦС ролі не підтримуються.
    • У полі Name введіть ім’я дитини. Наприклад, Павло.

    • У полі Surname прізвище дитини. Наприклад, Сидоренко.

    • У полі Patronymic по батькові дитини. Наприклад, Іванович.

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

      Приклад відповіді можна подивитися у розділі Імплементація на рівні API

      get certificate dracs 4

4.3. Імплементація на рівні API

При налаштуванні шаблонів делегата у бізнес-процесі, делегати формують запити у форматі XML і за протоколом SOAP надсилають їх відповідним сервісам ДРАЦС.

Приклад SOAP-запита до API-сервісу GetCertByNumRoleBirthDate згідно з контрактом
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    ...
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CeServiceRequest xmlns="http://tempuri.org/">
      <ByParam>3</ByParam>
      <CertNumber>218727</CertNumber>
      <CertSerial>IV-AM</CertSerial>
      <DateBirth>2021-21-10T00:00:00</DateBirth>
      <Name xsi:nil="true" />
      <Patronymic xsi:nil="true" />
      <Role>1</Role>
      <Surname xsi:nil="true" />
    </CeServiceRequest>
  </s:Body>
</s:Envelope>
Приклад SOAP-запита до API-сервісу GetCertByNumRoleNames згідно з контрактом
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    ...
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CeServiceRequest xmlns="http://tempuri.org/">
      <ByParam>4</ByParam>
      <CertNumber>218727</CertNumber>
      <CertSerial>IV-AM</CertSerial>
      <DateBirth xsi:nil="true" />
      <Name>Павло</Name>
      <Patronymic>Іванович</Patronymic>
      <Role>1</Role>
      <Surname>Сидоренко</Surname>
    </CeServiceRequest>
  </s:Body>
</s:Envelope>
Приклад відповіді від API згідно з контрактом для обох сервісів ДРАЦС
{
   "certificate":[
      {
         "certStatus":1,
         "certRepeat":0,
         "certSerial":"IV-AM",
         "certNumber":"218727",
         "certSerialNumber":null,
         "certOrg":null,
         "certDate":null,
         "arOrg":null,
         "arNumb":null,
         "arComposeDate":null,
         "childSurname":"Сидоренко",
         "childName":"Павло",
         "childPatronymic":"Іванович",
         "childBirthdate":null,
         "fatherSurname":null,
         "fatherName":null,
         "fatherPatronymic":null,
         "fatherCitizenship":null,
         "fatherCitizenshipAnother":null,
         "motherSurname":null,
         "motherName":null,
         "motherPatronymic":null,
         "motherCitizenship":null,
         "motherCitizenshipAnother":null,
         "oldSurname":null,
         "oldName":null,
         "oldPatronymic":null,
         "newSurname":null,
         "newName":null,
         "newPatronymic":null,
         "dateOfBirth":null,
         "placeofBirth":null,
         "husbandOldSurname":null,
         "husbandSurname":null,
         "husbandName":null,
         "husbandPatronymic":null,
         "husbandCitizenship":null,
         "husbandBirthdate":null,
         "husbandPlaceofBirth":null,
         "wifeOldSurname":null,
         "wifeSurname":null,
         "wifeName":null,
         "wifePatronymic":null,
         "wifeCitizenship":null,
         "wifeBirthdate":null,
         "wifePlaceOfBirth":null
      }
   ]
}
Параметри зі значенням null не використовуються.

5. Розширення-конектор для отримання даних з ЄІБДВПО

Для спрощення моделювання бізнес-процесів розроблено типовий інтеграційний конектор для обміну інформацією з ЄІБДВПО[3], налаштування якого відбувається на схемах бізнес-процесів у додатку Camunda Modeler.

Наразі імплементовано 1 тип конектора для обміну даними з ЄІБДВПО:

  • Типове інтеграційне розширення-конектор до SOAP-сервісу ЄІБДВПО для отримання інформації за довідкою внутрішньо перміщеної особи — idpExchangeServiceRegistryConnector.

5.1. Отримання інформації за довідкою внутрішньо перміщеної особи (ВПО)

Розширення Idp Exchange Service Registry Connector — делегат для виклику зовнішнього SOAP-сервісу для отримання даних за довідкою внутрішньо перміщеної особи (ВПО), який налаштовується за допомогою розробленого однойменного шаблону Idp Exchange Service Registry Connector (idpExchangeServiceRegistryConnector.json).

Передумови

Перед налаштуванням шаблону в Сamunda Modeler переконайтеся, що папка із застосунком resourceselement-templates містить файл idpExchangeServiceRegistryConnector.json.

  1. Відкрийте Service Task.

  2. На панелі налаштувань справа натисніть Open Catalog та оберіть шаблон Idp Exchange Service Registry Connector зі списку.

    get vpo eibdvpo 01

  3. Налаштуйте обраний шаблон:

    • У полі Name вкажіть назву задачі. Це може бути призначення сервісної задачі. Наприклад, Idp Exchange Service Registry.

    • У полі Url вкажіть шлях до сервісу. Наприклад, /idp/getCertificateByGUID/${submission('FORM_IDP_INPUT').formData.prop('uid').value()}.

    • У полі Metgod вкажіть HTTP-спосіб взаємодії з сервісом GET або POST.

    • У полі Body, у разі використання методу POST, вкажіть тіло запиту. Наприклад, ${submission('FORM_IDP_INPUT').formData}.

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

    get vpo eibdvpo 02

5.2. Імплементація на рівні API

При налаштуванні шаблонів делегата у бізнес-процесі, делегати формують запити у форматі XML і за протоколом SOAP надсилають їх відповідним сервісам ЄІБДВПО.

Приклад SOAP-запита до API-сервісу IDPexchangeService згідно з контрактом:
  • запит за РНОКПП:

    {
    "method": "GET",
    "url": "/idp/getCertificateByRNOKPP/3333333333",
    "body": null
    }
  • запит за UID (унікальний ідентифікатор довідки в реєстрі ВПО):

    {
    "method": "GET",
    "url": "/idp/getCertificateByGUID/79cefcce20028d82fc1d6dda6a498da2",
    "body": null
    }
Приклад відповіді від API-сервісу IDPexchangeService згідно з контрактом:
{
  "person": {
    "idpSurname": "ІВАНОВ",
    "idpName": "ІВАН",
    "idpPatronymic": "ІВАНОВИЧ",
    "birthDate": "01.01.1979 00.00.00.000",
    "birthPlace": "хутір Ізбушенка, Луганської області",
    "RNOKPP": "3333333333",
    "gender": "Жінка",
    "documentType": "1",
    "documentSerie": "ЕК",
    "documentNumber": "633666",
    "documentDate": "13.11.1997 00.00.00.000",
    "documentIssuer": "Артемівським РВЛМУУМВС укр. в Луг. обл.",
    "regAddress": "ЛУГАНСЬКА ОБЛАСТЬ/М.ЛУГАНСЬК ЛУГАНСЬК ВУЛ.ПОГРАНИЧНА буд.0",
    "factAddress": "М.БАХМУТ ДОНЕЦЬКА ОБЛ. ВУЛ. МИРУ буд. 00 кв. 00",
    "certificateNumber": "1419-69164",
    "certificateDate": "02.09.2015 00.00.00.000",
    "certificateIssuer": "М.БАХМУТ ДОНЕЦЬКА ОБЛ.",
    "certificateState": "знята з обліку",
    "UID": "f895ad5fbbe66605979afb7e18847c1b"
  },
  "accompanied": []
}

У разі необхідності використання окремого параметру(наприклад, idpSurname) при моделюванні бізнес-процесу, можливе використання наступного скрипту:

def serviceResponse = response.responseBody.elements().get(0)
serviceResponse.prop('person').prop('idpSurname')


accompanied.each{
    it ...
}

6. Загальний SOAP http-конектор

Розширення SOAP http connector — інтеграційний конектор для виклику зовнішнього SOAP-сервісу, який налаштовується за допомогою розробленого однойменного шаблону SOAP http connector (soapHttpConnector.json).

Передумови

Перед налаштуванням шаблону в Camunda Modeler переконайтеся, що папка із застосунком resources > element-templates містить файл soapHttpConnector.json.

6.1. Налаштування конектора

Конектор конфігурується за допомогою спеціального шаблону-розширення для сервісної (системної) задачі бізнес-процесу.

  1. Створіть Service Task (Сервісну задачу).

  2. На панелі справа натисніть Select, оберіть та налаштуйте шаблон SOAP http connector зі списку:

    • У полі Name вкажіть назву задачі. Наприклад, Пошук інформації за суб’єктом в ЄДР.

    • У полі Url вкажіть адресу ресурсу (повний шлях до ендпоінту). Наприклад, https://trembita-edr-registry-mock.apps.envone.dev.registry.eua.gov.ua/mockEDRService.

    • У полі Headers вкажіть заголовки запита. Наприклад, ${requestHeaders}.

    • У полі Payload вкажіть тіло запита. Наприклад, ${requestPayload}.

    • У полі Result variable вкажіть змінну, до якої необхідно записати відповідь від сервісу. Наприклад, edrResponseBody.

    soap http 1

Приклад 4. Відповідь від API згідно з контрактом для сервісу ЄДР
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://nais.gov.ua/api/sevdeir/EDR" xmlns:xroad="http://x-road.eu/xsd/xroad.xsd" xmlns:id="http://x-road.eu/xsd/identifiers">
   <soap11env:Header>
        ...
   </soap11env:Header>
   <soap11env:Body>
      <tns:SearchSubjectsResponse>
         <tns:SubjectList>
            <tns:SubjectInfo>
               <tns:state>1</tns:state>
               <tns:state_text>зареєстровано</tns:state_text>
               <tns:name>Сидоренко Василь Леонідович</tns:name>
               <tns:url>http://zqedr-api.nais.gov.ua/1.0/subjects/2222</tns:url>
               <tns:code>2222</tns:code>
               <tns:id>2222</tns:id>
            </tns:SubjectInfo>
         </tns:SubjectList>
      </tns:SearchSubjectsResponse>
   </soap11env:Body>
</soap11env:Envelope>
Сервіс повертає відповідь у вигляді рядка, тобто об’єкта типу String у форматі XML. Надалі ви можете використати цю відповідь у скрипті для виводу даних на UI-форму.

6.2. Використання у бізнес-процесі на прикладі надсилання запита до сервісу ЄРД

Розглянемо приклад використання розробленого інтеграційного конектора у бізнес-процесі, який має взаємодію із SOAP-сервісом ЄДР (тут — виконує пошук інформації про посадову особу за кодом ЄДРПОУ (атрибутом edrpou)).

Скористайтеся референтними прикладами бізнес-процесу та UI-форм для кращого розуміння деталей моделювання:

Конектор можна використати для інтеграції з будь-яким SOAP-сервісом.

  1. Створіть бізнес-процес і додайте пул до панелі моделювання.

    soap http 2

  2. Створіть стартову задачу для ініціювання процесу.

    Для того, щоб використовувати змінну initiator у бізнес-процесі, необхідно визначити її на стартовій події як initiator у полі Start initiator.

    soap http 2 1

6.2.1. Користувацька задача введення даних для пошуку в іншому реєстрі

Далі змоделюйте користувацьку задачу (User Task), оберіть шаблон User Form (користувацька UI-форма) та виконайте налаштування.

  1. Введіть назву задачі. Наприклад, Ввести ЄДРПОУ для пошуку.

  2. У полі ID введіть ідентифікатор задачі (activity_id). Його ви можете використовувати надалі у бізнес-процесі відповідно до вашої логіки. Наприклад, searchEdrpouCodeOfficer.

  3. У полі Form key введіть службову назву UI-форми вводу даних. Наприклад, soap-http-connector-edrpou-search-in-edr.

  4. У полі Assignee введіть токен ініціатора процесу — ${initiator}.

soap http 3

Приклад UI-форми на інтерфейсі користувача може виглядати так:

soap http 5

6.2.2. Скрипт для виконання запита через SOAP-конектор

Далі сформуйте Groovy-скрипт, в якому необхідно визначити параметри, а саме заголовки та тіло запита, які будуть використані SOAP-конектором для отримання даних в іншому реєстрі.

  1. Створіть скрипт-задачу (Script Task).

  2. Введіть назву. Наприклад, Підготувати дані для запита.

  3. Відкрийте візуальний редактор скриптів та напишіть необхідний скрипт.

    soap http 4

    Загалом скрипт може виглядати так:

    soap http 4 1

    • 3.1. Отримуємо код ЄДРПОУ, який ввели на першій формі:

      def edrpou = submission('searchEdrpouCodeOfficer').formData.prop('edrpou').value()
    • 3.2. Готуємо заголовки запита:

      def requestHeaders = [:]
      requestHeaders['SOAPAction'] = 'SearchSubjects'
      requestHeaders['Content-Type'] = 'text/xml;charset=UTF-8;'
      Підставте відповідне значення для свого запита замість 'SearchSubjects'.
    • 3.3. Зберігаємо заголовки до транзитної змінної процесу requestHeaders. Значення цієї змінної ми використаємо як вхідний параметр запита у налаштуваннях SOAP-конектора.

      set_transient_variable('requestHeaders', requestHeaders)
    • 3.4. Формуємо тіло SOAP-запита до API-сервісу ЄДР згідно з контрактом:

      Тіло SOAP-запита
      def requestPayload = """
      <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Header>
          <ns3:id xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">
            a90606bb-242b-4937-a707-c860e2e2f8db
          </ns3:id>
          <ns3:userId xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">
            MDTUDDM
          </ns3:userId>
          <ns3:protocolVersion xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">4.0
          </ns3:protocolVersion>
          <ns2:AuthorizationToken xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">
            1dc9f1f9b1e5be4d37c2b68993af243923ea7620
          </ns2:AuthorizationToken>
          <ns3:client xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers"
            ns4:objectType="SUBSYSTEM">
            <ns4:xRoadInstance>SEVDEIR-TEST</ns4:xRoadInstance>
            <ns4:memberClass>GOV</ns4:memberClass>
            <ns4:memberCode>43395033</ns4:memberCode>
            <ns4:subsystemCode>IDGOV_TEST_01</ns4:subsystemCode>
          </ns3:client>
          <ns3:service xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers"
            ns4:objectType="SERVICE">
            <ns4:xRoadInstance>SEVDEIR-TEST</ns4:xRoadInstance>
            <ns4:memberClass>GOV</ns4:memberClass>
            <ns4:memberCode>00015622</ns4:memberCode>
            <ns4:subsystemCode>2_MJU_EDR_prod</ns4:subsystemCode>
            <ns4:serviceCode>SearchSubjects</ns4:serviceCode>
          </ns3:service>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>
          <ns2:SearchSubjects xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">
            <ns2:code>${edrpou}</ns2:code>
          </ns2:SearchSubjects>
        </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
      """

      Підставляємо змінну ${edrpou} у тіло запита:

      <SOAP-ENV:Body>
          <ns2:SearchSubjects xmlns:ns2="http://nais.gov.ua/api/sevdeir/EDR"
            xmlns:ns3="http://x-road.eu/xsd/xroad.xsd" xmlns:ns4="http://x-road.eu/xsd/identifiers">
            <ns2:code>${edrpou}</ns2:code>
          </ns2:SearchSubjects>
      </SOAP-ENV:Body>
    • 3.5. Зберігаємо тіло запита до транзитної змінної процесу requestPayload. Значення цієї змінної ми використаємо як вхідний параметр запита у налаштуваннях SOAP-конектора.

      set_transient_variable('requestPayload', requestPayload as String)
      requestPayload необхідно передати як рядок (as String).

Використовуйте параметри, збережені до змінних у скрипті, в рамках сервісної задачі та налаштуванні SOAP-конектора.

6.2.3. Сервісна задача для відправлення пошукового запита до іншого реєстру

Далі необхідно створити сервісну задачу, застосувати та налаштувати шаблон для SOAP-http-конектора.

Див. детальніше у розділі Налаштування конектора.

6.2.4. Скрипт для виводу даних на UI-форму користувача

Далі необхідно передати дані на UI-форму, отримані в іншому реєстрі за допомогою SOAP-http-конектора. Для цього спочатку сформуйте відповідний скрипт, який зможе це зробити.

  1. Створіть скрипт-задачу (Script Task).

  2. Введіть назву. Наприклад, Підготовка отриманих даних для виведення на форму.

  3. Відкрийте візуальний редактор скриптів та напишіть необхідний скрипт.

    soap http 6

    Загалом скрипт може виглядати так:

    soap http 6 1

    • 3.1. Формуємо JSON-об’єкт з параметрами state, name, code, id, щоб передати їх на форму.

    • 3.2. Зберігаємо об’єкт до змінної payload, яку ми й використаємо як вхідний параметр для передачі даних на форму.

      Скрипт для виводу даних на UI-форму користувача
      def payload = [:]
      payload['state'] = getValueByPropertyName("state_text")
      payload['name'] = getValueByPropertyName("name")
      payload['code'] = getValueByPropertyName("code")
      payload['id'] = getValueByPropertyName("id")
      set_transient_variable('payload', S(payload, 'application/json'))
      
      def getValueByPropertyName(String propName) {
          return S(edrResponseBody, 'application/xml').childElement("Body")
                  .childElement("http://nais.gov.ua/api/sevdeir/EDR", "SearchSubjectsResponse")
                  .childElement("SubjectList")
                  .childElement("SubjectInfo")
                  .childElement(propName)
                  .textContent()
      }
      Функція S(edrResponseBody, 'application/xml') повертає об’єкт відповідно до специфікації SpinXmlElement.

6.2.5. Користувацька задача передачі даних на UI-форму

Насамкінець необхідно вивести отримані в іншому реєстрі та опрацьовані скриптом дані на UI-форму користувача.

Змоделюйте користувацьку задачу (User Task), оберіть шаблон User Form (користувацька UI-форма) та виконайте налаштування.

  1. Введіть назву задачі. Наприклад, Переглянути дані з ЄДР.

  2. У полі ID введіть ідентифікатор задачі (activity_id). Наприклад, writeResultForm.

  3. У полі Form key введіть службову назву UI-форми вводу даних. Наприклад, soap-http-connector-edrpou-edr-result-view.

  4. У полі Assignee введіть токен ініціатора процесу — ${initiator}.

  5. У полі Form data pre-population вкажіть як змінну об’єкт із параметрами, які необхідно передати на форму, — ${payload}.

soap http 7

Приклад UI-форми на інтерфейсі користувача може виглядати так:

soap http 8

Змоделюйте задачу завершення процесу та збережіть зміни.


1. ЄДР — Єдиний державний реєстр юридичних осіб, фізичних осіб-підприємців та громадських формувань.
2. ДРАЦС — Державна реєстрація актів цивільного стану.
3. ЄІБДВПО — Єдина інформаційна база даних внутрішньо переміщених осіб.