2014-09-19 25 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版本等。

相關問題