0

Drools でファクトのいくつかのプロパティの合計を計算するルールを実装しようとしています。これは、蓄積と合計を使用してうまく機能します。問題は、accumulate メソッドのソース部分に条件に一致するファクトがない場合、ルールが実行されないことです。

一致するファクトがなく、残りの 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" を指定した Fact ファクトがない場合に起動し、Fact ファクトがまったくない場合に起動します。(ドロール 5.5.0)

エラーを再現する完全なコード、Drools のバージョンなどを提供してください。

于 2014-09-19T17:01:32.010 に答える