0

我在 Eclipse 中使用 Drools,我有一个规则需要在我定义的每个议程中触发(这是一个非常重要的规则)。

首先,我尝试不为该规则设置议程,但它只是在最后一个议程结束时执行。

所以我想到的唯一一件事就是为每个议程定义一个规则,即,在所有议程中重复相同的规则,这不是最有效的解决方案。

这是一个正常的问题吗?有更好的解决方案吗?

谢谢。

4

1 回答 1

0

刚刚做了一个快速测试,它对我来说很好(Drools 7.14.Final),设置如下:

1) 没有议程组
的规则 2) 具有议程组“Group1”的
规则 3) 另一个具有议程组“Group2”的规则

我用以下代码调用了规则:

    kSessionRules.getAgenda().getAgendaGroup("Group 1").setFocus();
    kSessionRules.fireAllRules();
    kSessionRules.update(tcHandle, tc); //tc is the object inserted in working memory, the FactHandle is the return value from the *insert* call
    kSessionRules.getAgenda().getAgendaGroup("Group 2").setFocus();
    kSessionRules.fireAllRules();

所称规则的最终结果是:

规则 2)
规则 1) => 第一次议程组通话结束
规则 3)
规则 1) 再次

在此示例中,我的规则 1) 两次都触发了,因此在我看来,它就像您要查找的内容。请注意,我需要在我的情况下使用更新,因为我的规则条件位于未被其他规则修改的属性上,因此如果没有更新,规则将不会再次触发。还有一点需要注意的是,“通用”规则似乎总是会在当前议程组之后触发。你的情况有问题吗?

于 2018-12-05T10:10:25.177 回答