Drools LHS 检查可选事实

Drools LHS check against optional fact

我需要在 Drools 6.5 中编写一个规则来检查是否存在类型 A 的事件。还有第二个 class 名为 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 满足要求,则无论如何都必须触发规则。

这将为每个 A 触发它应该在所有 B 之后发生的时间限制。

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

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