Spring Boot项目中如何获取Camunda DMN匹配规则详情?
Camunda 7.13.0 获取DMN匹配规则详情的实现方案
在Spring Boot集成Camunda BPMN&DMN的场景下,要获取DMN决策执行时的匹配规则详情(规则ID、输入值、输出值、匹配规则列表等),可以通过自定义DMN评估监听器并配置到流程引擎中来实现,具体步骤如下:
1. 自定义DMN评估监听器
实现DecisionEvaluationListener接口,在DMN决策执行完成后捕获评估细节:
import org.camunda.bpm.dmn.engine.DmnDecisionEvaluationEvent; import org.camunda.bpm.dmn.engine.DmnDecisionEvaluationListener; import org.camunda.bpm.dmn.engine.impl.DmnDecisionTableResultImpl; import org.camunda.bpm.engine.variable.VariableMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CustomDmnEvaluationListener implements DmnDecisionEvaluationListener { private static final Logger LOGGER = LoggerFactory.getLogger(CustomDmnEvaluationListener.class); @Override public void notify(DmnDecisionEvaluationEvent evaluationEvent) { // 获取决策基本信息 String decisionId = evaluationEvent.getDecision().getId(); String decisionName = evaluationEvent.getDecision().getName(); LOGGER.info("执行决策: {}({})", decisionName, decisionId); // 获取决策输入参数 VariableMap inputVars = evaluationEvent.getInputVariables(); LOGGER.info("决策输入参数: {}", inputVars); // 提取匹配规则详情 DmnDecisionTableResultImpl result = (DmnDecisionTableResultImpl) evaluationEvent.getDecisionResult(); result.getMatchingRules().forEach(matchingRule -> { String ruleId = matchingRule.getRule().getId(); VariableMap inputValues = matchingRule.getInputValues(); VariableMap outputValues = matchingRule.getOutputValues(); LOGGER.info("匹配规则ID: {} | 输入值: {} | 输出值: {}", ruleId, inputValues, outputValues); // 将规则详情存入流程变量,供后续业务逻辑使用 evaluationEvent.getExecution().setVariable("matchedRule_" + ruleId, outputValues); evaluationEvent.getExecution().setVariable("allMatchedRules", result.getMatchingRules()); }); } }
2. 配置Spring Boot流程引擎
通过自定义配置类,将监听器注册到Camunda的DMN引擎配置中,覆盖Spring Boot自动配置的默认引擎:
import org.camunda.bpm.dmn.engine.DmnEngineConfiguration; import org.camunda.bpm.spring.boot.starter.configuration.impl.DefaultDmnEngineConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CamundaDmnConfig { @Bean public DmnEngineConfiguration dmnEngineConfiguration() { DefaultDmnEngineConfiguration dmnConfig = new DefaultDmnEngineConfiguration(); // 添加自定义后置评估监听器 dmnConfig.getCustomPostDecisionEvaluationListeners().add(new CustomDmnEvaluationListener()); return dmnConfig.buildEngine().getConfiguration(); } }
3. 获取匹配规则详情
配置完成后,每次DMN决策执行时,监听器会自动捕获匹配规则的所有细节:
- 可通过日志直接查看规则详情
- 已存入流程变量的规则信息,可在BPMN流程后续节点或REST接口中获取,返回给前端UI
注意事项
- 确保使用Camunda 7.13.0对应的API,
DmnDecisionTableResultImpl的getMatchingRules()方法是该版本中获取匹配规则的有效方式 - 自定义配置类会覆盖Spring Boot自动配置的默认DMN引擎,需确保监听器注册逻辑正确
内容的提问来源于stack exchange,提问作者Prince Abhijeet
相关产品推荐
相关产品推荐

