The provided custom methods can be overridden by your own custom expression functions or custom methods can be added. This is possible via a hook point in the rule engine configuration (see Rule engine configuration configurer).
You can configure the Engine with additional expression functions by implementing CustomExpressionFunctionRegistry.
interface: com.activiti.dmn.engine.impl.mvel.config.CustomExpressionFunctionRegistry
Maven module: activiti-dmn-engine
Example:
import com.activiti.dmn.engine.CustomExpressionFunctionRegistry; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @Component public class MyCustomExpressionFunctionsRegistry implements CustomExpressionFunctionRegistry { public Map<String, Method> getCustomExpressionMethods() { Map<String,Method> myCustomExpressionMethods = new HashMap<>(); try { String expressionToken = "dosomething"; Method customExpressionMethod = SomeClass.class.getMethod("someMethod", String.class); myCustomExpressionMethods.put(expressionToken, customExpressionMethod); } catch (NoSuchMethodException e) { // handle exception } return myCustomExpressionMethods; } }
This registry must be provided to the rule engine configuration using the hook point (see Rule engine configuration configurer).
This example adds the expression function from the example above to the default custom expression functions.
Example:
import com.activiti.dmn.engine.DmnEngineConfiguration; import org.springframework.beans.factory.annotation.Autowired; public class MyDmnEngineCfgConfigurer implements DmnEngineConfigurationConfigurer { @Autowired MyCustomExpressionFunctionsRegistry myExpressionFunctionRegistry; public void dmnEngineConfigurationInitialized(DmnEngineConfiguration dmnEngineConfiguration) { dmnEngineConfiguration.setPostCustomExpressionFunctionRegistry( myExpressionFunctionRegistry); } }
Overriding the default custom expression functions can be done by:
dmnEngineConfiguration.setCustomExpressionFunctionRegistry( myExpressionFunctionRegistry);