Я пытаюсь реализовать правило в Drools, которое вычисляет сумму некоторого свойства факта. Это прекрасно работает с использованием накопления и суммы. Проблема в том, что при отсутствии фактов, соответствующих критериям в исходной части метода накопления, правило не выполняется.
Я хотел бы, чтобы метод суммы возвращал ноль, если ни один факт не совпадает, и что остальные предложения when проверяются. Это возможно как-то?
Обновление: я использую 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)