迭代的类对象列表在流口水规则引擎中发行



i使用Kie Workbench学习流口水。 我的输入将是"机会生产"课中的名字,我希望 IP内部机会类中的输出。在执行规则引擎后,我在输出中只能获得零值。

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

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

在您的输入中,您正在发送要插入的Opportunity对象,但是您永远不会插入OpportunityProduct事实。您的规则需要这两个事实才能开火。

请记住,在流口水中,您只能理解已插入会话中的事实,并且嵌套的对象在事实中不是事实本身。

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

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

希望它有帮助,

这是由于默认情况下,Kie-Server REST接口这样的工作:

1)在客户端A与b(a.b = b)

有关

2)您插入A,然后b

3)在服务器端,每个插入命令都会有:

3.1)与B1实例有关的一个对象(插入Kie-Session)(未插入)

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

无关

这里有两个解决方案:

1)与

一起使用并使用

2)制作自己的Kie-Server扩展名,这是我在开源项目中所做的,以使流口水更轻松。我所有的客户都使用这种Kie-Server woth插入了所有连接到顶部对象的Java对象(大部分时间称为请求)

问候

相关内容

  • 没有找到相关文章

最新更新