一、概述:
在URule Pro当中定义好各种类型的规则文件后,需要将要调用的规则文件通过规则项目的“知识包”节点将文件打包后才可以被业务系统调用。对于业务系统来说,和规则引擎打交道的地方就是知识包,无论是SDK调用还是Rest服务调用,都是先获取知识包再执行知识包中的决策集或决策流的。
一个知识包可以包含多个决策集和决策流,如下图:
知识包的ID就是对外暴露服务的ID编号,在维护知识包的时候可以看到这个ID:
如上面范例,如果我们要调用card_choles的知识包,则代码编写大致如下(详细说明参考API调用):
KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
//通过KnowledgeService接口获取指定的知识包card_choles对应的知识包
KnowledgePackage knowledgePackage=service.getKnowledge("1");
而对于已经创建好的知识包,我们还需要通过知识包的启用和发布等环节才能正式对外提供知识包的调用服务,整个管理的步骤如下:
我们可以在我的任务页面对知识包进行审批管理:
二、知识包创建
知识包是URule Pro对外提供服务的核心模块,各种规则文件可以被添加到知识包中,而由知识包对外提供服务。
知识包菜单
首先我们要找到知识包的菜单项,如下图所示:
添加知识包
单击知识包管理页面左上角的添加知识包按钮:
在编辑页面中填写相关知识包的信息:
添加文件
然后单击添加文件按钮:
在弹出窗口中选择希望包含的文件:
一个知识包可以添加多个规则文件:
当知识包中添加多个规则文件,最终执行时,并不会按照从上到下的顺序执行调用,如果业务规则有先后调用顺序的需求,需要通过规则文件调用函数或者决策流来明确调用顺序。
另外,如果规则文件A调用规则文件B,知识包只需要添加规则文件A即可,知识包会自动将关联的规则文件B编译打包。
删除文件
可以在文件列表中右键单击,在弹出菜单中删除对应的文件:
删除知识包
可以在知识包列表中右键单击,在弹出菜单中删除对应的文件:
删除知识包的时候,知识包对应的规则文件也会被自动删除!
三、知识包测试
在URule Pro当中定义好各种类型的规则文件后,需要将要调用的规则文件通过规则项目的“知识包”节点将文件打包后才可以被业务系统调用。 规则包在调用前需要对定义好的知识包进行各种测试,在URule Pro中就提供了两种不同类型的针对知识包的测试方法,分别是快速测试和基于场景的批量测试,前者是单条数据测试,后者是多条数据测试。在目标知识包上点击右键,从弹出的菜单中就可以看到它们,如下图所示:
快速测试
所谓的快速测试,可以在弹出的窗口中输入相关业务数据后提交到后台即可对当前知识包进行的测试,选中一个知识包,点击其操作菜单里的的“快速测试”菜单项,即可弹出快速测试窗口进行测试。
在这个新的快速测试窗口当中,工具栏上只有两个按钮,第一个就是在定义好输入、输出数据后需要点击触发规则的按钮,另一个就是用于查看当前知识包编译后对应的规则树(如果当前知识包里只有一个规则流文件或规则中采用“顺序模式”执行,则不会显示树信息), 接下来我们需要添加“输入”对象,然后添加对象的具体字段并为字段填充合适的值(同种类型的输入对象可以添加多个,引擎会全部提交并触发执行);再往下是选择我们在执行规则后期望看到的输出信息,添加输出的方法也是先添加对象,再选择对象的字段即可; 如果不添加输出,那么执行规则后则看不到任何信息。
在添加输入字段时,如果字段类型是List或Object类型,那么输入框将是一个文本域,提示我们要输入一段集合类型的JSON或对象类型的JSON,当然我们也可以根据字段名旁边的按钮来快速添加一个对象的集合类型或一个对象的JSON格式,然后只需要修改JSON值即可。 关于JSON格式的详细要求,可以参照下面要介绍的“批量测试”中针对复杂对象JSON格式的定义介绍,这里不再赘述。
一个定义好的输入、输出信息并执行完规则后的效果如下图所示:
一旦我们点击了工具栏上的“开始测试”按钮,引擎在提交数据进行规则测试的同时还会把当前定义的输入、输出信息保存起来,这样下次再打开这个知识包的快速测试窗口就可以看到上一次测试的输入、输出信息。
快速测试窗口中,测试规则与规则流合二为一,引擎在执行时会判断当前知识包中有没有规则流,如果有就执行这个规则流,如果没有就执行规则,这样对于我们使用来说要简单很多。
基于场景的批量测试
基于场景的批量测试是一个基于场景的、复杂的、可生成测试报告的、批量测试功能。
选中一个知识包,点击工具栏上的基于场景的批量测试按钮,就可以打开针对当前知识包的基于场景的批量测试窗口,如下图所示:
在这个窗口中,可以通过“添加测试项”按钮为当前知识包添加若干个批量测试方案,点击该按钮后效果如下图所示:
对于一个测试方案,需要有一个名称及描述信息,接下来可以点击“Excel模版配置与下载”按钮,对当前知识包的输入与输出数据进行配置,如下图所示:
如上图所示,在这个窗口中,有两大块内容,分别是输入数据定义和输出数据定义,这两块内容都把当前知识包中采用的变量及参数罗列出来,对于我们来说只需要选择相关的参数及变量即可。
在输出数据定义里,可以看到每一项后面都有一个比较操作符选择列表,它的作用是用来将Excel里输入的预期结果与知识包里运行结果进行比较的,从而判断我们在Excel里的定义预期结果是否正确,从而达到批量测试目的。
勾选好输入和输入字段后就可以点击窗口下面的“下载Excel模版”按钮,下载后的Excel有两个Sheet页,分别显示输入和输出数据,我们需要做的就是填写对应的数据就好,下图向我们展示了下载后的Excel模版的输入数据页与输出数据页。
从截图上可以看出,生成的Excel严格按照我们配置的字段生成。
在“场景”这个sheet页中,定义了所有的输入数据信息,对每条输入数据都需要定义一个“方案标识”与“描述”信息。一般来说“方案标识”我们直接采用数字标识即可,要保证每条“方案标识”的唯一性;而“描述”则是一段文字 描述,可以根据这条数据定义情况加以描述;这两个字段后面就是我们定义的输入数据。
在“预期结果”sheet页中,定义了知识包计算完成后某些字段的预期结果。可以看到每条预期结果也有一个“方案标识”字段,这个“方案标识”字段与“场景”这个sheet页中“方案标识”字段一一对应,也就是说只有“场景”sheet页里定义好的“方案标识”这里才可以使用,不能随意定义。下图中是个定义了五条场景数据的Excel模版:
在下图中,要特别注意红框标记的部分,在这里“客户”对象“拥有的卡”属性实际上是一个List集合,所有这里在Excel中对于这种类型的数据定义采用的是JSON的格式,对于URule Pro来说,复杂对象的输入可以采用标准的JSON格式,URule Pro会自动进行解析并填充。上图中List 类型的JSON内容如下所示:
[
{
"name": "卡",
"fields":{
"no": "21412234",
"name": "卡名称",
"limit": 2000
}
}
]
我们知道了List类型值通过JSON填充的方式,那如果对应属性是单个对象又该如何处理呢?其实看看List类型的JSON我们就应该明白了,把List类型JSON外面[]去掉,里面就是一个个的对象,拿出其中一个对象,就是我们需要的单个对象的JSON格式,比如上面的“卡”对象:
{
"name": "卡",
"fields":{
"no": "21412234",
"name": "卡名称",
"limit": 2000
}
}
如果某属性对应的是一个普通的对象类型,不是一个List类型,那么就可以采用上面“卡”对象JSON格式来定义数据就好。 实际使用中,可能我们的数据格式比较复杂,存在较多层的对象嵌套,对于多重对象嵌套,这里同样也是支持的,我们唯一需要做的就是按照格式要求定义好JSON数据就好,如下面的JSON数据所示:
[
{
"name": "卡",
"fields": {
"no": "21412234",
"name": "卡名称",
"limit": 2000,
"cardDetails": [
{
"name": "卡明细",
"fields": {
"id": "101",
"time": "2019"
}
}
]
}
}
]
可以看到在上述中,复杂数据的JSON格式与我们通常看到的描述对象的格式不太一样,每个对象都需要一个name属性用于标识该对象对应的变量库里的对象分类名,之所以这样做,是因为JSON的数据格式是一种弱类型的数据格式,而规则引擎里需要的数据 是一种需要指定对象类型及数据类型的强类型格式,所以才要求我们提供上述格式的JSON数据。
在实际使用过程中,如果我们已经有了一种普通的JSON对象数据,需要将其转换成批量测试所需要的JSON格式,还是有一些麻烦的,为此,URule Pro内置了一个用于转换普通JSON为批量测试所需要的JSON的工具,其URL为:http://[ip]:[port]/[contextpath]/urule/json,打开后的效果如 下图所示:
输入一段普通的JSON对象数据,点击工具栏上的转换按钮,就可以将输入的普通JSON对象转换为URule Pro批量测试时所需要的JSON格式,如下图所示:
转换完成后,余下的工作就是把转换好的JSON中的“待填写的变量分类名”换成当前待测试的知识包中引用的变量库里的具体的变量分类名称即可。
Excel模版定义完成后,就可以在“测试方案配置”窗口中将其上传并保存,如下图:
配置好测试方案后,就可以点击方案记录上的测试按钮,对当前方案进行测试,如下图:
运行完成后即可查看测试报告,如下图所示:
从测试报告中可以看到每条场景的用时、与预期结果的匹配情况,如果需要我们还可以看它的输入输出数据,已经日志。
知识包启用
对于已经添加好的知识包,可以直接做测试,但是如果我们希望知识包对业务系统启用服务,则需要启用知识包并发布知识包。
启用知识包
我们可以在对应的知识包上右键单击:
选择菜单中的启用当前知识包菜单项:
在弹出界面中,单击按钮发起启用申请:
填写相关的申请说明,并单击提交按钮。
查看启用申请
提交申请后可以在系统的我的任务菜单项的“我提交的"列表中找到自己提交的知识包启用申请记录。
审批人设置
默认情况下审批人是项目的所有者,就是项目的创建人,在项目创建的时候就默认指定审批人,你可以在项目主页的设置页面中调整审批人:
在待处理的任务列表中右键单击:
选择审批菜单项:
在审批页面中填写审批意见,并提交就可以完成审批。
对于不同意或驳回的申请,发起方可以再度申请审批。
禁用知识包
对于已经发布的知识包如果希望停止为业务系统提供服务,和启用知识包一样,也要走审批流程,我们可以在知识包列表中右键单击:
一下操作启动知识包审批流程一样,这里就不在描述。
知识包发布
对于已经添加好的知识包,可以直接做测试,但是如果我们希望知识包对业务系统启用服务,则需要先启用知识包并发布知识包。
发布知识包
我们可以在对应的知识包上右键单击:
选择菜单中的发布当前知识包菜单项:
在弹出界面中,单击按钮发起启用申请:
已经发布的知识包,系统会自动用版本做管理,每次发布的时候我们可以输入版本备注,方便区分
填写相关的申请说明,并单击提交按钮。
后面审批流程和之前一样!!!!
我们可以在知识包列表菜单中,打开右键菜单:
选择查看当前已经发布的知识包菜单项:
这儿可以看到当前知识包多次发布的不同版本。
例如当前运行的版本为1.0.2,在某些情况下如果你想切换到1.0.1版本运行,那么可以在版本对应的行上右键单击在菜单中选择启用功能:
对应版本上的状态就已经调整为"已启用"
总结:
这部分讲解了如何创建,启用,发布知识包以及知识包的快速测试和批量测试,下篇文章讲解业务系统如何调用知识包。