当前位置: 首页 > 知识库问答 >
问题:

Drools规则引擎中类对象的迭代列表问题

子车征
2023-03-14

我使用Kie Workbench学习口水。我的输入将是opportunityProduct类中的名称,我希望在Opportunity类中的Ip中得到输出。在规则引擎执行之后,我在输出中只得到null值。

Pojo结构:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;

输入:

{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}

输出:

{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}

决策表:

NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"

Drl:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end

我无法确定我的输入是否错误或决策表中的条件是否错误。

共有2个答案

时才俊
2023-03-14

这是因为默认情况下kie服务器rest接口的工作方式如下:

1) 在客户端A与B相关(A.B=B)

2) 插入A,然后插入B

3) 在服务器端,每个insert命令都有:

3.1)与B1实例(未插入)相关的A对象(插入kie会话)

3.2)另一个B2实例(B1的精确复制内容,但与A无关)

这里有两种解决方案:

1)生活在一起,使用来自

2)制作自己的ki-server扩展,这就是我在我的开源项目中所做的,让流口水的生活更轻松。我所有的客户都在使用这种ki-server woth通过反射插入所有连接到顶部对象的java对象(大部分时间称为请求

当做

卢鸿博
2023-03-14

在输入中,您发送了一个要插入的机会对象,但从未插入机会产品。你的规则需要两个事实才能生效。

请记住,在Drools中,您只能对插入到会话中的事实进行推理,并且事实中的嵌套对象本身不是事实。

如果您不打算将OpportunityProduct作为独立事实插入,那么您可以做的一件事是使用from条件元素对非事实数据进行推理:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        OpportunityProduct(name == "abc") from pd
    then
        o.setIp("IPP");
end

希望有帮助,

 类似资料:
  • 我在试着处理drools中的列表。我正在传递一个请求,其中包含一个购买列表。我想做几个规则,包括检查大小是否正确,然后如果所有元素都相同,如果所有购买都经过授权。。。我有以下代码,但在使用列表时遇到了问题。这是正确的方法吗?尤其是在检查尺寸时?

  • 我正在尝试使用drools规则引擎中定义的一组规则对对象列表进行排序。示例对象结构如下 我想要 > 定义一组对对象列表进行排序的规则。 例如:规则1:“使用名称升序对对象进行排序” 定义规则需要执行的顺序 例如:将顺序1设置为规则1 我可以使用drools引擎实现这一点吗 我曾想过使用compareTo()进行排序,但由于排序标准可以在运行时更改,因此逻辑变得复杂且难以维护。 谢谢, Kolith

  • 我正在向drools规则引擎插入数据,但我无法理解它是如何处理插入的数据的。插入数据的代码是:

  • 我有一个学生班,它有相关部门的列表。 我正在尝试用Drools编写规则。规则就像-如果一个学生属于某些部门,那么就采取行动。我无法找出正确的方法来做这件事。我在下面写的一个不起作用。我知道如果它的字符串列表有效。有没有办法在自定义对象上做包含。 终止 调用规则的代码 我正在使用Drools 6.2版本。

  • 我有这样的情况,在规则文件中的所有规则必须检查执行。如果我的理解是正确的,文档所说的规则将由引擎任意执行。 我有一个或多个疑问。 > 我在许多地方得到了答案,我必须使用显著性功能来按顺序执行它们。如果我使用显著性,并且我有执行所有规则的要求,它真的会大规模地影响性能吗?如果是,它会如何影响性能,甚至规则引擎也会任意执行所有规则,比如一些随机顺序。 提前谢谢。

  • 我正在从事这个项目,我的角色是开发使用标准健康保险xml的服务。服务必须在不同的xml字段上进行验证,这涉及将xml数据与数据库表中的数据进行比较。目前,我们假设所有保险公司的验证保持不变。但我怀疑它会保持不变,并且每家公司可能有不同的验证要求。在这种情况下,使用Drools规则引擎并为每家公司开发drl文件并使用规则引擎进行xml验证是个好主意吗