关键词: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
自定义的规则已经验证通过。
作者:分享牛
本文版权归作者和分享牛共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载请注明:分享牛 » flowable DmnRuleService