URULE决策集-配置项

概述

决策集中配置项分为三个部分,运行模式、日志输出、父规则文件,运行模式包含默认模式和顺序模式,日志输出主要是是否开启全局日志,父规则文件主要是继承。下面详细介绍一下它们用法

  1. 运行模式

  1. 默认模式

规则集在默认模式下会把当前文件中所有所有规则编译成一棵规则树,根据输入对象先进行条件匹配计算,计算好后再根据规则设定的优先级来执行所有匹配规则的动作部分

如果存在两个规则A、B,A规则的优先级高于B,A规则根据输入默认对象属性值条件可以满足,而B规则根据输入对象条件不满足,这时执行A规则动作部分,在动作中将输入对象某属性改为另外一个值,经过这个修改,B规则此时条件满足了,但在默认模式下,所有规则的条件匹配动作已经完成了,所以在A规则的动作部分将输入对象某属性改为B规则满足的值后,B规则也不会尝试重新匹配条件以执行B规则条件满足后的动作部分。

要实现这一功能,我们可以在A规则条件满足后的修改输入对象某属性值的动作后添加一个“更新工作区”的函数,更新这个修改后的输入对象,以使这个对象能重新匹配所有的规则,看看有没有满足条件的,这样B规则才会被重新激活;或者使用“执行组”属性也能达到同样的目的,也就是给B规则添加一个“执行组”属性,在A规则条件满足后的修改输入对象某属性值的动作后加上激活B规则对应的执行组。

执行组含义:系统会自动将此属性相同的规则划为一组,默认情况下,引擎不会执行这个组里的规则,需要我们在定义规则动作时利用系统内置的函数显示的指定要激活执行的执行组名,这样系统才会尝试匹配并执行组里的规则

  1. 顺序模式

顺序模式下,当前规则集里的所有规则将不会被编译成一整棵规则树,而是每个规则都会独立的编译成一个规则树,运行的时候,会根据规则定义的优先级属性依次运行这些规则,这样,对于存在上述逻辑情况的业务来说,我们只需要修改运行模式为“顺序模式”,同时为各个规则定义好优先级,那么它们就会逐个执行,优先级较高的规则先执行,执行后的动作部分如果存在对业务数据的修改,就会直接影响到后面规则条件的匹配,不再需要使用“更新工作区”以使规则重新尝试匹配或者使用“执行组”属性对规则执行顺序进行编排,这样可以大大简化业务规则定义的复杂度。

注意事项

顺序模式”下,因为规则是一条条匹配,所以性能上相比“默认模式”要差一些,如没有特殊需要不建议采用“顺序模式”。

对于循环规则里的若干个循环单元在运行时,还是会采用默认模式运行机制运行,而不会去理会规则文件层面运行模式是什么。

  1. 日志输出

向导式规则集文件当中,为了更好的统一控制日志开关,在设计器上方的配置按钮菜单下提供了一个针对当前文件级的日志开关控制的菜单项

一旦我们配置了这个菜单项里的日志开关,那么当前规则文件中没有显示配置是否允许日志输出的规则将采用这里配置的日志开关属性,如果单个规则中配置了日志输出属性,那么将覆盖工具栏中统一配置的日志开关属性。

只开启配置项里面日志输出时,日志如下:

当规则文件中设置了允许调试信息输出的属性,则覆盖配置项中的日志配置信息

在URule Pro中还提供了一个名为urule.debug的系统属性,该属性值默认为true,这时所有调试信息默认都会直接在日志中打印,当将产品部署到生产环境中时,我们需要将urule.debug属性设置为false,这样所有调试信息都不会再输出,这其中也包括URule规则集里提供的名为“打印内容到控制台”的动作,这样就可以快速完成项目上线,而不用担心项目中因有大量调试信息输出而需要重新修改规则属性的问题

日志输出目的地配置

在代码中调用规则时,如果也要在本地查看调试信息,那么首先需要将urule.debug属性设置为true,接下来为urule.defaultHtmlFileDebugPath属性设置一个具体的已存在的目录值即可。 设置好urule.defaultHtmlFileDebugPath属性后,默认会向这个属性对应的目录中输出以HTML格式的日志文件(默认情况下urule.defaultHtmlFileDebugPath属性值为空,不会输出任何日志文件),输出的HTML日志文件采用的是时间戳命名方式,在生产环境下建议清空urule.defaultHtmlFileDebugPath属性,以免调试信息输出对性能产生影响。

在使用API调用规则时需要在session.fireRules()或session.startProcess(...)方法后加上session.writeLogFile()方法,这样才会执行日志写入操作
  1. 父规则文件

在决策集编辑器中,点击工具栏的配置按钮,在弹出菜单中选择**父规则文件**可以为当前决策集定义一个或多个父规则文件。

定义一个父级决策集

test决策集添加父文件后,可以看到父文件也执行了。

修改父级决策集的规则名称,

测试如下:

在决策集中可以看到,在弹出的父规则文件窗口中,我们可以选择一个或一个以上的决策集文件作为当前决策集文件的父规则文件。
如果为某个决策集文件指定了父规则文件,那么这个决策集文件在运行时,会将指定的父规则文件中所有的规则加载并运行,同样,如果父规则文件也指定的父规则文件,这样文件中定义的规则也会被加载运行,依次类推。
在规则文件的父子定义当中,引擎还提供了规则覆盖功能。在子规则文件中,如果需要覆盖其父规则文件中定义的某个特定的规则,那么只需要在子规则文件中定义一个同名的规则,这样就可以将其父规则文件中对应的同名规则覆盖,引擎运行时只会运行子规则文件中对应的规则,而不会运行父规则中同名规则。
父子规则文件继承覆盖如下图所示:
在上图当中,如果**规则文件A**继承了**父规则文件2**,父规则文件2又继承了**父规则文件1**,那么在规则文件A中就会自动将父规则文件1和父规则文件2中定义的规则A、B、C、D继承下来,同时如果在规则文件A中也定义了一个**规则D**,那么将会覆盖父规则文件2中的**规则D**。
需要注意的是,当其他决策集引用父规则文件并调用父规则文件中的执行组时,如果需要对这个决策集测试,需要将决策集和父规则文件都加入到知识包中进行快速测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值