You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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决策表,按以下配置填写:

  1. CONDITION区域:
    • 第一列:绑定Client对象的client_status,条件表达式设为== "Active"
    • 第二列:使用集合交集校验,条件表达式设为cart.stream().anyMatch(p -> client_products.contains(p))
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:37:27