如何在Excel中编写实现字段级联依赖的Drools规则
Drools Excel决策表规则实现方案
针对你提到的多字段联动场景,直接给出落地的Excel规则编写方式,对应三个联动逻辑:
一、Excel决策表基础结构
Drools Excel规则表分为条件区(CONDITION)和动作区(ACTION),表头需按Drools规范设置,核心列包括:
- RuleSet:规则集名称(比如
LoanProductRules) - RuleTable:规则表名称(可分三个表对应三个逻辑,或合并为一个表按优先级区分)
- 条件列:以
$fact:开头绑定业务数据对象,比如$loan:LoanApplication(),后续行写字段判断逻辑 - 动作列:对绑定的
$loan对象执行字段赋值操作
二、具体规则实现
1. 任意产品触发customerType赋值
| RuleSet | LoanProductRules | ||
|---|---|---|---|
| RuleTable | CustomerTypeRule | ||
| CONDITION | $loan:LoanApplication | ||
| product != null | |||
| ACTION | |||
| $loan.setCustomerType(Arrays.asList("260", "262")); |
说明:若customerType为数字类型,去掉引号;使用
Arrays.asList是因为要返回多个值,需确保业务对象中customerType为集合类型(如List<String>或List<Integer>)
2. customerType=260触发SubProduct赋值
| RuleSet | LoanProductRules | ||
|---|---|---|---|
| RuleTable | SubProductRule | ||
| CONDITION | $loan:LoanApplication | ||
| customerType contains "260" | |||
| ACTION | |||
| $loan.setSubProduct(Arrays.asList("001", "002", "004")); |
说明:若customerType是单个值而非集合,条件改为
customerType == 260
3. SubProduct=002触发LoanPurpose赋值
| RuleSet | LoanProductRules | ||
|---|---|---|---|
| RuleTable | LoanPurposeRule | ||
| CONDITION | $loan:LoanApplication | ||
| subProduct contains "002" | |||
| ACTION | |||
| $loan.setLoanPurpose("05"); |
说明:若LoanPurpose为数字类型,去掉引号;若SubProduct是单个值,条件改为
subProduct == "002"
三、关键注意事项
- 规则执行顺序:给每个RuleTable设置
salience(优先级),比如CustomerTypeRule设10,SubProductRule设8,LoanPurposeRule设6,确保先执行产品到客户类型的规则,再依次触发后续联动 - 业务对象定义:你的业务对象(如
LoanApplication)必须包含对应字段,集合类型字段需提前初始化,避免空指针 - Excel格式:保存为
.xls格式(Drools对.xlsx支持有限),规则表表头严格遵循Drools决策表规范,不要合并单元格
内容的提问来源于stack exchange,提问作者Rashmi Patil
相关产品推荐
相关产品推荐

