共用方式為


使用Microsoft規則編輯器建立規則 (預覽)

適用於:Azure Logic Apps (標準)

重要

此功能處於預覽狀態,且受限於 Microsoft Azure 預覽版的補充使用規定

規則會控管商務程序運作方式的商業規則。 為了協助您建立這些規則以搭配您的 Azure Logic Apps 規則引擎專案使用,Microsoft Rules Composer 提供一個可視化工具,用於撰寫和版本控制規則集和詞彙。

本操作說明指南提供規則運作方式的概觀,以及如何使用 Microsoft Rules Composer 建立規則。

必要條件

  • 下載並安裝 Microsoft Rules Composer

  • 如果您有想要處理的現有規則集,則需要包含該規則集的 XML 檔案。 否則,本指南會示範如何建立新的規則集,並儲存為 XML 檔案。

    重要

    如果您現有的 XML 檔案相依於任何 .NET 元件,或您用來新增事實的元件具有其他相依性,請務必將所有這些檔案保留在相同資料夾和本機Microsoft Rules Composer 的目錄中。

什麼是規則?

規則是宣告式語句,其中包含評估條件的條件和動作。 如果結果為 true,規則引擎會執行一或多個動作。 下列格式會定義 Azure Logic Apps 規則引擎中規則的語法:

IF <條件> THEN <動作>

下列範例規則會藉由比較兩個貨幣值與使用交易金額和折扣形式的數據或事實,判斷是否要執行交易並套用商業規則:

如果購買的金額大於數量,則為客戶提供額外的折扣

  • 條件:true-or-false 布爾運算式,其中包含套用至事實的一或多個述詞。 述詞是子句,其中包含動詞,並陳述主題的相關內容。 在我們的範例中,述詞大於購買的事實金額。 此條件一律會評估為 truefalse。 您可以將述詞與邏輯運算元 AND、OR 和 NOT 結合,以形成潛在的長邏輯表達式,但一律會評估為 truefalse

  • 動作:動作是條件評估的功能結果。 如果符合規則條件,則會啟動對應的動作或動作。 在我們的範例中, 提供額外的折扣 是只有在條件為 true 時才會發生的動作,也就是 購買的 IF 金額大於 $1,000。 動作會透過呼叫方法、設定物件的屬性,或對 XML 檔執行設定 作業,在 Azure Logic Apps 規則引擎中表示動作。

  • 事實:事實是關於規則運作的世界的離散資訊。 在我們的範例中, 數量數量 是事實。 事實可能來自許多來源,例如事件系統、混合式應用程式中的物件等等,而且必須使用下列其中一個元素,饋送至 Azure Logic Apps 中的規則引擎:

    • .NET 物件,例如方法、屬性和欄位。
    • XML 檔,例如專案、屬性和文件子區段。
  • 詞彙:條件和動作中使用的事實易記名稱。 如需詳細資訊,請參閱 建立和管理詞彙

下圖和各節說明條件、動作和事實如何結合在一起:

概念圖顯示Microsoft規則引擎。

Microsoft規則編輯器

您可以使用 Microsoft Rules Composer 來建立、修改、版本和儲存規則。 或者,您也可以以程序設計方式執行這些工作。 規則撰寫器包含下列 UI 元素:

時間範圍 描述
RuleSet Explorer 建立包含一或多個規則的規則集。
條件編輯器 建置規則的條件。
動作編輯器 建置條件評估為 true 時執行的動作。
事實總管 流覽 XML 和 .NET 事實,然後將這些事實拖曳至條件編輯器或動作編輯器。

概念圖顯示Microsoft規則編輯器。

建立和管理規則集

規則集是一組規則,您可以根據網域、限定內容或任何商務界限來群組在一起。 若要管理規則存放區中的規則集和規則,請使用 RuleSet Explorer。 您可以建立、修改、測試或刪除規則集及其規則。

  1. [Microsoft規則編輯器] 中,開啟 [ 規則存放區 ] 功能表,然後選取 [ 載入]。

  2. 尋找並選取包含您要開啟之規則存放區的 XML 檔案。

  3. [RuleSet 總 管] 視窗中,開啟 RuleSets 快捷方式功能表,然後選取 [ 新增 RuleSet]。

    Microsoft Rules Composer 會建立新的空白規則集,並將規則集版本編號 為 1.0 做為預設版本。

  4. 儲存規則集。 在 [ 規則存放區 ] 功能表上,選取 [ 儲存],這會為您的規則集建立 XML 檔案。

下表描述可用來處理規則集的其他 RuleSet Explorer 命令:

Task Command
建立新的規則集。 新增規則集
建立所選規則集的新空白版本。 您可以從其他版本複製規則,並將其貼到新版本中。 新增版本
將選取的規則集版本複製到剪貼簿。 複製
將規則集版本及其內容貼到選取的規則集。 貼上
刪除選取的規則集版本。 刪除
刪除選取的規則集及其所有版本。 在父規則集層級刪除
使用 選項重載選取的規則集版本及其規則,以捨棄該版本中的任何目前變更,並從規則存放區還原內容。 重新載入
儲存對所選版本及其規則所做的任何變更。 儲存
使用規則引擎專案之前,請先測試選取的規則集版本。 測試規則集

下表描述規則集版本的屬性:

屬性
名稱 規則集的名稱。

注意:您只能藉由更新 規則集的 Name 屬性,而不是規則集版本來變更此值。
目前的版本 目前在 RuleSet Explorer 中選取的規則集版本。
事實擷取器 用來提供事實給規則集版本的事實擷取器。

Microsoft Rules Composer 支援功能建置,並使用事實擷取器來提供事實。 如需詳細資訊,請參閱下列文件:

- 在規則集上執行進階工作
- 建置事實建立者和擷取者
最大執行迴圈深度 擲回執行迴圈例外狀況之前,正向鏈結算法的最大深度。

默認迴圈計數為 65,536。
翻譯持續時間 擲迴轉出逾時例外狀況之前,轉譯規則的時間上限。

默認持續時間為 60,000 毫秒。
翻譯工具 用於翻譯規則的翻譯工具。

Microsoft Rules Composer 目前僅支援預設的內建翻譯工具,但也支援擴充性來新增更多翻譯工具。
版本描述 目前版本的描述。

如需使用規則集的詳細資訊,請參閱 在規則集上執行進階工作。

建立和管理規則

  1. 在 [Microsoft規則編輯器] 的 [規則存放區] 功能表中,選取 [載入]。

  2. 尋找並選取包含您要處理之規則存放區的 XML 檔案。

  3. [RuleSet Explorer] 視窗中,尋找您要新增規則的規則集版本。

  4. 開啟規則集版本的快捷方式功能表,然後選取 [ 新增規則]。

    規則編輯器隨即開啟,讓您可以新增條件動作

下列清單描述您可以變更規則的方式:

  • 建立新版的規則集。

  • 直接編輯現有的規則集版本。 您可以變更個別規則、新增規則或刪除現有的規則。

下表描述所有可用來處理規則的 RuleSet Explorer 快捷方式命令:

Task 快速鍵命令
在選取的規則集版本中建立新的規則。 新增規則
將選取的規則複製到剪貼簿。 複製
將選取的規則複製到剪貼簿,並刪除規則。 剪下
將規則貼到選取的規則集版本。 貼上
刪除選取的規則。 刪除

下表描述規則的屬性:

屬性
名稱 規則的名稱。
使用中 指出規則已啟用或停用。
優先順序 規則集內規則的優先順序。 索引越高,規則優先順序越高。 優先順序較高的規則動作會先執行。

預設值為 0,表示中間優先順序。 您可以將值設為正數或負數。 如需詳細資訊,請參閱 規則引擎優化

停用或啟用規則

您可以將規則設定為非使用中,讓規則在規則集執行時不會執行,也可以重新啟用已停用的規則。

  1. [RuleSet 總管] 中,選取規則。

  2. 在 [ 屬性] 視窗中,將 Active 屬性設定為下列其中一個值:

    • False:已停用
    • True:已啟用

設定規則優先順序

您可以設定規則的優先順序,讓動作在具有不同優先順序的另一個規則動作之前或之後執行。 優先順序是相對的,因此規則中具有特定優先順序的所有動作都會依序執行,而規則中具有較低優先順序值的任何動作。

  1. [RuleSet 總管] 中,選取規則。

  2. 在 [屬性] 視窗中,將 [優先順序] 設定為您想要的整數值。

建立或編輯條件

若要建置、編輯或檢視觸發規則的條件,請使用條件編輯器,這是規則編輯器的一部分。 若要建置條件,您可以執行下列工作:

  • 新增內建或使用者定義的述詞,如果有的話。

  • 從 [事實總管] 視窗拖曳專案,以述詞定義自變數。

  • 選取自變數連結以內嵌輸入自變數值。

  • 在條件中移動述詞和邏輯運算元。

    注意

    述詞和邏輯運算符出現的順序不會判斷其評估順序。

  • 從條件中刪除述詞和邏輯運算元。

將述詞新增至條件

  1. [RuleSet 總管] 中,選取規則。

  2. [IF ] 視窗中,這是條件編輯器,開啟 [ 條件 ] 快捷方式功能表,然後選擇下列其中一項:

    • 選取邏輯運算子。 從運算子的快捷方式功能表中,新增您要評估的述詞或巢狀邏輯運算符。

      如需設定邏輯運算子的詳細資訊,請參閱 將算術和邏輯運算元新增至規則

    • 從 [ 述詞] 快捷方式功能表中,如果您有任何內容,請選取內建述詞或使用者定義的述詞。

    下表描述可供您從述詞快捷方式選取的可用述詞表示式:

    內建述詞 描述
    之後 回答問題的時態述詞,「time1 在 time2 之後是否依時間順序排列?
    之前 回答問題的時態述詞,「time1 在 time2 之前是否依時間順序排列?
    介於 回答問題的時態述詞:「time1 在 time2 和 time3 之間是否依時間順序排列?
    等於 關係相等運算符。
    Exists 存在述詞,回答「指定的 XML 元素或屬性是否存在嗎?
    GreaterThan 大於運算子的關係型。
    GreaterThanEqual 關係型大於或等於運算符。
    LessThan 關係型小於運算符。
    LessThanEqual 關係型小於或等於運算符。
    火柴 判斷正則表達式是否存在於指定的輸入字串中。
    NotEqual 關係型不等比較運算符。
    範圍 判斷某個值是否存在於某個範圍內。

在條件中指定述詞的自變數

請遵循 下列步驟,動作中的函式相同。

在條件中移動邏輯運算符或述詞

在條件編輯器中,執行下列步驟之一:

  • 將邏輯運算符或述詞拖曳至另一個邏輯運算符或 [ 條件] 節點。

  • 開啟邏輯運算符或述詞的快捷方式功能表,然後選取 [上移] 或 [移] 分別移動專案一個位置或層級。

建立或編輯動作

若要建置、編輯或檢視符合條件時執行的動作,請使用動作編輯器,這是規則編輯器的一部分。 若要建置動作,您可以執行下列工作:

  • 新增內建或使用者定義函式,如果有的話。
  • 從 [事實總管] 視窗拖曳專案,以定義函式中的自變數。
  • 選取自變數連結以內嵌輸入自變數值。
  • 移動動作內的函式。

新增函式

  1. [RuleSet 總管] 中,選取規則。

  2. THEN 視窗中,這是動作編輯器,開啟 [動作 ] 快捷方式功能表,然後選取內建函式以新增動作和自變數。

    下表描述您可以從 [動作] 快捷方式選取的可用函式:

    函式 描述
    Assert 將新事實新增至規則引擎實例的工作記憶體。
    Clear 重設規則引擎實例的工作記憶體和議程。 如需工作記憶體和議程的詳細資訊,請參閱 規則引擎優化
    終止規則處理。
    收回 從規則引擎實例的工作記憶體中移除事實。
    RetractByType 從規則引擎實例的工作記憶體中移除具有指定型別的事實。
    更新 更新規則引擎實例的工作記憶體中的事實。

如需詳細資訊,請參閱 使用控制函式優化規則。

在動作中指定函式的自變數

請遵循 這些步驟,在條件中為述詞相同。

移動動作中的函式

規則中的動作會根據指定的順序執行,但規則引擎控件函式除外,這些函式會依其他動作執行。

  • 在動作編輯器中,開啟動作的快捷方式功能表,然後選取 [上移] 或 [移] 分別移動動作一個位置或層級。

在條件中指定述詞的自變數,或動作中的函式

在條件編輯器或動作編輯器中,執行下列步驟之一:

  • 在述詞或函式中,選取預設自變數,並在適當情況下輸入您想要或從清單中選取的值。

  • 在 [事實管] 視窗中,選取具有您要作為自變數之字詞的索引卷標,然後將該字詞拖曳至個別編輯器中述詞或函式中的自變數。

    字詞必須具有述詞或函式預期的類型。 否則,您會收到錯誤。

  • 若要以空字串值取代自變數,請開啟自變數的快捷方式功能表,然後選取 [ 設定為空字串]。

  • 若要以 Null 常數定義取代自變數,請開啟自變數的快捷方式功能表,然後選取 [ 設定為 null]。

    注意

    如果您的自變數類型不是您可以設定為 null 的類型,則可能不會顯示此選項。

  • 若要將算術或邏輯運算元新增至自變數,請參閱 將算術和邏輯運算元新增至規則

在條件或動作中尋找專案來源

在條件或動作編輯器中,執行下列其中一個步驟:

  • 若要在 [事實總管] 中找出用來在條件中建立述詞、動作中的函式或其中一個自變數的詞彙定義,請開啟述詞、函式或自變數的快捷方式功能表,然後選取 [移至詞彙]。

  • 若要在 [事實總管] 中找出您用來在條件中建立述詞的 .NET 成員或 XML 元素、動作中的函式或其中一個自變數,請開啟述詞、函式或自變數的快捷方式功能表,然後選取 [移至來源事實]。

刪除述詞、邏輯運算符或動作

在條件編輯器中,執行下列步驟之一:

  • 選取項目,然後按 [刪除] 鍵。

  • 選取專案,例如述詞、邏輯運算符或動作,然後選取 [刪除<項目類型>]。

  • 若要刪除自變數加上任何巢狀自變數並還原預設定義,請開啟自變數的快捷方式功能表,然後選取 [ 重設自變數]。

將事實新增至規則

您可以指定可在規則存放區中儲存的數據源參考,以供後續在規則和詞彙中做為事實使用。 您可以指定具有類別和類別成員的 .NET 元件,或具有 XML 檔案元素和屬性的 XSD 架構。

  1. 若要流覽您已從 .NET 元件、XSD 架構或詞彙定義新增的數據,請從 [事實 總管] 視窗,選取 [詞彙 ] 索引卷標、 [XML 架構 ] 索引卷標或 [.NET 類別 ] 索引卷標,根據您想要的數據存在的位置。

  2. 將數據從對應的索引標籤拖曳到您要在條件編輯器中的條件內,或是在動作編輯器中的動作內。

將 .NET 元件新增為 .NET 事實的數據源

  1. 在 [事實總 管] 視窗中,選取 [.NET 類別] 索引標籤

  2. 開啟 .NET 元件節點的快捷方式功能表,然後選取 [瀏覽]。

  3. 尋找並開啟您想要使用的 .NET 元件。

    在 .NET 元件,選取的元件會連同其類別和成員一起顯示,例如:

    顯示Microsoft規則編輯器的螢幕快照,其中包含 [事實總管]、[類別] 和 [類別成員]。

重要

如果您在本機目錄中更新 .NET 元件,Microsoft Rules Composer 不會自動重新整理 .NET 元件。 如需重新整理更新元件參考的步驟,請參閱 更新 .NET 元件參考

更新 .NET 元件參考

  • 如果您新增具有不同名稱或版本的新 .NET 元件,則必須更新規則集以參考新的元件。 針對這項工作,在Microsoft Rules Composer 中,您必須建立新的規則集版本,並更新新元件的參考,包括類別、方法等等。 若要載入更新的元件,請務必重新啟動 Microsoft Rules Composer。

  • 如果您更新的 .NET 元件使用相同的名稱、版本號碼等,您只需要將新元件新增至 Azure Logic Apps 規則引擎函式專案。

拿掉 .NET 元件做為數據源

  1. 在 [事實總 管] 視窗中,選取 [.NET 類別] 索引標籤

  2. 在 [.NET 元件] 下,開啟元件的快捷方式功能表,然後選取 [移除]。

將 XML 架構新增為 XML 事實的數據來源

  1. 在 [事實總管] 視窗中,選取 [XML 架構] 索引標籤

  2. 開啟 [架構] 節點的快捷方式功能表,然後選取 [流覽]。

  3. 在 [ 架構檔案] 方塊中,尋找並選取 XML 架構 (.xsd) 檔案,然後選取 [ 開啟]。

    在 [架構]下,XML 架構會連同其 XML 元素一起出現,例如:

    顯示Microsoft規則編輯器、事實總管和 XML 元素的螢幕快照。

自變數中使用的 XML 元素系結

在商務規則架構中,TypedXmlDocument 類別是Microsoft 。符合 NET 規範的類別庫,代表 XML 檔類型,而且是實作 ITypedFact 介面的其中一個類別。 這些類別稱為 具型別事實

當您使用 XML 檔中的節點做為規則中的自變數時,會建立兩個 XPath 運算式:選取 器系 結和 欄位系結,根據您選擇使用的節點:

  • 如果節點具有子節點,則會建立選取器系結,也稱為 XmlDocument 系結至節點,但不會建立字段系結。

  • 如果節點沒有子節點,則會建立選取器系結,也稱為 XmlDocument 系結至節點的父節點。 欄位系結,也稱為 XmlDocumentMember 系結,會建立至節點本身。 此欄位系結相對於選取器系結。

將 XML 節點拖曳至規則自變數之前,您可以變更 XML 節點的預設 XPath 表達式,並將新的系結資訊放在規則集中。

注意

當架構在Microsoft Rules Composer 中重載時,您必須重新輸入您在 Microsoft Rules Composer 中對 XPath 表達式所做的任何編輯。

例如,假設您有下列 XML 架構:

顯示Microsoft規則編輯器、事實總管、XML 元素及其屬性的螢幕快照。

  • 如果您在自變數中使用 Income 節點,則只會建立選取器系結,因為節點有子節點。

    在 [ 屬性] 視窗中,節點的 XPath 選取器 屬性包含下列預設 XPath 表達式:

    /*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']/*[local-name()='Income' and namespace-uri()='']
    
  • 如果您在自變數中使用 Name 節點,則會建立選取器系結和字段系結。

    在 [ 屬性 ] 視窗中,節點的系結信息會顯示如下:

    屬性
    XPath 欄位 *[local-name()='Name' and namespace-uri()='']
    XPath 選取器 /*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']