1、描述

业务规则任务用于同步执行一个或多个规则。Flowable使用Drools Expert,Drools规则引擎来执行业务规则。目前,包含业务规则的.drl文件必须与定义业务规则任务的流程定义一起部署以执行这些规则。这意味着进程中使用的所有.drl文件必须打包在进程BAR文件中,例如任务表单等。有关为Drools Expert创建业务规则的更多信息,请参阅JBoss Drools的Drools文档。

如果您想插入自己的规则任务实现,例如,因为您想要使用Drools或者想要使用完全不同的规则引擎,则可以使用BusinessRuleTask上的类或表达式属性,表现如同一个ServiceTask。

2、图形表示法

业务规则任务通过表格图标可视化。

flowable的RuntimeService中的方法 flowable drools_java

3、XML表示

要执行与流程定义相同的BAR文件中部署的一个或多个业务规则,我们需要定义输入和结果变量。对于输入变量定义,可以用逗号分隔一个过程变量列表。输出变量定义只能包含一个变量名称,用于将执行的业务规则的输出对象存储在流程变量中。请注意,结果变量将包含一个对象列表。如果默认未指定结果变量名称,则使用org.flowable.engine.rules.OUTPUT。

以下业务规则任务执行与流程定义一起部署的所有业务规则:

<process id="simpleBusinessRuleProcess">
	<startEvent id="theStart" />
	<sequenceFlow sourceRef="theStart" targetRef="businessRuleTask" />
	<businessRuleTask id="businessRuleTask" 	flowable:ruleVariablesInput="${order}"
	flowable:resultVariable="rulesOutput" />
	<sequenceFlow sourceRef="businessRuleTask" targetRef="theEnd" />
	<endEvent id="theEnd" />
</process>

业务规则任务也可以配置为只执行已部署的.drl文件中定义的一组规则。必须为此指定由逗号分隔的规则名称列表。

<businessRuleTask id="businessRuleTask" flowable:ruleVariablesInput="${order}"
flowable:rules="rule1, rule2" />

在这种情况下,只有rule1和rule2被执行。

<businessRuleTask id="businessRuleTask" flowable:ruleVariablesInput="${order}"
flowable:rules="rule1, rule2" exclude="true" />

在这种情况下,将执行与流程定义相同的BAR文件中部署的所有规则,除了rule1和rule2之外。
正如前面提到的另一个选择是钩住自己的BusinessRuleTask的实现:

<businessRuleTask id="businessRuleTask" flowable:class="${MyRuleServiceDelegate}" />

现在,BusinessRuleTask的行为与ServiceTask完全相同,但仍然保留了BusinessRuleTask图标,以使我们在此处进行业务规则处理。