将方法返回的值分配给句柄。

时间:2013-01-30 20:58:38

标签: drools

我有类似以下的规则。我需要将匹配器返回的值分配给其他地方使用的处理程序。我怎样才能做到这一点?谢谢。

package a.b.c 

import java.util.List; 

import a.b.Matcher; 
import a.b.Container; 
import a.b.TestObject1; 
import a.b.TestObject2; 

global Matcher myMatcher; 
global Container container; 

when 
        $x1: TestObject1( 
                $x1_1 : id, (id in ("11", "16", "140")) 
        ) 

        $x2: TestObject2( 
                $x2_2: id, myMatcher.match(id, container.getContainer(100)) != null
         ) 

then 
        //print. 
end 

1 个答案:

答案 0 :(得分:0)

AFAIK没有直接的方法可以做到这一点。 2个选项是:

  1. 在规则的RHS中再次调用myMatcher.match()。如果match()方法的执行很昂贵,这可能会有问题。
  2. 创建一个不同的规则来计算所有TestObject2事实的match()值:

    rule 'Calculate match value'
        $t: TestObject2()
    when
        TestObject2Match m = new TestObject2Match($t); // -> you must define this class
        m.setMatchValue(myMatcher.match($t.getId(), container.getContainer(100)));
    
        insertLogical(m);
    then
    
  3. 现在,您之前拥有的规则必须按以下方式重写:

        rule '...'
            $x1: TestObject1( 
                $x1_1 : id, (id in ("11", "16", "140")) 
            ) 
            $m: TestObject2Match(matchValue != null)
        when
            //print $m.getMatchValue()
        then
    

    希望它有所帮助,