[英]Drools: Execute a rule only after another was executed
我在同一個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;
我的想法是按照第一條規則處理所有處於關鍵狀態的事件。 然后,使用第二條規則,如果有任何閥門發出警報(由“如果緊急”規則設置),則發送SMS。
問題是,我第一次執行規則時,不會發送SMS。 之所以如此,是因為同時驗證了兩個規則的“何時”。
我的問題是如何告訴Drools我要先執行“如果緊急”,然后在調用“ activateAlarm”方法后執行規則“如果警報”,以便發送SMS。
我已經進行過顯着的嘗試,但這不是我想要的,因為這只是在“時間”驗證完成后的執行順序,正如我所說的,這兩個規則同時完成。
還嘗試了議程組和setFocus,但並沒有帶我去任何地方。
任何想法? Drools有可能嗎?
問題是執行第一條規則后的事實不會更新。 要使用在第一個規則中更改的值,您必須使用更新功能來更新值。
您可以使用Drools的顯着性關鍵字。 將正的Salience值賦予第一條規則。 請參閱此處的文檔。 嘗試像這樣定義您的規則
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;.
使用擴展屬性例外如果警報擴展如果緊急
因此, 如果僅在IF關鍵規則任務完成后才觸發警報規則,這意味着完全依賴以前的規則,並且還必須通過使用Modify或update來更新第一個規則中的事實,如果第二個規則中需要任何更新的值。 希望我的回答對您有所幫助。如有任何疑問,請告知我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.