Интеграция движка FEEL со Spin
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Эта страница документирует использование Camunda Spin вместе с движком FEEL от Scala. Кроме того, здесь показано, как типы данных Spin ставятся в соответствие типам данных FEEL, а также некоторые правила преобразования структур первых в структуры последних.
Где найти интеграцию со Spin
Интеграция со Spin для двжика FEEL реализована в составе плагина Spin Process Engine, поскольку ожидается, что движок управления процессами долен иметь возможность использовать Spin, если другой компонент Camunda 7 (в данном случае, движок FEEL) поддерживает его использование.
Для случая автономного движка DMN Engine, плагин Spin Process Engine тоже должен быть добавлен к зависимостям, а движок DMN подхватит нужные классы для того, чтобы позволить произвести интеграцию Spin с движком FEEL.
Координаты Maven для плагина Spin Process Engine Plugin приведены ниже:
<dependency>
<groupId>io.openbpm.bpm</groupId>
<artifactId>camunda-engine-plugin-spin</artifactId>
<version>${camunda.version}</version>
</dependency>
Как работает интеграция со Spin
Интеграция со Spin состоит из "типов данных" Spin — специальной реализации интерфейса ValueMapper из движка FEEL. Реализация SpinValueMapper перехватывает все объекты следующих типов:
-
SpinJsonNode -
SpinXmlElement
Объект, принадлежащий к одному из этих типов, будучи передан в качестве переменной в движок FEEL, будет сконвертирован в подходящий тип данных FEEL. Ниже приведен пример того? как это можно сделать:
// define a JSON variable
SpinJsonNode json = Spin.JSON("{\"customer\": \"Kermit\", \"language\": \"en\"}");
// create a variable map and store the JSON variable
VariableMap variables = Variables.createVariables().putValue("jsonVariable", json);
// evaluate a decision containing a FEEL expression that uses the JSON variable
dmnEngine.evaluateDecision(decisionWithFEEL, variables);
Как выглядит маппинг JSON/XML переменных на типы данных FEEL
При конвертации JSON/XML переменных в типы данных FEEL предоставленная JSON/XML структура получит маппинг на FEEL тип Context. Актуальные значения, содержащиеся в структуре данных, получат маппинг на поддерживаемые типы данных FEEL, задокументированные во внешней документации FEEL, находящейся здесь.
Spin JSON
Переменные типа SpinJsonNode преобразуются в эквивалентный контекст, что означает, что преобразования не происходит, это практически та же самая структура JSON.
Spin JSON:
{
"name": "Kermit",
"address":
{
"city": "Berlin",
"zip-code": 10961
}
}
FEEL контекст:
{
name : "Kermit",
address :
{
city : "Berlin",
zipCode : 10961
}
}
Spin XML
Переменные типа SpinXmlElement преобразуются в контекст с применением следующих правил:
-
каждый элемент XML является вхождением контекста
-
каждый атрибут XML является вхождением контекста с префиксом
@под вхождением элемента -
несколько XML элементов с одним и тем же именем группируются в контексте как список
-
внутреннее содержимое XML элемента становится вхождением контекста
$content -
если элемент или атрибут имеет пространство имен (namespace), то вхождение контекста получает префикс
<NAMESPACE>$
Spin XML:
<customer name="Kermit">
<address city="Berlin" zipCode="10961" />
</customer>
FEEL контекст:
{
customer :
{
@name : "Kermit",
address :
{
@city : "Berlin",
@zipCode : "10961"
}
}
}
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org