2014-09-19 1 views
0

사실의 일부 속성 합계를 계산하는 Drools에서 규칙을 구현하려고합니다. 그것은 누적과 합계를 사용하여 훌륭하게 작동합니다. 문제는 accumulate 메소드의 소스 부분에있는 조건과 일치하는 사실이 없을 때 룰이 실행되지 않는다는 것입니다.일치하는 소스 팩트가없는 경우 0을 반환하는 Drools 누적 메소드

실제로 일치하는 것이없고 나머지 when 절이 검사되면 sum 메서드에서 0을 반환하고 싶습니다. 어떻게 든 가능할까요?

업데이트 : Drools 6.0.1을 사용하고 있습니다. the와 the 절에 문제가있는 것 같습니다. 여기 내 문제는 코드입니다.

rule "accu" 
when 
$n: Number() 
    from accumulate($o: Order() and OrderLine($v: quantity), 
       sum($v)) 
then 
    System.out.println("*#*#*#*#*#*#*#*#*#* Accu has fired *#*#*#*#*#*#*#*#*#"); 
end 

주문 또는 주문 회선만으로 작동합니다. 나는이 문제를 잘못된 방향으로 공격하고있는듯한 느낌이 들었다. 내 실제 사례에서 요약하고자하는 값은 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 버전 등을 전체 코드를 제공해주십시오.