规则引擎-drools-5-决策表
创始人
2024-05-22 11:29:33

文章目录

  • Excel格式决策表 官网地址
  • 决策表使用方式
  • Excel组成部分与drl规则文件对应关系
    • Excel文件内容示例
    • drl规则文件内容
  • Excel决策表内容说明
    • 1. RuleSet
    • 2. RuleTable
    • 3. Attributes
  • 示例
    • Excel
    • 转化drl代码及结果
    • 执行drl代码及结果

Excel格式决策表 官网地址

决策表这部分内容在官网的第16章,其中16.7节是Excel格式的决策表。其他内容决策表我还没研究暂不扩展。
16.7. Spreadsheet decision tables
官网地址:https://docs.drools.org/7.73.0.Final/drools-docs/html_single/index.html#decision-tables-con_decision-tables

决策表使用方式

通过SpreadsheetCompiler API,将按约定定义好的Excel文件内容,转化成drl字符串,从这个角度说,这种Excel格式,也是drools支持的模板类型之一了。
有了drl字符串,后面的使用就和其他drl文件一样了,如可以使用KieHealper将drl字符串加载至drools引擎的生产内存。

Excel组成部分与drl规则文件对应关系

那么,“按约定定义”的Excel文件,约定是什么?也就是Excel需要满足什么样的格式?
三个组成部分:RuleSet、RuleTable、Attributes
Excel文件内容与drl文件内容对应关系如下两个截图:

Excel文件内容示例

Excel截图:

drl规则文件内容

在这里插入图片描述

Excel决策表内容说明

1. RuleSet

在这里插入图片描述

Excel中RuleSet部分,定义的是文件的相关内容,对应drl规则文件中从package到rule关键字之间的部分关键字或对整个规则文件的属性参数定义。
每个参数含义如下:
在这里插入图片描述
其中像import这种可重复使用的定义,可以一个单元格写多个引用,但需要用“,”隔开,如本文截图示例中一样。

2. RuleTable

在这里插入图片描述
这部分对应drl文件中的rule关键字模块,即rule-when-then-end中的内容
其中Name是规则rule后面的rule_name的前缀,完整的rule_name是这个前缀+Excel文件行号。
DESCRIPTION:描述,可以理解为是对Excel文件的描述,便于阅读
CONDITION:对应的是drl文件中when的部分其中第1行为pattern类型约束,第2行为属性约束,第3行为注释,第4行开始是具体的条件参数。从第4行开始,每一行将生成1条rule。
ACTION:与Condition对应的结果,对应drl文件中的then部分。

3. Attributes

在这里插入图片描述
属性部分对应drl文件中的属性,属性名放到DESCRIPTION这一行,可以任意位置,每个属性占一列;属性值放到第4行及以后,每一行是一条rule,因此每个属性值都对应每一条rule。

示例

还以此Excel为例:

Excel

在这里插入图片描述

转化drl代码及结果

代码:

		String realPath = "C:\\Users\\Chengyun.Ding\\Desktop\\决策表.xlsx";//指定决策表xls文件的磁盘路径File file = new File(realPath);InputStream is = null;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {throw new RuntimeException(e);}SpreadsheetCompiler compiler = new SpreadsheetCompiler();String drl = compiler.compile(is, InputType.XLS);System.out.println();System.out.println(drl);System.out.println();

执行结果


package rules.excels;
//generated from Decision Table
import com.dcy.drools.excel.Account;
import java.util.List;
import com.dcy.drools.excel.Student;
import com.dcy.drools.excel.Level;
global List list;
// rule values at B13, header at B8
rule "ExcelTable1_13"salience 65535when$account:Account(sex != "女")thenlist.add("性别不对或者分数太低");
end// rule values at B14, header at B8
rule "ExcelTable1_14"salience 65534no-loop truewhen$account:Account(age < 22 || age > 28)thenlist.add("ss");
end// rule values at B15, header at B8
rule "ExcelTable1_15"salience 65533when$account:Account(balance < 1000)thenlist.add("dd");
end

执行drl代码及结果

代码:

 // 执行drlKieHelper kieHelper = new KieHelper();kieHelper.addContent(drl, "rules/excels/excelTable.drl");KieSession sessionStatefull =  kieHelper.build().newKieSession();//设置全局变量,名称和类型必须和规则文件中定义的全局变量名称对应List list = new ArrayList();sessionStatefull.setGlobal("list",list);Account account = new Account();account.setBalance(300D);account.setAge(35);account.setSex("男");sessionStatefull.insert(account);int count=sessionStatefull.fireAllRules(new RuleNameStartsWithAgendaFilter("ExcelTable1"));//激活规则引擎,如果规则匹配成功则执行规则System.out.println("用户balance:"+account.getBalance());System.out.println("list:"+list);//关闭会话System.out.println("总共执行了: "+count+" 条规则");sessionStatefull.dispose();return drl;

结果:

用户balance:300.0
list:[性别不对或者分数太低, ss, dd]
总共执行了: 3 条规则

相关内容

热门资讯

我们这样回答“窑洞之问”   “要砥砺初心使命,持之以恒、久久为功,继续回答好延安‘窑洞之问’,书写无愧于人民的时代答卷。”2...
哈马斯宣布将解散加沙政府机构 ... 格隆汇1月11日|据央视,巴勒斯坦伊斯兰抵抗运动(哈马斯)发言人哈齐姆·卡西姆当地时间10日发表声明...
河北省食品小作坊小餐饮小摊点管... (来源:河北日报)转自:河北日报河北省食品小作坊小餐饮小摊点管理条例(2016年3月29日河北省第十...
辽宁铁人队将重组进攻体系 (来源:辽宁日报)转自:辽宁日报 本报记者 李翔 经过友好协商,帮助辽宁铁人队跻身中超联赛的邦本宜裕...
哥伦比亚国防部称打死一名反政府... 来源:央视新闻客户端当地时间1月10日,哥伦比亚国防部长桑切斯通过其社交媒体宣布,当地时间4日,哥伦...