Выражения в движке DMN
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Таблицы решений и литеральные выражения решений позволяют задавать различные типы выражений. Этот раздел описывает существующие типы выражений. Он также перечисляет поддерживаемые языки выражений и демонстрирует, как поменять используемый язык выражений для конкретного выражения.
Выражения в DMN
Как было рассказано в разделах о таблицах решений и в справочнике по литеральным выражениям в решениях, поддерживаются четыре типа выражений:
-
Input Expression (входное выражение): устанавливает входное значение для колонки с входными данными в таблице решений
-
Input Entry (входная ячейка): используется для того, чтобы определить, применимо ли правило в таблице решений
-
Output Entry (выходная ячейка): возвращает значение, которое добавляется к выходным данным для соответствующего правила
-
Literal Expression (литеральное выражение): используется для определения значения литерального выражения решения
Вы можете прочитать об этом более подробно в справочнике по DMN 1.3. В DMN 1.3 XML выражения можно найти в следующих элементах XML: inputExpression, inputEntry, outputEntry и literalExpression:
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn">
<decision id="decision" name="Decision">
<decisionTable>
<input id="input">
<!-- the input expression determines the input value of a column -->
<inputExpression>
<text>age</text>
</inputExpression>
</input>
<output id="output"/>
<rule id="rule1">
<!-- the input entry determines if the rule is applicable -->
<inputEntry>
<text>[18..30]</text>
</inputEntry>
<!-- the output entry determines the rule if it is applicable -->
<outputEntry>
<text>"okay"</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<decision id="decision2 name="Decision 2">
<!-- the literal expression determines the value of this decision -->
<literalExpression>
<text>a + b</text>
</literalExpression>
</decision>
</definitions>
Поддерживаемые языки выражений
Движок DMN от Camunda поддерживает два языка выражений из коробки:
-
JUEL: Поддерживаемая сообществом Camunda реализация унифицированного языка выражений на Java -
FEEL: Расшифровывается как Friendly Enough Expression Language (достаточно дружественный язык выражений), соответствует стандарту DMN 1.2
В зависимости от того, какую JDK вы используете, может присутствовать также и реализация на Javascript, доступная как Rhino или Nashhorn.
Вы также можете использовать любой другой язык скриптов, который предоставляет реализацию JSR-223. Сюда входят groovy, python и ruby. Чтобы использовать эти языки, вам необходимо добавить соответствующую зависимость к вашему проекту.
Например, чтобы использовать groovy как язык для выражений, добавьте вот эти зависимости к файлу pom.xml в вашем проекте:
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-jsr223</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-json</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-xml</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-templates</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-dateutil</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-datetime</artifactId>
<version>${GROOVY_VERSION}</version>
</dependency>
Язык выражений по умолчанию
По умолчанию, языки для различных типов выражений в движке DMN распределяются вот так:
-
Input Expression:
FEEL -
Input Entry:
FEEL -
Output Entry:
FEEL -
Literal Expression:
FEEL
ЛЕГАСИ ПОВЕДЕНИЕ:
Вы можете узнать, как вернуться к легаси поведению, при котором JUEL использовался для входных выражений, выходных ячеек и литеральных выражений, здесь.
Язык по умолчанию можно поменять, установив его напрямую в DMN 1.3 XML как глобальный язык выражений при помощи атрибута expressionLanguage элемента definitions:
<!-- this sets the default expression language for all expressions -->
<!-- in this file to javascript -->
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn" expressionLanguage="javascript">
<decision id="decision" name="Decision">
<decisionTable>
<!-- ... -->
</decisionTable>
</decision>
</definitions>
Дополнительно можео изменить язык выражений по умолчанию в конфигурации движка DMN, как описано в руководстве пользователя.
Конфигурирование языка выражений
Также есть возможность установить язык индивидуально для каждого выражения, используя атрибут expressionLanguage:
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn">
<decision id="decision" name="Decision">
<decisionTable>
<input id="input">
<!-- use javascript for this input expression -->
<inputExpression expressionLanguage="javascript">
<text>age</text>
</inputExpression>
</input>
<output id="output"/>
<rule id="rule1">
<!-- use juel for this input entry -->
<inputEntry expressionLanguage="juel">
<text><![CDATA[cellInput >= 18 && cellInput <= 30]]></text>
</inputEntry>
<!-- use javascript for this output entry -->
<outputEntry expressionLanguage="javascript">
<text>"okay"</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<decision id="decision2" name="Decision 2">
<!-- use groovy for this literal expression -->
<literalExpression expressionLanguage="groovy">
<text>a + b</text>
</literalExpression>
</decision>
</definitions>
Если вы хотите использовать другую реализацию Java Unified Expression Language (JEEL) или FEEL, вы можете заменить реализацию по умолчанию в конфигурации движка DMN. Таким образом вы также поменяете способ разрешения в движке скриптов JSR-223, например, если вы хотите сконфигурировать движок скриптов перед его использованием.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org