Кастомизированные функции движка 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, используя плагин движка управления процессами.

Автономный движок DMN

Движок DMN содержит свойство feelCustomFunctionProviders типа List в DefaultDmnEngineConfiguration, предназначенное для регистрации провайдеров кастомизированных функций.

Управление типами

Этот раздел описывает, какие типы аргументов передаются в кастомизированную функцию и какие типы могут быть возвращены.

Типы аргументов

Все типы 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