DMN决策表与DRG决策图

这一章,我们将创建新的DMN决策表,并将两个DMN决策表组成一张DRG决策图,最后通过JAVA调用,获得两个决策表协同得到的结果。

DMN与DRG:

DMN本质上就是一组输入输出的对应关系,体现的是一个简单决策,不应该过于复杂,对于需要多次决策才能得到答案的复杂决策,可以将多个简单的DMN连接起来,组成DRG决策图。

DRG与DRD

DRD是使用可视化的方式显示和编辑DRG的方式,因为Camunda Modeler是可视化的,所以在Camunda Modeler中显示未DRD

配置DRD决策图

点击左上角的 Edit DRD 切换到 DRD编辑界面

image-20210530182650448

就像编辑流程一样,点击空白处,修改DRD的id为 bmi-health ,Name为 BMI Health

创建新的DMN决策到DRD

现在可以创建一个新的决策了,我们希望在评估完BMI类型后给出建议,则拖动左侧正方形到画布,双击修改名称为 BMI Suggestion,切换类型为 Decision Table,最后修改id为 bmi-suggestion

image-20210530183511220

点击 “BMI Classification” 节点,选择弹出的连线,连接到新的“BMI Suggestion”节点,这表示,新节点依赖于“BMI Classification”

image-20210530184112199

编辑“BMI Suggestion”决策

点击 “BMI Suggestion” 节点左上角的表格按钮,进入编辑界面,输入内容如下:

“Input”为result ,“Expression”为 result

“Output”为suggestion ,“Expression”为 suggestion

image-20210530185323584

在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文档翻译或教程