2013-10-17 3 views
0

하나 이상의 조건이 충족 될 때 실행해야하는 규칙을 만듭니다. 규칙은 다음과 같이 표시됩니다.Drools - then 절의 여러 일치

rule "Demo Rule" 
    when 
     $data : Data (val == 1 || val == 2) 
    then 
     System.out.println($data); 
end 

두 개의 일치하는 데이터 개체 (val1과 val2)가있는 규칙에 대한 테스트가 있습니다. 인쇄 명령문에 도달하면 규칙이 올바르게 실행됩니다. 그러나 $ 데이터를 구문 분석하고 일치하는 개별 Data 개체에 액세스 할 수있는 방법을 찾을 수 없습니다. println 결과는 다음과 같습니다.

custom.package.Data< val: 1, text:'Test1' > 
custom.package.Data< val: 2, text:'Test2' > 

그래서 여러 항목이 있음을 알 수 있습니다. 그러나 배열 ($ data [0]) 또는 $ data $ 1 또는 Drools에 의한 구문 분석 오류 ($ 데이터는 배열이나 목록 또는 기타 반복 가능하지 않은 Data 객체라는 불평)를 모두 생각할 수있는 모든 것을 호출하려고 시도합니다. .

답변

3

규칙은 조건에 일치하는 각 개체마다 한 번 발생합니다. 따라서 데이터 객체에 직접 액세스해야합니다. $data.valdata.text

개체를 목록에 필요로하거나 원하는 경우 collect을 사용할 수 있습니다. 그렇다면 당신의 규칙은 같을 것입니다

rule "Demo Rule" 
    when 
     $dataList : ArrayList() from collect(Data (val == 1 || val == 2)) 
    then 
     System.out.println($dataList); 
end 
+0

이것은 내가 누락 된 것이 었습니다 - 감사합니다. – user2093082