Skip to end of metadata
Go to start of metadata

URule2技术交流QQ群及在线体验示例

在线体验示例:http://112.124.15.63:8084/ 为了不同用户操作互不影响,需要注册账号登录体验操作。

URule2技术交流QQ群:423339793

URule2规则引擎产品教学视频:https://pan.baidu.com/s/1oAeJeCM,密码:evsk

       决策流类似于工作流,用来对已有的决策集、决策表、决策树、评分卡或其它决策流的执行顺序进行编排,以清晰直观的实现一个大的复杂的业务规则。URule规则引擎中的决策流可以实现对已有的决策集、决策表、决策树、评分卡或其它决策流并行执行、串行执行、根据条件选择执行或直接在规则流中执行相关方法或脚本。URule中提供了一个基于网页的流程设计器,通过简单拖曳既可快速实现对已有的决策集、决策表、决策树、评分卡或其它决策流执行顺序的编排。

关于设计器

URule的决策流设计器基于FlowDesigner项目实现,该项目在Github上的地址为:https://github.com/jacky6024/flowdesigner

       URule的决策流设计器效果如下图所示:

       在这个流程设计器当中,上面是工具栏,下面是设计区,在工具栏第一排可实现流程模版的保存、选择、创建连接、重做、取消、风格吸附、删除、竖直居中对齐、水平居中对齐及将多个选中节点设置成相同尺寸等工具。第二排就是URule决策流中支持的流程节点,URule决策流中共有八种类型的节点,分别是开始节点、规则节点、规则包节点、动作节点、脚本节点、决策节点、分支节点、聚合节点。

 

关于流程的结束

需要注意的是,URule的决策流中没有结束节点,在URule的决策流当中,决策流必须要以开始节点开始,可以在任何分支以任意节点结束,这点与类似UFLO 之类的工作流引擎不同,UFLO 之类的工作流引擎要求流必须要以开始节点开始,同时任何分支都必须要以结束节点结束。

 

创建决策流

       打开URule规则引擎控制台,在项目的“决策流”节点点右键,从右键菜单中选择创建决策流,创建一个新的决策流文件,如下图:

       在设计器的设计区中,属性面板是可移动的,我们可以通过鼠标点击属性面板任何部位来移动它。可以点击工具栏第二行上的流程节点图标,在设计区添加节点,在URule的决策流中,节点图标的尺寸是可以通过鼠标改变的;节点创建完成后,可点击工具栏第一行上的连线图标,在节点间添加连接。点击工具栏上的选择图标,可实现节点或连线的选择,选择方式可以是点选,或拖选。节点或连接选中后就可以在属性面板上修改它们的属性,点击选择图标后,在设计区空白处点击就可以配置决策流的全局属性,如定义决策流ID,需要导入的库文件等。

       决策流的全局属性有两块,第一块就是决策流的ID,这个很重要,在一知识包中,如果有多个决策流,那么决策流ID要唯一;第二部分是导入相关库文件,这与之前介绍的决策集、决策表、决策树、评分卡一样,唯一不同是这里的库文件管理放在了属性面板上。

开始节点

       开始节点,是一个规则流开始的地方,在URule当中,决策流必须要以开始节点开始,开始节点的属性比较简单,只有两个,如下表所示:

属性名
数据类型
描述
节点名称String设置当前节点名称
事件BeanString一实现了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程进入及离开该节点时会触发这个实现类

       NodeEvent接口源码如下:

NodeEvent源码

       开始节点出入连接线如下表所示:

流入的连接线流出的连接线
01

规则节点

       所谓规则节点,用来绑定URule当中提供的决策集、决策表、决策树、评分卡或其它决策流的。值得注意的是,一个规则节点只能与一个当前项目中决策集、决策表、决策树、评分卡或其它决策流绑定,这样一旦决策流流转到当前节点,那么就可以执行与这个规则节点绑定的决策集、决策表、决策树、评分卡或其它决策流。在设计器中,选中目标规则节点,就可以在属性面板中设置其相关属性,规则节点属性如下:

属性名数据类型描述
节点名称String设置当前节点名称
事件beanString一实现了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程进入及离开该节点时会触发这个实现类
文件String与当前节点绑定的决策集、决策表、决策树、评分卡或其它决策流文件
版本String与当前节点绑定的决策集、决策表、决策树、评分卡或其它决策流文件的版本

       规则节点出入连接下如下表所示:

流入的连接线流出的连接线
1~n0~1

知识包节点

      与规则节点不同,知识包节点是用来与具体的知识包绑定的,这样就可以实现复杂规则调用,知识包节点与某个知识包绑定之后,运行时规则流流转到这个节点后,就会执行与之绑定的知识包(如果绑定的知识包中包含决策流,那么引擎会自动执行其中的决策流,否则只执行触发规则动作)。

      知识包节点属性如下表所示:

属性名称数据类型描述
节点名称String设置当前节点名称
事件beanString一实现了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程进入及离开该节点时会触发这个实现类
知识String要与当前节点绑定的具体的知识包,我们可以通过下拉列表选择当前项目下已创建好的可用知识包。

       知识包节点出入连接线如下表所示:

流入的连接线流出的连接线
1~n0~1

动作节点

       动作节点可以与一个实现了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的Bean绑定,这样在运行时,规则流执行到这个动作节点时就会执行与之绑定的FlowAction实现类,动作节点属性如下表所示:

属性名称数据类型描述
节点名称String设置当前节点名称
事件beanString一实现了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程进入及离开该节点时会触发这个实现类
动作beanString一个实现了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的Bean的ID。

       FlowAction接口源码如下所示:

FlowAction源码

      动作节点出入连接线如下表所示:

流入的连接线流出的连接线
1~n0~1

脚本节点

       顾名思义,脚本节点就是可以在这个节点上绑定一段脚本,这样在运行时,规则流流转到该节点时就可以执行这段脚本。脚本节点上的脚本属性就是我们编写要执行的脚本的地方,如下图所示:

       在脚本属性中,我们提供了一个脚本编辑器,通过这个编辑器,结合代码提示(快捷键ALT+"/")可快速编写要执行的脚本。脚本节点中编写的规则,完全遵循脚本式决策集中普通规则的then与end之间动作脚本编写语法规范。也就是说,脚本节点中添加的脚本没有if、then、end及条件判断脚本,有的只是执行动作的脚本。

       在脚本节点中导入相关的参数、变量、常量、动作库文件,就可以在脚本中为参数或变量赋值、执行目标方法、利用内置函数out向控制台输出内容等操作,如下图的脚本节点中编写的脚本代码所示:

       脚本节点出入连接线如下表所示:

流入的连接线流出的连接线
1~n0~1

决策节点

       所谓决策节点就是指在运行时,根据为其下流出连接配置的条件来决定究竟应该走哪条连接的节点,所以根据这一特性,决策节点下流出连接至少要有两条,否则决策节点就没有意义了。

       选中决策节点,在其右边属性面板中就可以看到针对决策节点的配置,如下图所示:



       需要重点介绍的是“决策类型”属性,决策节点的有两种决策类型,分别是"条件"和"百分比"。当选择决策类型为条件时,就会看到如上图所示效果。选择“条件”类型时,在下面出现的在决策项当中,我们可以根据当前决策节点下流出连接的数量添加对应的决策项,对于每条决策项,都有两个属性,分别是"条件脚本"和“流向”,在条件列当中,我们可以编写具体的条件(一个或多个,其语法遵循脚本式规则中条件部分的语法规范),在流向列中选择当条件列中定义的条件满足时要流出连线名称,所以对于决策节点下流出的连线,我们必须要为其设置名称,否则就无法为其定义决策项。同样在编写决策项条件时,可以通过快捷键ALT+"/"来显示代码提示,以快速完成条件代码的编写工作。

       如果将决策类型改为“百分比”,则可以看到如下图所示效果:

       如上图所示,一旦将决策类型改为“百分比”,那么就可以为每个流向设置流量百分比,如上图当中,在实际规则流运行时,将有30%走"c1"连线,70%走"c0"连线。无论决策节点有多少离开连线,最终所有的百分比加在一起要达到100%,百分比这里一定要是一个合法的整数,否则会出现错误。

       对于“百分比”类型的计算有效期为当前线程,一旦有新线程开启,那么这个百分比的值将开始重新计算。

       值得注意的时,当选择决策类型为“条件”,在运行时,当决策流流转到当前节点时,如果决策项中定义的各个条件都不满足,那么规则流到此就结束了,相反,如果有多个决策项满足时,那么系统将取第一条满足条件的决策项对应的流向连线进行向下流转,而不会选择所有满足条件的连线向下流转。

       决策节点出入连接线下如下表所示: 

流入的连接线流出的连接线
1~n1~n

分支节点

       分支节点是URULE当中提供的一种可实现规则流多条并行的一种节点,通过这个节点,根据当前节点下流出连线数量,可将当前规则流实现拆分成若干条子的规则流实例并行运行,根据这一特性,所以分支节点下至少要有两条流出的连线才有意义。在决策流实例流转到分支节点时,分支节点会根据其下流出的连接线数量将主的实例拆分成与连线对应的若干个子实例,以并行方式继续运行产生的多个流实例。

       分支节点出入连接线如下表所示: 

流入的连接线流出的连接线
1~n1~n

聚合节点

       聚合节点就是用来聚合由分支节点拆分出来的多个子的规则流的,所以有聚合节点,就一定要有分支节点,但有分支节点却不一定需要聚合节点,对于URule的决策流来说,拆分出子的决策流后是否有聚合节点是可选的,但聚合节点的出现则一定要有分支节点来配合,否则聚合节点就没有意义了。

       聚合节点出入连接线如下表所示: 

流入的连接线流出的连接线
1~n0~n

示例

       下图中是一个简单的决策流定义,它由一个开始节点、三个脚本节点和一个决策节点构成。

       在这个决策流中,我们定义它的ID为“flow-demo”,同时导入了我们之前定义好的包含“会员”的变量库文件。决策流在经过“开始”节点后,进入“脚本1”节点,这个节点上定义的脚本比较简单,只是简单向控制台输出一段文本,如下图:

       接下来就进入“决策”节点,在决策节点,我们选择的是“条件”作为决策类型,分别定义了两条连线的流向条件,如下图:

       流向“to2”连线上定义的条件内容如下图:

       流向“to3”连线上定义的条件内容如下图:

       从上面的两张图中可以看到,当会员对象的等级属性在0~5之间时选择"to2"连线;在5~10之间时选择"to3"连线。

       决策节点下面是两个脚本节点,为他们定义脚本内容如下图:

 

       决策流定义的信息就是这些,接下来我们在知识包节点对其进行仿真测试,看看运行路径是不是如我们所预期。

       打开“知识包”节点,在其下创建一个新的知识包,将这个决策流文件添加到知识包中,点击工具栏上的“仿真测试”按钮,在弹出的窗口中输入“会员”的等级属性值,如下图:

       点击工具栏上的“测试决策流”按钮,在弹出的窗口中选择我们定义的“flow-demo”,点击“操作列”上的测试图标,既完成了对当前决策流的测试,如下图:

         查看控制台,可以看到如下图所示的内容输出:

       决策流如我们预期的顺序执行。

Labels
  • No labels