我使用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
我无法确定我的输入是否错误或决策表中的条件是否错误。
这是因为默认情况下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对象(大部分时间称为请求)
当做
在输入中,您发送了一个要插入的机会对象,但从未插入机会产品。你的规则需要两个事实才能生效。
请记住,在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验证是个好主意吗