Drools引导决策表中缺少varibale绑定

Drools引导决策表中缺少varibale绑定,drools,Drools,我正在使用kie workbench的6.2指导决策表,我被以下场景困住了 仅当根据规则中的某些值检查了EligibilityCriteria中的promocode时,我才想在升级中设置promocode。如下面由workbench从决策表生成的代码所示 //from row number: 1 rule "Row 1 test" dialect "mvel" when $e : EligibilityCriteria( $code : PromoCode in ( "code1", "

我正在使用kie workbench的6.2指导决策表,我被以下场景困住了

仅当根据规则中的某些值检查了EligibilityCriteria中的promocode时,我才想在升级中设置promocode。如下面由workbench从决策表生成的代码所示

//from row number: 1
rule "Row 1 test"
dialect "mvel"
when
    $e : EligibilityCriteria( $code : PromoCode in ( "code1", "code2" ) , $make : vehMake == "BMW" )
then
    Promotion p = new Promotion();
    p.setPromoId("123");
    p.setPromoCode($code);
    insertLogical( p );
end
如果在引导决策表的文本框中没有为promocode指定值,则生成的代码不会创建变量$code,并且由于未创建$code,因此代码失败

//from row number: 1
rule "Row 1 test"
dialect "mvel"
when
    $e : EligibilityCriteria($make : vehMake == "BMW" )
then
    Promotion p = new Promotion();
    p.setPromoId("123");
    p.setPromoCode($code);
    insertLogical( p );
end

我只是想指出promocode的规则字段是空的还是有一些值

如果在提供PromoCode值列表的列中没有给出值,则需要另一条规则,即右侧不能包含相同的语句序列。省略RHS操作的选择标记,以避免生成引用
$code
的语句,并提供通过访问事实获取PromoCode值的替代操作:

p.setPromoCode($e.getPromoCode());

请注意,在任何情况下都可以使用这种形式的代码,所以只需一个操作列即可;总是给我在EligibilityCriteria事实中发送的促销代码的值。无论决策表UI上的promocode列是否具有某些值,它都保持不变。这些规则将由营销人员创建,他们可以输入或不输入promocode值。如果输入了这些值,那么代码工作正常,因为规则UI上的promocde的逗号分隔列表是根据EligibilityCriteria事实中的PromoCode值进行检查的。然而,当在UI上不提供任何值时,则不进行检查,并且认为通过EligibilityCriteria发送的任何促销代码都是有效的。在代码中,我只想将promocode设置为有效,如果它与UI上的某个值进行了检查。然后,您的营销人员将必须标记另一个操作列,即选择用于将promocode设置为未选中的代码的列,与您在规则中显示的规则相反,该规则用于指示已根据值检查promocode。谢谢Laune。这就是我现在实现的方式。