規則的生命週期

規則生命週期中的每個階段都可以具有多重原因及影響。藉由將表示式寫入及包括在生命週期動作中 (如 <lifeCycleActions> 元素所定義),規則撰寫者可以定義在每個階段要採取的動作。

規則生命週期中的階段

下列為規則生命週期的四個主要階段:
載入
將規則載入執行中的「主動式相互關聯技術」引擎,可觸發 <onLoad> 元素中的動作。
啟用
啟用規則,可觸發 <onActivation> 元素中的動作。
停用
停用規則,可觸發 <onDeactivation> 元素中的動作。
卸載
從執行中的「主動式相互關聯技術」引擎卸載規則,可觸發 <onUnload> 元素中的動作。

在規則的生命週期中,啟用及停用階段可以出現多次, 但是載入及卸載階段只會出現一次。

通常,您不需要定義生命週期動作。下列是您可能想要定義特定生命週期動作時的範例:
  • 載入特定規則之後,您可能會想建立與在該規則內需要存取之外部系統 (如資料庫管理程式) 的連線。而在卸載此相同的規則時,則要捨棄該連線並執行所有必要的清除程序。
  • 啟用特定規則之後,您可能會想驗證該規則是否可使用特定資源。
  • 停用臨界值規則,但尚未到達臨界值且時段尚未結束時,您可能會想將含有此資訊的郵件轉寄給某人。
因為在生命週期中可以發生多次啟用及停用規則的動作,所以會經常執行您為這些階段編碼的任何動作。

每個生命週期階段的原因及影響

表 1列出每個生命週期階段的原因及影響。

表 1. 每個生命週期階段的原因及影響
生命週期階段 原因 影響
載入 適用於下列任何情況:
  • 新增或取代規則或規則區塊,會載入新的規則。
  • 取代「主動式相互關聯技術」引擎中的規則集,會載入新規則集中的規則。
執行 <onLoad> 元素中的動作。
啟用 已啟用規則。可以採用下列任何一種方式來啟用規則:
  • 根據 <activationInterval> 元素中的定義
  • 透過利用 act_lib 變數來存取的 activate() 方法
  • 透過應用程式呼叫「主動式相互關聯技術」引擎中的 activate() 方法
如果規則不在作用中,則會執行 <onActivation> 元素中的動作。
停用 已停用規則。可以採用下列任何一種方式來停用規則:
  • 根據 <activationInterval> 元素中的定義 (只是 <activationByGroupingKey> 元素中的 <deactivateOnEvent> 元素不會造成規則停用)
  • 透過利用 act_lib 變數存取的 deactivate() 方法
  • 透過應用程式呼叫「主動式相互關聯技術」引擎中的 deactivate() 方法
如果規則在作用中,則會執行 <onDeactivation> 元素中的動作。
卸載 適用於下列任何情況:
  • 關閉「主動式相互關聯技術」引擎,可卸載規則。
  • 移除或取代規則或規則區塊,可卸載舊的規則。
  • 移除或取代「主動式相互關聯技術」引擎中的規則集,可卸載舊規則集中的規則。
如果規則在作用中,則會執行 <onDeactivation> 元素中的動作,然後執行 <onUnload> 元素中的動作。否則,只會執行 <onUnload> 元素中的動作。