盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

flowable DmnRuleService

分享牛 2751℃

关键词:flowable DmnEngine,flowable DmnRuleService,DmnManagementService,DmnRuleService,DmnEngineConfiguration,act_dmn_deployment,act_dmn_databasechangelog,act_dmn_databasechangeloglock,

act_dmn_deployment_resource

上文重点讲解flowable中的DmnEngine(动态引擎)的创建以及部署。接下来看一下部署规则文件(目前规则文件必须是dmn作为后缀),当然我们可以扩展源码的方式修改引擎支持的文件后缀。

部署规则文件需要使用DmnRuleService类,当然该功能目前目前处于试验阶段,还有很多的地方需要完善,发现的Bug已经跟官方反馈,我们在使用的时候需要规避一下。

本教程主要分以下几点内容:

一、 规则文件的编辑

二、 规则文件的部署

三、 规则文件的使用

1.1 规则文件的编辑

假如现在有这样一个需求,需要定义一个规则,当输入的变量名称是String类型,并且变量的值以test开始则输出变量shareniu1;如果变量的值以test结束则输出变量shareniu2。这个时候就可以定义如下的一个规则文件。strings_1.dmn的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://www.omg.org/spec/DMN/20151130" id="simple" name="Simple" namespace="http://activiti.org/dmn">

    <decision id="decision" name="Simple decision">

        <decisionTable id="decisionTable">

          <input>

            <inputExpression id="inputExpression1" typeRef="string">

                <text>input1</text>

            </inputExpression>

          </input>

          <output id="output1" label="Output 1" name="output1" typeRef="string" />

          <rule>

            <inputEntry id="inputEntry1">

              <text><![CDATA[.startsWith('test')]]></text>

            </inputEntry>

            <outputEntry id="outputEntry1">

              <text>'shareniu1'</text>

            </outputEntry>

          </rule>

          <rule>

            <inputEntry id="inputEntry2">

              <text><![CDATA[.endsWith('test')]]></text>

            </inputEntry>

            <outputEntry id="outputEntry2">

              <text>'shareniu2'</text>

            </outputEntry>

          </rule>

        </decisionTable>

    </decision>

</definitions>

1.2 规则文件的部署

上述的规则文件定义完毕之后,开始将其进行部署,如下所示:

@Test

public void dmn() { repositoryService.createDeployment().name("secondDeployment").disableSchemaValidation()

.addClasspathResource("com/shareniu/flowablestudy/ch3/strings_1.dmn")

.tenantId("testTenant")

.deploy();

}

上述文档部署之后,act_dmn_decision_table表的数据变化如下:

 

注意:上述代码中的disableSchemaValidation必须使用,否则无法部署,这是flowable的一个Bug导致的。

1.3 规则文件的使用

上述所有工作完毕之后,接下来定义一个测视类,并输入不同的规则,以验证规则是否生效,如下所示:

@Test

public void executeDecision_String_on_input() {

MapprocessVariablesInput = new HashMap();

processVariablesInput.put("input1", "Stringtest");

RuleEngineExecutionResult result = ruleService.executeDecisionByKey(

"decision", processVariablesInput);

System.out.println(result.getResultVariables().get("output1")

.getClass());

System.out.println(result.getResultVariables().get("output1"));

processVariablesInput.clear();

processVariablesInput.put("input1", "testString");

result = ruleService.executeDecisionByKey("decision",

processVariablesInput);

System.out.println(result.getResultVariables().get("output1")

.getClass());

System.out.println(result.getResultVariables().get("output1"));

}

没出意外的话,控制台的输出信息如下:

class java.lang.String

shareniu2

class java.lang.String

shareniu1

自定义的规则已经验证通过。

作者:分享牛

出处:http://www.shareniu.com/

本文版权归作者和分享牛共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载请注明:分享牛 » flowable DmnRuleService