DMN决策表与DRG决策图
这一章,我们将创建新的DMN决策表,并将两个DMN决策表组成一张DRG决策图,最后通过JAVA调用,获得两个决策表协同得到的结果。
DMN与DRG:
DMN本质上就是一组输入输出的对应关系,体现的是一个简单决策,不应该过于复杂,对于需要多次决策才能得到答案的复杂决策,可以将多个简单的DMN连接起来,组成DRG决策图。
DRG与DRD
DRD是使用可视化的方式显示和编辑DRG的方式,因为Camunda Modeler是可视化的,所以在Camunda Modeler中显示未DRD
配置DRD决策图
点击左上角的 Edit DRD 切换到 DRD编辑界面
就像编辑流程一样,点击空白处,修改DRD的id为 bmi-health
,Name为 BMI Health
创建新的DMN决策到DRD
现在可以创建一个新的决策了,我们希望在评估完BMI类型后给出建议,则拖动左侧正方形到画布,双击修改名称为 BMI Suggestion
,切换类型为 Decision Table,最后修改id为 bmi-suggestion
点击 “BMI Classification” 节点,选择弹出的连线,连接到新的“BMI Suggestion”节点,这表示,新节点依赖于“BMI Classification”
编辑“BMI Suggestion”决策
点击 “BMI Suggestion” 节点左上角的表格按钮,进入编辑界面,输入内容如下:
“Input”为result
,“Expression”为 result
“Output”为suggestion
,“Expression”为 suggestion
在JAVA中执行
执行DRG决策图的方法就是执行它的最后一个节点,因为DRG的节点之间具有依赖关系,在执行最后一个节点前会执行它所以来的决策
所以新增的代码与执行DMN一样,修改后的主类如下:
// ...
@SpringBootApplication
@EnableProcessApplication
public class WebappExampleProcessApplication {
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("bmi-classification", variables);
String result = dmnDecisionTableResult.getSingleEntry();
LOGGER.log(Level.INFO, "\n\nBMI Classification result is : {0}\n\n", result);
// >>>> 新增
DmnDecisionTableResult suggestionResult = decisionService
.evaluateDecisionTableByKey("bmi-suggestion", variables);
String suggestion = suggestionResult.getSingleEntry();
LOGGER.log(Level.INFO, "\n\nBMI Classification suggestion is : {0}\n\n", suggestion);
// <<<<
}
}
重新编译并运行,可以看到 Spring Boot 输出:
BMI Classification suggestion is : 没建议
表示执行成功
到此第八部分结束,如果想直接获取到现在为止的进度,可以下载zip包,或者使用如下命令
git clone https://gitee.com/zoollcar/camunda-get-started-spring-boot-and-dmn.git git checkout -f Step-8
恭喜:你已经完成了快速入门的全部内容,想要继续学习,请前往Camunda 文档.
也可以关注我的博客 http://shaochenfeng.com,后续也会继续推出更多Camunda文档翻译或教程