Дизайн моделювання зовнішніх інтеграційних розширень на інші реєстри
1. Призначення
При моделюванні та виконанні бізнес-процесів необхідно мати можливість читати дані з зовнішніх реєстрів через інтеграцію з системою електронної взаємодії державних електронних інформаційних ресурсів "Трембіта".
- 
Користувач стартує бізнес-процес, далі відображається форма задачі, яка попередньо заповнена бізнес-даними з зовнішнього реєстру. 
- 
Користувач стартує бізнес-процес, який використовує дані з іншого реєстру для оркестрації самого процесу та виконання системних функцій. 
- 
Користувач стартує бізнес-процес, який використовує дані з іншого реєстру для валідації введених даних. 
2. Базові принципи реалізації вимог
- 
Мати можливість читати дані з зовнішніх реєстрів через інтеграцію з системою електронної взаємодії державних електронних інформаційних ресурсів "Трембіта". 
- 
Використання частини бізнес-даних з зовнішніх реєстрів для оркестрації бізнес-процесу - отримувати та маркувати змінні як "transient". 
- 
Використовувати делегати розширення для маскування деталей взаємодії з зовнішніми реєстрами. 
4. Діаграма класів
Діаграма класів на прикладі інтеграції з ЄДР.
Генерація класів контракту на базі WSDL файлів відбувається за допомогою плагіна:
<plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>${plugin.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <schemaLanguage>WSDL</schemaLanguage>
          <generatePackage>${generate.package}</generatePackage>
          <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
          <schemaIncludes>
            <include>edp-registry.wsdl</include>
            <include>bar-registry.wsdl</include>
            ....
          </schemaIncludes>
        </configuration>
</plugin>| Якщо при пасрсингу та генерації класів виникла помилка конфлікту імен, можна додати як русурс визначення зовнішнього прив’язувального(binding) XML, приклад(edr-binding.xjb): | 
<jaxb:bindings
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:s="http://www.w3.org/2001/XMLSchema"
  version="1.0">
  <jaxb:bindings schemaLocation="file:edr-registry.wsdl" node=".//s:element[@name='<your-filed-name>']">
    <jaxb:factoryMethod name="_<your-filed-name>"/>
  </jaxb:bindings>
</jaxb:bindings>${project.basedir}/src/main/resources/wsdl5. Приклад делегата
Для кожного реєстру буде створено типові делегати. Приклад використаня делегата:
6. Діаграма послідовності
Приклад інтеграції при виконанні задачі бізнес процесу, який змодельовано таким чином, що при оркестрації процесу необхідно перевірити дані з іншого реєстру:
7. Необхідні параметри
| Параметр | Тип | Необхідність | Опис | 
|---|---|---|---|
| trembita-exchange-gateway.registries.<registry-name>.url | string | required | Адреса до ШБО | 
| trembita-exchange-gateway.registries.<registry-name>.userId | string | required | Ідентифікатор особи користувача, за ініціативою якого сформовано повідомлення-запит | 
| trembita-exchange-gateway.registries.<registry-name>.protocol-version | string | required | Внутрішня версія протоколу обміну | 
| trembita-exchange-gateway.registries.<registry-name>.service.x-road-instance | string | required | Ідентифікатор середовища СЕВДЕІР | 
| trembita-exchange-gateway.registries.<registry-name>.service.member-class | string | required | Ідентифікатор класу учасника | 
| trembita-exchange-gateway.registries.<registry-name>.service.member-code | string | required | Ідентифікатор учасника СЕВДЕІР | 
| trembita-exchange-gateway.registries.<registry-name>.service.subsystem-code | string | required | Ідентифікатор інформаційної системи (підсистеми), яку представляє веб-сервіс, що отримує запит | 
| trembita-exchange-gateway.registries.<registry-name>.client.x-road-instance | string | required | Ідентифікатор середовища СЕВДЕІР | 
| trembita-exchange-gateway.registries.<registry-name>.client.member-class | string | required | Ідентифікатор класу учасника | 
| trembita-exchange-gateway.registries.<registry-name>.client.member-code | string | required | Ідентифікатор учасника СЕВДЕІР | 
| trembita-exchange-gateway.registries.<registry-name>.client.subsystem-code | string | required | Ідентифікатор інформаційної системи (підсистеми), яку представляє веб-клієнт, що виконує запит | 
<registry-name> - назва реєстру, яка буде використовуватися spring для ін’єкції параметрів до клієнта реєстру. Наприклад: edr-registry
Приклад конфігурації в application.yml сервіса:
trembita-exchange-gateway:
  registries:
    edr-registry:
      trembita-url: http://localhost:8080
      user-id: MDTUDDM
      protocol-version: 4.0
      authorization-token: token #custom field
      client:
        x-road-instance: CLIENT-TEST
        member-class: GOV
        member-code: 666777666
        subsystem-code: GOV_test
      service:
        x-road-instance: EDR-TEST
        member-class: GOV
        member-code: 11115888
        subsystem-code: EDR_test
      bar-registry:
        ....