更新决策表中的事实:Drools

时间:2017-03-02 05:45:38

标签: drools rules

我在excel电子表格中有一个带有两个规则的drools决策表。 (这个例子已经大大简化了,我正在使用的那个有很多规则。)

enter image description here 第一个规则检查amount是否大于或等于500.如果是,则将状态设置为400。 第二个规则检查状态是否为400.如果是,则设置消息变量。 问题是,即使设置了顺序,我也无法触发第二条规则。我还必须使用无循环和锁定活动来防止无限循环。

我的目标是让规则自上而下,之后的规则可能取决于早期规则对事实/对象所做的更改。

这个问题有解决方法吗? 任何帮助将不胜感激,谢谢!

it("async works") {
  val promise = Promise[Assertion]()
  js.timers.setTimeout(10) {
    promise.complete(Try({
      println("FOO")
      assert(true)
    })
  })
  promise.future
}

2 个答案:

答案 0 :(得分:1)

属性锁定活动会在具有相同议程组的规则组中的第一个之后对任何解雇进行反击。删除此列。

不打算按特定顺序触发规则。写入逻辑,准确描述事实的状态,因为它应该触发规则。可能你必须写

rule "set status"
when
  $s: Salary( amount >= 500.0 && < 600.0, status == 0 )
then
  modify( $s ){ setStatus( 400 ) }
end

以避免发生多个状态设置或仅发生正确的设置。但是你会发现你的规则可能更直言不讳,更容易阅读。

考虑规则属性是最后的手段。

答案 1 :(得分:0)

请按以下方式替换H栏中的操作:

目前的解决方案:

a.setStatus($param);update(a);

新解决方案:

modify(a) {
    setStatus($param)
}