在决策表

时间:2015-08-10 19:58:18

标签: java drools rule-engine rule

我试图在决策表(excel)中包含单个RuleTable下的更多规则,这意味着在单个RuleTable下包含两个或多个具有条件和操作的行,如图所示。如果我包含,我只能从三个操作项中获得单个操作。例如,如果我将值声明值设为11 - >我得到动作输出为Done-2。但如果我将索赔值设为12,我就没有得到任何输出。

enter image description here

如果我的方法有误,请告诉我。

编辑:

我已经完成了图中所示的更改,现在它没有给我任何输出。

enter image description here

1 个答案:

答案 0 :(得分:0)

Excel表中的此部分不是根据Drools决策表的规则编写的。我只是指出了所有的偏差 - 请阅读文档以了解如何编写决策表。 (单元格根据从A1到H9的已发布PNG进行编号。另外,请注意,为了简单起见,我使用value,value1和value2而不是原始访问代码来实现事实值。)

  1. 单元格H3包含tm,它会生成无效的RHS代码(tm.System.out.println(...))。
  2. 由于规则表标题中省略了注释行(它应该在第5行),只有第6,7,8和9行产生规则。
  3. 插入第5行后,由于第6行到第10行(最初为5到9),会生成五条规则,但所有约束都是从第4行中的单元格派生的。
  4. B列从第4行和第6行(最初为5)的条目生成模式,从而导致文本Age < 2不是有效模式。这是因为B3是空的。
  5. A列,单元格A6到A10(最初为A5到A9)会产生规则,其中模式可以是Claim(value == 10 == "true")Claim(value == 10 == "value == 11")或类似的。这会编译,但几乎不需要测试声明事实中的值。
  6. 同样,行动栏(E栏)产生的RHS代码也是System.out.println("Done-1");(或类似)和System.out.println("System.out.println(\"$param\");");
  7. 尝试猜测为什么没有得到预期的输出并没有多大意义。您有列定义规则属性议程组和激活组的列,但您没有提供代码设置和切换议程组。从这个Excel代码段中可以看出,这两列都没有多大意义。

    该文档包含有效决策表的足够示例,因此我不会重复轻松获取的信息。

    修改必须将条件写为四行中的单元格。 (您只使用了三个。)以下是如何为同一类的属性编写一对约束。请注意,第2和第3条规则没有基于年龄的约束。

    CONDITION         CONDITION
    -------------- Claim -------------
    value ==          age <
    Value must match  Age must be less
    10                2
    11
    12
    

    以上显示7行,2列。

    ACTION
    
    System.out.println( "$param" )
    Print something...
    Done-1
    Done-2
    Done-3
    

    再次7行,1列。

    文档中两者几乎都有相同的例子。