2017-09-27 2 views
1

제 질문은 Drools 누적 기능 내에서 '존재하지 않음'구문에 해당하는 것을 사용하는 것에 관한 것입니다.drools 내에 '존재하지 않음'과 동일한 의미를 사용합니다.

rule "rule-conflicting-code-set-1" 
... 
when 
... 
    $conflicts : List(size() > 1) 
      from accumulate( 
       $p : Performance(code == "FOO", /*other conditions*/) 
       from $patient.performances, 
       collectList($p)) 

then 
... 
end 

가 지금은 별도의 조건과 규칙을 확장하고 싶습니다 :

내가 예상 결과를 잘 컴파일하고 생성하는 다음과 같은 규칙 부분 성능 개체의 단순한 축적를 사용합니다. 특정 조건을 만족하는 퍼포먼스가 누적되는 것을 막기를 원합니다 (예 : $ 충돌리스트에 올라).

새로운 조건이있다 : 그 성능을 포함하는 주의이 존재하는 대한 성능을 축적하고 싶지 않아요. 주의성능 집합 개체에 (Set performanceSet;) 유형의 개체를 보유하는 필드입니다. 나는 을이 방법()성능의으로 작성하여 $ p을 참조하는 방법으로 작성했습니다. 컴파일러는 '존재'키워드에 대해 불평

$conflicts : List(size() > 1) 
     from accumulate( 
      $p : Performance(
         code == "FOO", 
         not exists Attention(performanceSet contains 
          thisPerformance()), 
         /*other conditions*/) 
      from $patient.performances, 
      collectList($p)) 

을 : [102 ERR

자체가 같을 것이다 조건은 :

not exists Attention(performanceSet contains thisPerformance()) 

해당하는이 같은 축적 나는 다시 시도 ] 규칙 50:40 일치하지 않는 입력이 'rule-conflicting-code-set-1'규칙에 '존재'합니다. 파서가 null 패키지를 반환했습니다.

내 문제에 대한 해결책은 상당히 달라 보이지만 예제를 통해 내가 성취하고자하는 바를 설명하게하십시오.

답변

0

not exists은 Drools에서 유효한 구문이 아닙니다. 대신 not을 사용하십시오.

그런 다음 누적 된 패턴을 여러 개 사용하는 것이 좋습니다. 당신은 이런 식으로 규칙을 다시 작성해야합니다

$conflicts : List(size() > 1) 
    from accumulate( 
     ($p : Performance(code == "FOO") from $patient.performances and 
     not Attention(performanceSet contains $p)), 
     collectList($p)) 

는 희망이 도움이 정확히 내가 찾던 구문했다

+0

! 정말 고맙습니다! – Edvaaart

관련 문제