在 JAVA 中调用 DMN 决策
在本章中,我们将会学到创建一个DMN决策并部署到流程引擎中,以及在JAVA里调用测试我们的DMN。
我们使用BMI健康状况作为案例,BMI是身高体重的比值,通常用于判断人的胖瘦程度。
创建新的 DMN
启动 Camunda Modeler,点击工具栏最左侧的新建按钮,新建一个 DMN
配置DMN决策
点击画布上默认的DMN决策表,修改在右侧的属性面板中的id
为 bmi-classification
,Name
为 BMI Classification
下一步,点击左上角的表格按钮,进入决策编辑界面
双击 input 区域,input修改为BMI
,Expression修改为bmi
,Type选择douoble
同样的,双击output区域,output修改为 result
,Output Name修改为result
,Type选择string
点击表格左侧的蓝色加号,添加BMI分类规则,最终效果如下:
确保顶部Hit Policy(命中策略)为“UNIQUE(唯一)”,在“唯一”模式下,只有所有规则都是互斥的,一个输入只能匹配一种规则。
默认的规则就是“唯一”,这条规则可以自动匹配,不需要更改。
保存决策表
编辑完成后,点击工具栏“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,可以找到刚才的流程实例,可以看到判定结果