0

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

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

更新:我正在使用 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

仅使用 Order 或 OrderLine 即可。我有一种感觉,我以错误的方式解决了这个问题。在我的真实案例中,我想总结的值在 OrderLine 中,但标准在另一个类中。

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

1 回答 1

0

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

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

这会在没有带有 prop == "C" 的事实事实的情况下触发,如果根本没有事实事实则会触发。(流口水 5.5.0)

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

于 2014-09-19T17:01:32.010 回答