Загальний Trembita SOAP-конектор: Trembita SOAP connector
- 1. Загальна інформація
- 2. Налаштування делегата
- 3. Використання у бізнес-процесі на прикладі надсилання запита до сервісу ЄДР
- 3.1. Користувацька задача введення даних для пошуку в іншому реєстрі
- 3.2. Скрипт для виконання запита через Trembita SOAP-конектор
- 3.3. Сервісна задача для відправлення пошукового запита до іншого реєстру
- 3.4. Скрипт для виводу даних на UI-форму користувача
- 3.5. Користувацька задача передачі даних на UI-форму
 
1. Загальна інформація
| Конектор можна використати для інтеграції з будь-яким SOAP-сервісом, зареєстрованим у СЕВ ДЕІР "Трембіта". Є делегатом. Детальніше про налаштування взаємодії з "Трембітою" див. на сторінці Налаштування взаємодії з реєстрами через ШБО "Трембіта" у Control Plane. | 
Trembita SOAP connector — інтеграційне розширення-делегат ${trembitaSoapConnectorDelegate}, призначене для виклику зовнішнього SOAP-сервісу через ШБО "Трембіта". Воно налаштовується у бізнес-процесі за допомогою шаблону Trembita SOAP connector (trembitaSoapConnectorDelegate.json).
2. Налаштування делегата
Делегат конфігурується за допомогою спеціального шаблону-розширення для сервісної (системної) задачі бізнес-процесу.
- 
Створіть Service Task (Сервісну задачу). 
- 
На панелі справа натисніть Select, оберіть та налаштуйте шаблон Trembita SOAP connector зі списку:
- 
У полі Nameсекції General вкажіть назву задачі. Наприклад,Відправлення запита до ЄДР.
- 
Розділ Custom properties: - 
У полі Trembita system nameвкажіть назву зовнішньої системи-учасника СЕВ ДЕІР "Трембіта", з якою встановлено підключення через адміністративну панель Control Plane. Наприклад,trembita-registry-test.
- 
У полі Trembita service nameвкажіть назву сервісу зовнішньої системи "Трембіта", куди необхідно виконати запит. Наприклад,testAction.Назва сервісу = SOAP Action. Вона визначає, який процес або програму необхідно викликати, коли запит надсилається клієнтом сервісу. 
- 
У полі Content typeвизначається формат представлення даних та кодування. За замовчуванням —text/xml;charset=UTF-8;.
- 
У полі Request payloadвкажіть змінну, яка містить дані запита. Наприклад,${requestPayload}.${requestPayload}формується попередньо у скрипті (див. детальніше — Скрипт для виконання запита через Trembita SOAP-конектор).Тіло запита може виглядати так: Приклад 1. Тіло запита згідно з контрактом для сервісу ЄДР<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>
- 
У полі Result variableвкажіть змінну, до якої необхідно записати відповідь від сервісу. Наприклад,edrResponseBody. 
 Приклад 2. Відповідь від 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>Делегат повертає відповідь у вигляді об’єкта типу SpinXmlElement. 
- 
3. Використання у бізнес-процесі на прикладі надсилання запита до сервісу ЄДР
Розглянемо приклад використання розробленого інтеграційного конектора у бізнес-процесі, який має взаємодію із SOAP-сервісом ЄДР (тут — виконує пошук інформації про посадову особу за кодом ЄДРПОУ (атрибутом edrpou)).
| Скористайтеся референтними прикладами бізнес-процесу та UI-форм для кращого розуміння деталей моделювання: 
 | 
| Конектор можна використати для інтеграції з будь-яким SOAP-сервісом, зареєстрованому у СЕВ ДЕІР "Трембіта". | 
- 
Створіть бізнес-процес і додайте пул до панелі моделювання.  
- 
Створіть стартову задачу для ініціювання процесу. Для того, щоб використовувати змінну initiatorу бізнес-процесі, необхідно визначити її на стартовій події якinitiatorу поліStart initiator. 
3.1. Користувацька задача введення даних для пошуку в іншому реєстрі
Далі змоделюйте користувацьку задачу (User Task), оберіть шаблон User Form (користувацька UI-форма) та виконайте налаштування.
- 
Введіть назву задачі. Наприклад, Ввести ЄДРПОУ для пошуку.
- 
У полі IDвведіть ідентифікатор задачі (activity_id). Його ви можете використовувати надалі у бізнес-процесі відповідно до вашої логіки. Наприклад,searchEdrpouCodeOfficer.
- 
У полі Form keyвведіть службову назву UI-форми вводу даних. Наприклад,soap-http-connector-edrpou-search-in-edr.
- 
У полі Assigneeвведіть токен ініціатора процесу —${initiator}.

- Приклад UI-форми на інтерфейсі користувача може виглядати так:
- 
 
3.2. Скрипт для виконання запита через Trembita SOAP-конектор
Далі сформуйте Groovy-скрипт, в якому необхідно визначити параметри, а саме тіло запита й опціонально — заголовки, які будуть використані SOAP-конектором для отримання даних в іншому реєстрі.
| Делегат автоматично додасть наступні системні заголовки при виконанні запита до SOAP-сервісу. Перелік і структура заголовків | 
- 
Створіть скрипт-задачу (Script Task). 
- 
Введіть назву. Наприклад, Підготувати дані для запита.
- 
Відкрийте візуальний редактор скриптів та напишіть необхідний скрипт.  - Загалом скрипт може виглядати так:
- 
 - 
3.1. Отримуємо значення коду edrpou, який ввели на першій формі вводу даних (formData):def edrpou = submission('searchEdrpouCodeOfficer').formData.prop('edrpou').value()
- 
3.2. Отримуємо токен авторизації для доступу до сервісу за допомогою JUEL-функції get_trembita_auth_token().def registryAuthSecretValue = get_trembita_auth_token('trembita-registry-test')Функція get_trembita_auth_token()дозволяє отримати токен авторизації для доступу до сервісів СЕВ ДЕІР "Трембіта", з якими попередньо налаштовано взаємодію у Control Plane (див. детальніше — bp-modeling/bp/modeling-facilitation/modelling-with-juel-functions.adoc).
- 
3.3. Створюємо шаблон заголовка SOAP-запита із токеном авторизації. def authHeaderTagTemplate = """ <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"> $registryAuthSecretValue </ns2:AuthorizationToken> """
- 
3.4. Заповнюємо шаблон заголовка із токеном авторизації. def headerString = sprintf(authHeaderTagTemplate, registryAuthSecretValue)
- 
3.5. Створюємо шаблон тіла SOAP-запита для пошуку суб’єкта за кодом ЄДРПОУ. def bodyTemplate = """ <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> """
- 
3.6. Заповнюємо шаблон тіла SOAP-запита зі значенням edrpou.def bodyString = sprintf(bodyTemplate, edrpou)
- 
3.7. Створюємо шаблон SOAP-запита зі згенерованим заголовком та тілом. String requestTemplate = """ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header> $headerString </SOAP-ENV:Header> <SOAP-ENV:Body> $bodyString </SOAP-ENV:Body> </SOAP-ENV:Envelope> """Змінні headerStringтаbodyStringформуються з шаблонівauthHeaderTagTemplateтаbodyTemplateвідповідно, де змінні$registryAuthSecretValueі$edrpouзамінюються на значення зміннихregistryAuthSecretValueтаedrpou, що були отримані на попередніх етапах у скрипті.
- 
3.8. Далі формуємо запит на отримання інформації про суб’єкт за його ЄДРПОУ. def requestPayload = sprintf(requestTemplate, headerString, bodyString)Запит формується за допомогою змінної requestTemplate, в якій змінні $headerString і $bodyString замінюються на їх відповідні значення.
- 
3.9. Кінцевий запит зберігаємо у змінній requestPayloadі додаємо до тимчасових змінних за допомогою функціїset_transient_variable(). Значення цієї змінної ми використаємо як вхідний параметр запита у налаштуваннях Trembita SOAP-конектора (див. детальніше — Налаштування делегата).set_transient_variable('requestPayload', requestPayload)Тимчасові змінні дозволяють зберігати дані на певний час, щоб вони були доступні наступним етапам скрипту (до наступної користувацької задачі), але не були збережені назавжди. 
 
- 
 
3.3. Сервісна задача для відправлення пошукового запита до іншого реєстру
Далі необхідно створити сервісну задачу, застосувати та налаштувати делегат для Trembita SOAP-конектора.
| Див. детальніше у розділі Налаштування делегата. | 
3.4. Скрипт для виводу даних на UI-форму користувача
Далі необхідно передати дані на UI-форму, отримані в іншому реєстрі за допомогою SOAP-http-конектора. Для цього спочатку сформуйте відповідний скрипт, який зможе це зробити.
- 
Створіть скрипт-задачу (Script Task). 
- 
Введіть назву. Наприклад, Підготовка отриманих даних для виведення на форму.
- 
Відкрийте візуальний редактор скриптів та напишіть необхідний скрипт.  - Загалом скрипт може виглядати так:
- 
 - 
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 edrResponseBody.childElement("Body") .childElement("http://nais.gov.ua/api/sevdeir/EDR", "SearchSubjectsResponse") .childElement("SubjectList") .childElement("SubjectInfo") .childElement(propName) .textContent() }
 
- 
 
3.5. Користувацька задача передачі даних на UI-форму
Насамкінець необхідно вивести отримані в іншому реєстрі та опрацьовані скриптом дані на UI-форму користувача.
Змоделюйте користувацьку задачу (User Task), оберіть шаблон User Form (користувацька UI-форма) та виконайте налаштування.
- 
Введіть назву задачі. Наприклад, Переглянути дані з ЄДР.
- 
У полі IDвведіть ідентифікатор задачі (activity_id). Наприклад,writeResultForm.
- 
У полі Form keyвведіть службову назву UI-форми вводу даних. Наприклад,soap-http-connector-edrpou-edr-result-view.
- 
У полі Assigneeвведіть токен ініціатора процесу —${initiator}.
- 
У полі Form data pre-populationвкажіть як змінну об’єкт із параметрами, які необхідно передати на форму, —${payload}.Змінна формується у задачі Скрипт для виводу даних на UI-форму користувача. 

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