2014-09-19 24 views
0

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

我想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

但是,如果没有匹配的元素,accumulate返回0。

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

这大火在没有事实事实与道具==“C”,如果有完全没有事实事实它触发。 (Drools 5.5.0)

请提供完整代码复制错误,Drools版本等。

相关问题