在 JAVA 中调用 DMN 决策

在本章中,我们将会学到创建一个DMN决策并部署到流程引擎中,以及在JAVA里调用测试我们的DMN。

我们使用BMI健康状况作为案例,BMI是身高体重的比值,通常用于判断人的胖瘦程度。

创建新的 DMN

启动 Camunda Modeler,点击工具栏最左侧的新建按钮,新建一个 DMN

image-20210530102641913

配置DMN决策

点击画布上默认的DMN决策表,修改在右侧的属性面板中的idbmi-classificationNameBMI Classification

image-20210530123738150

下一步,点击左上角的表格按钮,进入决策编辑界面

image-20210530124215208

双击 input 区域,input修改为BMIExpression修改为bmiType选择douoble

同样的,双击output区域,output修改为 resultOutput Name修改为resultType选择string

image-20210530124706490

点击表格左侧的蓝色加号,添加BMI分类规则,最终效果如下:

image-20210530124813693

确保顶部Hit Policy(命中策略)为“UNIQUE(唯一)”,在“唯一”模式下,只有所有规则都是互斥的,一个输入只能匹配一种规则。

image-20210530161531665

默认的规则就是“唯一”,这条规则可以自动匹配,不需要更改。

保存决策表

编辑完成后,点击工具栏“save”按钮,将流程保存到项目的 src/main/resources目录下。

到此第六部分结束,如果想直接获取到现在为止的进度,可以下载zip包,或者使用如下命令

git clone https://gitee.com/zoollcar/camunda-get-started-spring-boot-and-dmn.git
git checkout -f Step-6

在JAVA中调用DMN决策表

我们将在决策表部署完成后调用测试,因此如下修改主类:

package org.example.loanapproval;

//import ...

import java.util.logging.Level;
import java.util.logging.Logger;

@SpringBootApplication
@EnableProcessApplication
public class WebappExampleProcessApplication {
	
    // 增加logger用于打印决策后的结果
    protected final static Logger LOGGER = Logger.getLogger(WebappExampleProcessApplication.class.getName());

    public static void main(String... args) {
        SpringApplication.run(WebappExampleProcessApplication.class, args);
    }

    @Autowired
    private RuntimeService runtimeService;

    @EventListener
    private void processPostDeploy(PostDeployEvent event) {
        runtimeService.startProcessInstanceByKey("loan-approval");
		
        // >>>> 新增
        DecisionService decisionService = event.getProcessEngine().getDecisionService();
		// 输入参数
        VariableMap variables = Variables.createVariables()
                .putValue("bmi", 20.0);
		// 调用决策
        DmnDecisionTableResult dmnDecisionTableResult = decisionService
                .evaluateDecisionTableByKey("bpm-classification", variables);
        String result = dmnDecisionTableResult.getSingleEntry();
		// 打印结果
        LOGGER.log(Level.INFO, "\n\nBMI Classification result is : {0}\n\n", result);
        // <<<<
    }
}

到此第七部分结束,如果想直接获取到现在为止的进度,可以下载zip包,或者使用如下命令

git clone https://gitee.com/zoollcar/camunda-get-started-spring-boot-and-dmn.git
git checkout -f Step-7

测试一下

编译项目并重新运行,查看 Spring Boot 输出,如果看到:

BMI Classification result is : 正常

表示执行成功了

用浏览器打开 http://localhost:8080/camunda/app/cockpit/ 使用 demo/demo 登录,打开 Decision Definitions,可以找到刚才的流程实例,可以看到判定结果

image-20210530180030428