Postman使用Drools在WHEN条件下使用数组没有响应

p3rjfoxz  于 2023-04-06  发布在  Postman
关注(0)|答案(2)|浏览(160)

我试图在这个线程中测试@tarilabs提出的解决方案(这很有意义),使用Business Central的drl文件:
Drools Business Central -带有电子表格的决策表,在WHEN条件下使用数组
下面是规则代码:

package com.myspace.arraystreatmentconditions;
import com.myspace.arraystreatmentconditions.Client;
import java.util.*;

rule R1
when
  $c: Client( client_status == "Active")
  $item: String($c.client_products.contains(this)) from $c.cart

then
  modify ($c) { setResult($item + " from the cart in the " + $c.getClient_products());}
end

下面是Client.java类:

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;
    }

}

这是我的JSON:

{
  "commands": [
    {
      "insert": {
        "object": {
          "com.myspace.arraystreatmentconditions.Client": {
            "cart": ["item1", "item2", "item3"],
            "client_products": ["item1", "item2", "item3", "item4"],
            "client_status": "Active",
            "serviceability": "cable",
            "result": ""
          }
        },
        "out-identifier": "client"
      }
    },
    {
      "fire-all-rules": {}
    },
    {
      "get-object": {
        "out-identifier": "client"
      }
    }
  ]
}

但是在 Postman 发送请求的时候,它连续发送了几个小时的请求,我没有得到回应。
这是整个项目的简单代码:
https://github.com/jesurod09/DroolsValidation
这就是问题所在:

你知道吗?

svmlkihl

svmlkihl1#

这是一种非常奇怪的方法,试图找出项目$c.cart是否存在于$c.client_products中。
它可能会像这样工作得更好:

$c: Client( client_status == "Active",
            $item: cart,
            client_products contains $item )

这是假设您的模型(您还没有共享)具有适合client_statusclient_products等的访问器。
如果,正如注解中提到的,$c.cart实际上是一个集合而不是一个字符串,那么规则将如下所示:

$c: Client( client_status == "Active",
            $items: cart)
$item: String() from $items
Client( client_product contains $item ) from $c

问题中缺少客户端模型使得回答起来有点困难。问题中的DRL表明$c.cart是一个String,但这也可能是错误的。

jobtbby3

jobtbby32#

是的,你的解决方案有效,这是我现在的规则:

rule R1
when
   $c: Client(client_status == "Active", $item: cart, client_products contains $item)
then
   modify($c) {
      setResult($item + " freom the cart in the " + "c.getClient_products());
   }
end

但是现在Postman返回一个结果,但我不知道为什么它返回结果:“null”。
JSON是下一个:

但回应是:

相关问题