当前位置: 首页 > 知识库问答 >
问题:

口水:规则多次触发

申屠亦
2023-03-14

我刚开始流口水,遇到了一个问题。

我简化了规则以显示问题:

    rule "test"

    when
        $ev     : TestEvent()

        $evList : ArrayList( size >= 3 ) from collect
                  (
                     TestEvent(linkId == $ev.getLinkId())
                  ) 
    then
       System.out.println("Rule fired!")

    end

基本上,我想计算特定路段上发生的事件(路段是道路的一部分)。当同一链接上发生3个事件时,我希望触发规则。

上面的规则几乎起作用了,但是当它发射时,它发射了3次,每个事件发射一次。我只希望它发射一次。

我错过了什么?

非常感谢。

共有2个答案

羊冠玉
2023-03-14

我改变了解决问题的方法,使之奏效。我现在创建了链接对象,然后将事件绑定回链接。

规则结束了

rule "test"

    when
        $link   : Link()
        $events : ArrayList( size >= 3 ) from collect (TestEvent(link == $link)) 
    then 
        System.out.println("Rule fired!")

end

每个链接只触发一次,这是我需要的。

况胡媚
2023-03-14

第一种模式选择任何TestEvent,而不管它的link Id如何。如果有n个TestEvent事实具有某个link Id,则酸化进行n次。

要限制此规则在您可以从任何此类n组中选择单个TestEvent时触发。可以使用具有唯一有序值的任何属性,如果您有事件,事件时间戳也是可用的。

rule "test"
when
    $ev: TestEvent( $lid: linkId )
    not TestEvent( linkId == $lid, this before $ev )
    $evList : ArrayList( size >= 3 ) from collect
              (
                 TestEvent(linkId == $lid)
              ) 
then
   System.out.println("Rule fired!")
end
 类似资料:
  • 我无法从jbpm业务规则任务中触发规则。似乎找不到进程规则文件。试着解释一下。 进程Test.java简单的设置Message和启动进程: 然后,我运行并正确触发脚本任务(“Hello world”),但在RuleGroup1中找不到规则。drl: 跟踪项目文件夹: 谢谢你的帮助。

  • 我不太会流口水和咕噜。 我有一个关于规则流的基本问题。 我在guvnor插件上使用引导编辑器创建了3条规则。现在我想根据第一条规则的结果调用第二条或第三条规则。 e、 g.如果患者年龄小于18岁,则进行第二条规则的小检查,否则请调用第三条规则由高级医生进行检查。 那么,这可以通过使用规则流来实现吗?如果是,如何?是否有任何示例链接和文档来演示它?非常感谢您的帮助。 谢啦

  • Drools文档提到,规则可以使用诸如生效日期和过期日期之类的属性来指定绝对规则有效期。 例如 Drools还支持周期性重复的规则,间隔为,cron为,但这意味着规则是在这样的点触发的。 我很感兴趣,如果有任何选项如何指定定期可用(不解雇)的规则与时间限制。例如,让我们想象一些公司的营业时间-操作只能在正式工作期间执行,但不能在下班后执行。 我想要这样的东西,但这不是Drools的有效规则 是否可

  • 我有很长时间使用JBOSS Drools的经验。我正在处理的当前项目使用Drools 4。 这是我在项目中的一条规则 想法是从没有关联目标对象的工作内存中收回此类项目。我正在使用工作内存中的这些对象对其进行测试: 项目{itemId=7305,itemTYpeId=Item\u TYPE\u A,targetId=-1023}目标{targetId=-1023} 在这种情况下,规则不应该开火,但它

  • 我正在进行drools fusion 6.2决赛,希望在流模式下发生新事件时触发规则。但规则本身并没有遭到抨击。 我的规则文件内容如下: 代码如下: 故意调用规则时会触发规则,但如果流中出现新事件,则无法触发规则。

  • 我有一个drl文件,它在两个规则流组中包含规则:“第一个规则流组”和“第二个规则流组”。这些组的激活取决于“规则A”和“规则B”。是否有任何方法可以停用规则B,以便在规则A条件匹配时触发,从而仅将焦点设置为“第一个规则流组”?