如何在drools中实现少于和大于带决策表的规则?

时间:2012-07-04 00:15:39

标签: drools

我想基于使用决策表的drools中越来越少的值来实现简单的规则。

在drl中实现规则很容易,例如:

rules "less than"
when Example(value < 10)
then 
    System.out.println("Less than 10")
end

rules "equals"
when Example(value = 10)
then 
    System.out.println("Equals 10")
end

rules "greater than"
when Example(value > 10)
then 
    System.out.println("Greater than 10")
end

但是我怎样才能将它翻译成drools的决策表呢?到目前为止我看到的所有例子都是在条件单元格中进行比较。甚至可以在价值单元格中进行比较吗?

我见过的所有例子都是以下格式:

CONDITION                          |  ACTION
Example                            |
value                              |
-----------------------------------|-------------------------------------
10                                 |  System.out.println("equals to 10")

但这仅适用于1条规则,并且执行以下操作完全具有不同的含义:

CONDITION  | CONDITION  | CONDITION  | ACTION
Example
value      | value > $1 | value < $1 |
-----------+------------+------------+----------------
10         | 10         | 10         | ???

甚至可以做以下事情吗?

CONDITION                          |  ACTION
Example                            |
value                              |
-----------------------------------+----------------------------------------
10                                 |  System.out.println("equals to 10")
> 10                               |  System.out.println("greater than 10")
< 10                               |  System.out.println("less than 10")

实施这些规则的正确方法是什么?

3 个答案:

答案 0 :(得分:7)

我发现通过在约束字段单元格中放入 $ param 并在值单元格中放入整个约束,我可以实现我所需要的。所以决策表看起来像这样:

CONDITION                      | ACTION
Example                        |
$param                         | System.out.println("$param");
-------------------------------+-----------------------------------
value == 10                    | equals to 10
value > 10                     | greater than 10
value < 10                     | less than 10     

答案 1 :(得分:5)

可以将条件的一部分作为值。在标题中,您可以提供“ value $ param ”进行评估。 (BTW能够输入= = 10之类的值,您必须将单元格格式更改为Excel中的文本)

CONDITION                          |  ACTION
Example                            |
value $param                       |
-----------------------------------+----------------------------------------
== 10                              |  System.out.println("equals to 10")
in (10, 11)                        |  System.out.println("is 10 or 11")
> 10                               |  System.out.println("greater than 10")
< 10                               |  System.out.println("less than 10")

答案 2 :(得分:1)

你可以看看这个

http://s11.postimage.org/oya6zxr83/Screenshot.png

这里我们从用户获取用户位置和计数,并检查count是否小于每个城市的初始计数,如果条件满足,则循环将一直运行到Loop Condition。

希望它会有所帮助。