Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools累加方法,如果没有匹配的源事实,则返回零_Drools_Accumulate - Fatal编程技术网

Drools累加方法,如果没有匹配的源事实,则返回零

Drools累加方法,如果没有匹配的源事实,则返回零,drools,accumulate,Drools,Accumulate,我试图在Drools中实现一个规则,它计算一个事实的某个属性的和。使用“累积”和“求和”非常有效。问题是,如果在累积方法的源部分中没有与条件匹配的事实,则不会执行规则 我希望sum方法在没有匹配的事实并且when子句的其余部分被检查时返回零。这有可能吗 更新: 我正在使用Drools 6.0.1 问题似乎在于and条款。这是我的问题所在 rule "accu" when $n: Number() from accumulate( $o: Order() and OrderLine( $v

我试图在Drools中实现一个规则,它计算一个事实的某个属性的和。使用“累积”和“求和”非常有效。问题是,如果在累积方法的源部分中没有与条件匹配的事实,则不会执行规则

我希望sum方法在没有匹配的事实并且when子句的其余部分被检查时返回零。这有可能吗

更新: 我正在使用Drools 6.0.1 问题似乎在于and条款。这是我的问题所在

rule "accu"
when
$n: Number() 
   from accumulate( $o: Order() and OrderLine( $v: quantity ),
                sum($v))
then
   System.out.println("*#*#*#*#*#*#*#*#*#* Accu has fired *#*#*#*#*#*#*#*#*#");
end
仅使用订单或订单行即可工作。我有一种感觉,我在用错误的方式解决这个问题。在我的实际案例中,我想要求和的值在订单行中,但条件在另一个类中

$ol : OrderLine($q : quantity) 
and
$ac : ArticleClass(orderLine == $ol, crtiteria1=efg, criteria2=abc) 

但是当没有匹配的元素时,accumulate返回0

rule accu
when
$n: Number() 
   from accumulate( Fact( prop == "C", $v: value ),
                    sum($v))
then
   //...
end
它在没有prop==C的事实事实时激发,如果根本没有事实事实则激发。Drools 5.5.0


请提供再现错误、Drools版本等的完整代码。

如问题中所述,其中一个事实有效,但如果您累积了两个事实并加入and条件,则规则在不匹配的情况下不会触发。