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

时间:2014-09-19 13:51:10

标签: drools accumulate

我正在尝试在Drools中实现一个规则来计算事实的某个属性的总和。使用累积和求和效果很好。问题是,如果没有匹配accumulate方法的源部分中的条件的事实,则不执行规则。

如果没有事实匹配,我希望sum方法返回零,并且检查其余的when子句。这有可能吗?

更新: 我正在使用Drools 6.0.1 问题似乎在于和子句。这是一个代码,这是我的问题。

rule "accu"
when
$n: Number() 
   from accumulate( $o: Order() and OrderLine( $v: quantity ),
                sum($v))
then
   System.out.println("*#*#*#*#*#*#*#*#*#* Accu has fired *#*#*#*#*#*#*#*#*#");
end

只有Order或OrderLine才有效。我有一种感觉,我正在以错误的方式攻击问题。在我的实际案例中,我想要总结的值是在OrderLine中,但标准是在另一个类中。

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

1 个答案:

答案 0 :(得分:0)

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

rule accu
when
$n: Number() 
   from accumulate( Fact( prop == "C", $v: value ),
                    sum($v))
then
   //...
end

在没有事实事实的情况下,如果没有事实事实,它就会被激活。 (Drools 5.5.0)

请提供重现错误的完整代码,Drools版本等