我是流口水的新手,我接受了以下任务。
我在我的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方法中传递的对象的值,然后在我的决策表的不同列中使用该对象。
答案 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)