Кастомизированные функции движка FEEL
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Camunda 7 предоставляет обертку (wrapper) для движка FEEL от Scala, чтобы реализовывать кастомизированные функции, которые могут вызываться из выражений и унарных тестов.
|
Пожалуйста, отметьте, что механизм кастомизированных функций в автономном (Standalone) движке FEEL от Scala может вести себя иначе. |
Вы можете добавить кастомизированные функции к движку управления процессами (или к автономному движку DMN) только программным путем с помощью плагина движка управления процессами. Прочитать об этом больше можно в разделе о том, как регистрировать провайдеры кастомизированных функций.
Реализаци кастомизированной функции
Чтобы реализовать кастомизированную функцию, создайте подкласс FeelCustomFunctionProvider.
Нижеприведенный пример кода показывает, как реализовать кастомизированную функцию:
import io.openbpm.bpm.dmn.feel.impl.scala.function.CustomFunction;
import io.openbpm.bpm.dmn.feel.impl.scala.function.FeelCustomFunctionProvider;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class CustomFunctionProvider implements FeelCustomFunctionProvider {
protected Map<String, CustomFunction> functions = new HashMap<>();
public CustomFunctionProvider() {
CustomFunction function = CustomFunction.create()
.setParams("x", "y")
.setFunction(args -> {
long argX = (long) args.get(0);
long argY = (long) args.get(1);
return argX + argY;
})
.build();
functions.put("myFunction", function);
}
@Override
public Optional<CustomFunction> resolveFunction(String functionName) {
return Optional.ofNullable(functions.get(functionName));
}
@Override
public Collection<String> getFunctionNames() {
return functions.keySet();
}
}
При вызове CustomFunction.create() возвращается билдер, который можно использовать для конфигурирования кастомизированной функции.
Билдер имеет следующие конфигурационные опции:
-
#setParams(String… params)-
Задает имена параметров кастомизированной функции
-
Передаваемые аргументы в FEEL не обязаны строго следовать установленному порядку, если имена параметров передаются в явном виде:
myFunction(y: 5, x: 3)
-
-
#enableVarargs()-
Разрешает аргументы в виде переменных
-
Когда переменные разрешены, функция может иметь аргументы-переменные для последнего параметра
-
Последний аргумент имеет списочный тип
-
-
#setFunction(Function<List<Object>, Object> function)-
Передает объект типа
java.util.function.Functionсо списком объектов в качестве аргументов и объектом в качестве возвращаемого значения -
Не может использоваться вместе с
#setReturnValue
-
-
#setReturnValue(Object result)-
Устанавливает возвращаемое значение
-
Возвращаемое значение задается при регистрации функции и не может меняться позднее
-
Не может использоваться вместе с
#setFunction
-
Регистрация провайдеров кастомизированных функций
Вы можете зарегистрировать провайдер кастомизированной функции, используя конфигурационное свойство.
Движок управления процессами
Вы можете регистрировать провайдеры кастомизированных функций в движке управления процессами с помощью свойства dmnFeelCustomFunctionProviders, используя плагин движка управления процессами.
Управление типами
Этот раздел описывает, какие типы аргументов передаются в кастомизированную функцию и какие типы могут быть возвращены.
Типы аргументов
Все типы Java, перечисленные в разделе "Return Types" в документации по управлению типами в FEEL, могут передаваться в кастомизированную функцию.
Возвращаемые типы
Все типы Java, перечисленные в разделе "Return Types" в документации по управлению типами в FEEL, а также все типы, перечисленные в документации по типам данных FEEL, могут возвращаться кастомизированной функцией.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org