You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:45:32