我正在尝试在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)
答案 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版本等