Drools Business Central决策表:WHEN条件中使用数组的实现问询
Drools规则实现问题:数组列表的条件校验
我是Drools新手,正在使用Business Central 7.18.0,通过Excel格式的决策表资产实现规则。已完成基础规则开发并通过Postman调用REST API验证,现需在WHEN条件中使用输入的数组实现复杂校验。
现有Client类代码如下:
package com.myspace.arraystreatmentconditions; /** * This class was automatically generated by the data modeler tool. */ public class Client implements java.io.Serializable { static final long serialVersionUID = 1L; private java.util.List<java.lang.String> cart; private java.util.List<java.lang.String> client_products; private java.lang.String client_status; private java.lang.String serviceability; private java.lang.String result; public Client() { } public java.util.List<java.lang.String> getCart() { return this.cart; } public void setCart(java.util.List<java.lang.String> cart) { this.cart = cart; } public java.util.List<java.lang.String> getClient_products() { return this.client_products; } public void setClient_products( java.util.List<java.lang.String> client_products) { this.client_products = client_products; } public java.lang.String getClient_status() { return this.client_status; } public void setClient_status(java.lang.String client_status) { this.client_status = client_status; } public java.lang.String getServiceability() { return this.serviceability; } public void setServiceability(java.lang.String serviceability) { this.serviceability = serviceability; } public java.lang.String getResult() { return this.result; } public void setResult(java.lang.String result) { this.result = result; } public Client(java.util.List<java.lang.String> cart, java.util.List<java.lang.String> client_products, java.lang.String client_status, java.lang.String serviceability, java.lang.String result) { this.cart = cart; this.client_products = client_products; this.client_status = client_status; this.serviceability = serviceability; this.result = result; } }
需求:当client_status为“Active”,且cart中存在已在client_products中的产品时,为result属性赋值提示信息。优先考虑用决策表实现,也接受其他方案。
方案一:Excel决策表实现
在Business Central中创建Excel决策表,按以下配置填写:
- CONDITION区域:
- 第一列:绑定
Client对象的client_status,条件表达式设为== "Active" - 第二列:使用集合交集校验,条件表达式设为
cart.stream().anyMatch(p -> client_products.contains(p))
- 第一列:绑定
- ACTION区域:
- 绑定
Client对象的result属性,赋值内容为"您选择的部分产品已签约,无法重复办理"(可自定义提示文本)
- 绑定
注意:
- 条件列需启用"Expression"模式(在决策表编辑界面的列设置中选择)
- 确保
Client类已正确导入规则项目,包路径与代码一致
方案二:Drl规则文件实现
如果决策表配置有障碍,可直接编写Drl规则:
package com.myspace.arraystreatmentconditions; import com.myspace.arraystreatmentconditions.Client; rule "CheckDuplicateProducts" when $client: Client(client_status == "Active", cart != null, client_products != null, cart.stream().anyMatch(p -> client_products.contains(p))) then $client.setResult("您选择的部分产品已签约,无法重复办理"); update($client); end
规则说明:
WHEN段:校验客户状态为Active,且两个产品列表非空、存在交集THEN段:给result赋值提示信息,通过update($client)通知规则引擎对象已更新
内容的提问来源于stack exchange,提问作者Jesús RodRu
相关产品推荐
相关产品推荐

