如何在决策表中实例化局部变量

时间:2014-02-04 12:39:51

标签: drools

我是流口水的新手,我接受了以下任务。

我在我的KieSession对象中插入了一些POJO,并将它们转换为我的决策表中的变量,如下所示。

CONDITION            CONDITION            CONDITION          ACTION
abc: classABC       xyz: classXYZ        lmn : classLMN
var1 == $param       var2 == $param                                                                                

1                   2                     3

据我了解,上表将产生以下规则

 when 
    abc:classABC(var1==1)
    xyz:classXYZ(var2==2)
    lmn:classLMN(var3==3)
 then
    some action

我想要的是获得以下内容。

  when 
    abc:classABC(var1==1)
    xyz:classXYZ(var2==2)
    lmn:classLMN(var3==3)
    fgh:classFGH($var:var4)           // I think this step is creating a new variable to hold value of var4
 then
    some action

如何在决策表上获得此信息?

我尝试将变量声明的条件列添加为fgh:classFGH,但由于数据行中没有要提供的数据,因此将忽略此列。如果我这样做,给出一些数据,编译时会出现错误“xyz列没有代码错误”。我需要的是声明一个变量,它可以保存我在main方法中传递的对象的值,然后在我的决策表的不同列中使用该对象。

3 个答案:

答案 0 :(得分:0)

我不确定我是否获得了决策表的要求,但您可以“使用”规则的触发来创建新事实并使用原始事件中的参数插入它们。然后可以使用这些来触发进一步的规则,如此(假设var4是布尔值):

declare AllMoonsInAlignmentEvent
    @role (event)
    extraCheese : boolean
end

rule "Some Rule"
  when
    $abc:classABC(var1==1)
    $xyz:classXYZ(var2==2)
    $lmn:classLMN(var3==3)
    $fgh:classFGH($var:var4)
 then
    ... some action using `$var`, `$abc` etc
    AllMoonsInAlignmentEvent myEvent= new AllMoonsInAlignmentEvent();
    myEvent.extraCheese = $var;
    insert(myEvent); 

rule "With Extra Cheese"
 when
    $moonsAligned:AllMoonsInAlignmentEvent(extraCheese == true)
 then
    ...

rule "Without Extra Cheese"
 when
    $moonsAligned:AllMoonsInAlignmentEvent(extraCheese == false)
 then
    ...

答案 1 :(得分:0)

您可以通过两种方式将X($ y:y)放入电子表格中。首先,在第4栏

X($y:y /*$param*/)

并用您喜欢的任何字符填充列。另一种方式可能在第3栏(!)

fgh:classFGH($var:var4) lmn:classLMN
var3==$param

这些技巧总是有点不确定。需要简单“抓住”事实的规则对于电子表格来说并不常见,并且可能是您没有采用最佳方法的第一个迹象。

答案 2 :(得分:-1)

  • CONDITION
  • FGH:classFGH
  • $ PARAM:VAR4
  • 评论单元格
  • $变种