我用Kie工作台学习流口水。我的输入将是opportunityProduct类中的名称,并且我期待在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我无法识别我的输入是错误的,还是决策表中的条件是错误的。
发布于 2019-02-27 13:15:28
在您的输入中,您将发送要插入的Opportunity对象,但永远不会插入OpportunityProduct事实。你的规则需要两个事实才能开火。
请记住,在Drools中,您只能对插入到会话中的事实进行推理,并且事实中的嵌套对象不是事实(本身)。
如果您不打算将OpportunityProduct作为独立事实插入,您可以做的一件事是使用from条件元素对非事实的数据进行推理:
rule "Origination"
when
o:Opportunity(pd: productlist)
OpportunityProduct(name == "abc") from pd
then
o.setIp("IPP");
end希望能帮上忙
发布于 2020-02-28 13:40:37
这是因为默认情况下,kie-server rest接口的工作方式如下:
( 1)与B (A.b=b)有关的客户端A
2)插入A,然后插入B
3)在服务器端,对于每个insert命令都有如下内容:
3.1)与B1实例相关的对象(插入到kie会话中)(未插入)
3.2)另一个B2实例( B1的确切副本内容但与A无关)
这里有两个解决方案:
1)生活在这种环境中,并使用于
2)做您自己的kie服务器扩展,这就是我所做的在我的开源项目上,让流口水让生活更轻松。。我的所有客户都在使用这种kie-server woth,通过反射插入所有连接到顶级对象的java对象(大多数情况下称为请求)。
问候
https://stackoverflow.com/questions/54891286
复制相似问题