【问题标题】:Drools LHS check against optional factDrools LHS 检查可选事实
【发布时间】:2017-07-25 15:34:20
【问题描述】:

我需要在 Drools 6.5 中编写一个规则来检查 A 类型的事件是否存在。还有一个名为 B 的第二个类,它有一个字段 date

在检查事件A 是否存在时,如果至少存在一个B 类型的事件,则A 必须在最新的B.date 之后发生才能触发规则;否则无论有任何B 事件,都应该触发该规则。

AB 这两种事件类型都有自己的显式时间戳字段。

when
        // TODO if at least one event of type B exists, A must happen after max(b.date). Otherwise, the rule must fire regardless of any B
        $a : A( ... )
then
    ...

如何执行此检查?

编辑:如果工作内存中不存在B,并且A 满足要求,则无论如何都必须触发该规则。

【问题讨论】:

    标签: drools drools-fusion


    【解决方案1】:

    这将为满足所有 B 之后发生的时间约束的每个 A 触发。

    $b: B()
    not B(this after $b)
    $a : A( this after $b )
    

    如果您只想触发一次,对于任意数量的 As,请在 A 前面使用 exists 并省略绑定。

    【讨论】:

    • 这使得规则的触发依赖于至少一个 B 的存在。无论Bs 是否在工作记忆中,我都需要这条规则来触发。
    • 添加另一个规则(您可以使用 or 组合 LHS),要求没有任何 B 和没有约束的 A 模式。我无法将此添加到答案中,因为您的问题没有这样说。
    • 感谢您的回答。我编辑并澄清了这个问题。
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多