首页 文章

Drools:仅在执行另一个规则后执行规则

提问于
浏览
0

我在同一个drl文件中有两个Drools规则,如:

rule "If critical"
when 
incident:Incident(state=CRITICAL)
then
incident.getIncidentValve().activateAlarm();
end;

rule "If alarm"
when 
valve:Valve(hasAlarm==true)
then
SMS.send(valve.getId());
end;

我的想法是用第一条规则处理所有处于危急状态的事件 . 然后根据第二条规则,如果任何阀门有警报,由“如果关键”规则设置,则发送短信 .

问题是我第一次执行规则时不发送短信 . 这似乎是因为两个规则的“何时”同时得到验证 .

我的问题是如何告诉Drools我想首先执行“If critical”,然后,一旦调用'activateAlarm'方法,执行规则“If alarm”,以便发送SMS .

我已经尝试了显着性,但这不是我想要的,因为这只是执行顺序,在'when'完成验证之后,正如我所说的同时为两个规则完成的 .

还试过了Agenda-group和setFocus,但它并没有把我带到任何地方 .

任何的想法?这可能与Drools一起吗?

3 回答

  • 0

    问题是执行第一条规则后的事实不会更新 . 要使用第1个规则中更改的值,您必须使用更新功能更新值 .

  • 0

    您可以使用Drools的显着性关键字 . 给第一条规则赋予正的显着性值 . 参见文档here . 尝试像这样定义你的规则

    rule "If critical"
    salience 100 
    when 
    incident:Incident(state=CRITICAL)
    then
    incident.getIncidentValve().activateAlarm();
    end;
    
    rule "If alarm"
    when 
    valve:Valve(hasAlarm==true)
    then
    SMS.send(valve.getId());
    end;.
    
  • 0

    使用扩展属性规则如果警报扩展如果严重

    所以 If alarm 规则只有在 IF critical 规则任务完成后才会触发它意味着创建完全依赖于先前的规则而且如果第二个规则中需要更新值,则必须使用修改或更新来更新第一个规则中的事实 . 希望我的回答能帮助你 . 如果有任何问题,请告诉我 .

相关问题