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对象(大部分时间称为请求)
问候