簡體   English   中英

流口水:僅在執行另一個規則后執行規則

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM