运行模式
规则集在默认模式下会把当前文件中所有所有规则编译成一棵规则树,根据输入对象先进行条件匹配计算,计算好后再根据规则设定的优先级来执行所有匹配规则的动作部分。
如果存在两个规则A、B,A规则的优先级高于B,A规则根据输入默认对象属性值条件可以满足,而B规则根据输入对象条件不满足,这时执行A规则动作部分,在动作中将输入对象某属性改为另外一个值,经过这个修改,B规则此时条件满足了,但在默认模式下,所有规则的条件匹配动作已经完成了,所以在A规则的动作部分将输入对象某属性改为B规则满足的值后,B规则也不会尝试重新匹配条件以执行B规则条件满足后的动作部分。
要实现这一功能,我们可以在A规则条件满足后的修改输入对象某属性值的动作后使用“执行组”属性也能达到这一的目的,也就是给B规则添加一个“执行组”属性,在A规则条件满足后的修改输入对象某属性值的动作后加上激活B规则对应的执行组。
可以看到,在默认模式下,对于存在大量相互依赖的向导式规则来说,上述两种方式用起来还是很麻烦的。要想用一种简单且容易理解的方式实现上述功能,可以规则运行模式由默认模式改为顺序模式。 通过向导式规则集的工具栏配置菜单按钮下的运行模式菜单项,即可实现将默认模式修改为顺序模式,如下图所示:
在顺序模式下,当前规则集里的所有规则将不会被编译成一整棵规则树,而是每个规则都会独立的编译成一个规则树,运行的时候,会根据规则定义的优先级属性依次运行这些规则,这样,对于存在上述逻辑情况的业务来说,我们只需要修改运行模式为“顺序模式”,同时为各个规则定义好优先级,那么它们就会逐个执行,优先级较高的规则先执行,执行后的动作部分如果存在对业务数据的修改,就会直接影响到后面规则条件的匹配,不再需要使用“执行组”属性对规则执行顺序进行编排,这样可以大大简化业务规则定义的复杂度。
需要指出的是“顺序模式”下,因为规则是一条条匹配,所以性能上相比“默认模式”要差一些,如没有特殊需要不建议采用“顺序模式”。
注意:对于循环规则里的若干个循环单元在运行时,还是会采用默认模式运行机制运行,而不会去理会规则文件层面运行模式是什么。