如何在Drools决策表中使用单独字段而非完整对象编写规则?
适配修改后控制器的Drools决策表编写方案
因为现在你在Drools会话中同时插入了String类型的card对象和空的Order对象,决策表需要同时匹配这两个对象,再根据card的取值给Order设置折扣。以下是具体的编写方式:
决策表核心结构(对应Excel格式的Markdown示意)
| 规则描述 | 条件:Card字符串 | 条件:Order对象 | 动作:设置折扣 |
|---|---|---|---|
| VIP卡打8折 | $card: String(this == "VIP") | $order: Order() | $order.setDiscount(0.8); |
| 普通卡打9.5折 | $card: String(this == "NORMAL") | $order: Order() | $order.setDiscount(0.95); |
| 新用户无折扣 | $card: String(this == "NEW") | $order: Order() | $order.setDiscount(1.0); |
关键说明
- 条件列的对象绑定:
- 第一列条件专门匹配会话中的String类型card对象,用
$card: String(...)绑定变量,括号内写card的取值判断逻辑。 - 第二列条件匹配会话中的Order对象,用
$order: Order()绑定变量,因为Order是新创建的空对象,这里无需额外属性判断,直接匹配即可。
- 第一列条件专门匹配会话中的String类型card对象,用
- 动作列的赋值逻辑:
通过绑定的$order变量调用setter方法设置折扣,直接修改会话中的Order对象,最后控制器返回这个对象就能拿到结果。 - Drools规范适配:
实际Excel决策表的表头要遵循Drools标准:条件列标注CONDITION,动作列标注ACTION,规则描述列标注DESCRIPTION,确保Drools能正确解析表格规则。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

