共用方式為


外部規則集工具組

在工作流程應用程式內使用規則時,規則通常是元件的一部分。 在某些案例中,您可能想要與元件分開維護 RuleSet,以便更新它們,而不需重建和部署工作流程元件。 這個範例讓你能在資料庫中管理和編輯規則集,並在執行時從工作流程存取這些規則集。 這可讓執行中的工作流程實例自動納入 RuleSet 變更。

外部 RuleSet 工具組範例包含 Windows Forms 型工具,可用來管理及編輯資料庫中的 RuleSet 版本。 它也包含執行這些規則的活動和主機服務。

備註

此範例需要 Microsoft SQL Server

Visual Studio 提供 RuleSet 編輯器作為 Windows Workflow Foundation (WF) 的一部分。 您可以按兩下 Policy 工作流程中的活動來啟動此編輯器;它會將定義的 RuleSet 物件串行化為與工作流程相關聯的 .rules 檔案( Policy 活動會針對工作流程執行 RuleSet 實例)。 當您建置工作流程專案時,.rules 檔案會編譯成元件作為資源。

此範例的元件包括:

  • RuleSet 圖形使用者介面工具,可用來編輯和管理資料庫中的 RuleSet 版本。

  • 一個在主應用程式上配置的 RuleSet 服務,並從資料庫存取 RuleSet。

  • 請求 ExternalPolicy RuleSet 服務中的 RuleSet,並對工作流程執行該 RuleSet 的活動。

下圖顯示元件的互動。 後續各節會描述每個元件。

展示外部規則集工具組範例概觀的圖表。

RuleSet 工具

下圖是 RuleSet 工具的螢幕快照。 從 [規則存放區 ] 功能表,您可以從資料庫載入可用的 RuleSet,並將修改過的 RuleSet 儲存回存放區。 應用程式組態檔會提供 RuleSet 資料庫的資料庫連接字串。 當您啟動此工具時,會自動從設定的資料庫載入 RuleSet。

顯示 RuleSet Browser 的螢幕快照。

RuleSet 工具會將主要和次要版本號碼套用至 RuleSets,讓您能夠同時維護及儲存多個版本(除了版本控制功能之外,此工具不會提供鎖定或其他組態管理功能)。 使用此工具,您可以建立新的 RuleSet 版本或刪除現有的版本。 當您按兩下 [ 新增] 時,此工具會建立新的 RuleSet 名稱,並套用 1.0 版。 當您複製版本時,此工具會建立所選 RuleSet 版本的複本,包括包含的規則,並指派新的唯一版本號碼。 這些版本號碼是以現有 RuleSet 的版本號碼為基礎。 您可以使用表單上的相關欄位來變更 RuleSet 名稱和版本號碼。

當您按下 [編輯規則] 時,RuleSet 編輯器隨即啟動,如下圖所示:

顯示 RuleSet 編輯器的螢幕快照。

這是重新托管屬於 Windows Workflow Foundation Visual Studio 增益集的編輯器對話框。 它提供相同的功能,包括 Intellisense 支援。 規則是針對工具中與 RuleSet 相關聯的目標類型(例如工作流程)所撰寫;當您在主要工具對話框中按兩下 [瀏覽 ] 時,[ 工作流程/類型選取器 ] 對話框隨即出現,如圖 4 所示。

工作流程 /類型選擇

圖 4:工作流程/類型選取器

您可以使用 工作流程/類型選取器 對話框來指定一個程式集及該程式集內的特定類型。 此類型是用來撰寫和執行規則的目標類型。 在許多情況下,目標類型是工作流程或其他活動類型。 不過,您可以針對任何 .NET 類型執行 RuleSet。

元件檔的路徑和資料庫中的 RuleSet 類型 name are stored with the ,以便在從資料庫擷取 RuleSet 時,工具會嘗試自動載入目標類型。

當您在 [工作流程/類型選取器] 對話框中按兩下 [確定] 時,它會根據 RuleSet 驗證選取的類型,以確保目標類型具有規則所參考的所有成員。 錯誤會顯示在 [ 驗證錯誤 ] 對話框中。 您可以選擇繼續變更,儘管發生錯誤,或按兩下 [ 取消]。 從主要工具對話框中的 [ 工具 ] 選單中,您可以按下 [ 驗證 ] 來針對目標活動重新驗證 RuleSet 版本。

顯示 [驗證錯誤] 對話框的螢幕快照。

您可以從工具的 [ 數據] 功能表,匯入和匯出 RuleSet。 當您按兩下 [ 匯入] 時,會出現檔案選擇器對話框,您可以從中選取 .rules 檔案。 這可能不是最初在 Visual Studio 中建立的檔案。 .rules 檔案應該包含包含條件集合和 RuleSets 集合的串行化 RuleDefinitions 實例。 此工具不會使用條件集合,但會使用 RuleDefinitions .rules 格式來允許與 Visual Studio 環境互動。

選取 .rules 檔案之後,會出現 RuleSet Selector 對話方塊。 您可以使用對話框,從您要匯入的檔案中選取 RuleSets(預設值指定所有 RuleSets)。 .rules 檔案中的 RuleSet 沒有版本號碼,因為它們在 WF 專案中的版本設定與元件版本相同。 在匯入程式期間,此工具會自動指派下一個可用的主要版本號碼(您可以在匯入之後變更):您可以在 RuleSet 選取器 清單中看到指派的版本號碼。

針對它所匯入的每個 RuleSet,此工具會根據 RuleSet 中使用的成員,嘗試從 .rules 檔案位置下的 bin\Debug 資料夾找到相關聯的類型。 如果工具找到多個相符類型,它會嘗試根據 .rules 檔名與類型名稱之間的比對來選擇類型(例如, Workflow1 類型對應至 Workflow1.rules)。 如果存在多個匹配項目,系統會要求您選擇類型。 如果這個自動識別機制找不到相符的元件或類型,則在匯入之後,您可以按兩下主要工具對話方塊上的 [ 流覽 ] 以瀏覽至相關聯的類型。 下圖顯示 RuleSet 選取器:

顯示 [RuleSet 選取器] 對話框的螢幕快照。

當您從主要工具功能表單擊 [數據導出 ] 時,[ RuleSet 選取器 ] 對話方塊會再次出現,您可以從中判斷應該匯出之資料庫的 RuleSet。 當您按兩下 [確定] 時,會出現 [ 儲存盤案 ] 對話框,您可以在其中指定所產生 .rules 檔案的名稱和位置。 因為 .rules 檔案不包含版本資訊,因此您只能選取一個具有指定 RuleSet 名稱的 RuleSet 版本。

PolicyFromService 活動

活動的程式代碼 PolicyFromService 很簡單。 其運作方式與 WF 所提供的活動Policy非常類似,但與其從 .rules 檔案擷取目標 RuleSet,而是改為呼叫宿主服務以取得 RuleSet 實例對象。 然後,它會對根工作流程活動實例執行 RuleSet。

若要在工作流程中使用該活動,請從工作流程專案新增對PolicyActivitiesRuleSetService組件的參考。 如需如何將活動新增至工具箱的討論,請參閱本主題結尾的程式。

將活動放在工作流程中之後,您必須提供要執行的 RuleSet 名稱。 您可以將名稱輸入為常值,或系結至另一個活動的工作流程變數或屬性。 您可以選擇輸入應該執行之特定 RuleSet 的版本號碼。 如果您將主要和次要版本號碼的預設值保留為 0,則會自動為活動提供資料庫中的最新版本號碼。

RuleSet 服務

服務負責從資料庫擷取指定的 RuleSet 版本,並將它傳回呼叫活動。 如先前所述,如果在呼叫中 GetRuleSet 傳遞的主要和次要版本值都是 0,服務會擷取最新版本。 此時,沒有 RuleSet 定義或實例的快取;同樣地,沒有將 RuleSet 版本標示為「已部署」的功能,以區別其與進行中的 RuleSet。

服務要存取的資料庫應該使用應用程式組態檔在主機上設定。

執行工具

  1. 設定工具與服務所使用 RuleSet 資料表的資料夾包含Setup.sql檔案。 您可以執行Setup.cmd批處理檔,在 SQL Express 上建立 Rules 資料庫,以及設定 RuleSet 數據表。

  2. 如果您編輯批處理檔或Setup.sql,並指定不要使用 SQL Express,或將數據表放在名為 以外的 Rules資料庫中,則 RuleSet 工具和 UsageSample 專案中的應用程式組態檔應該使用相同的資訊進行編輯。

  3. 執行Setup.sql腳本之後,您可以建置 ExternalRuleSetToolkit 方案,然後從 ExternalRuleSetTool 專案啟動 RuleSet 工具。

  4. RuleSetToolkitUsageSample循序工作流程主控台應用程式解決方案包含範例工作流程。 工作流程由PolicyFromService活動和兩個變數orderValuediscount組成,目標 RuleSet 在這些元素上運行。

  5. 若要使用範例,請建置 RuleSetToolkitUsageSample 方案。 然後從 RuleSet 工具主功能表中,點擊 [數據匯入],並指向 RuleSetToolkitUsageSample 資料夾中的 DiscountRuleSet.rules 檔案。 單擊 [規則存放區-儲存 ] 功能表選項,將匯入的 RuleSet 儲存至資料庫。

  6. PolicyActivities因為該組件是從範例工作流程專案中參考的,因此PolicyFromService活動會出現在工作流程中。 不過,它預設不會出現在工具箱中。 若要將它新增至工具箱,請執行下列動作:

    • 以滑鼠右鍵按下工具箱,然後選取 [ 選擇專案 ] (這可能需要一段時間)。

    • 當 [選擇工具箱項目] 對話框顯示時,點擊 [活動] 索引標籤。

    • 流覽至PolicyActivities方案中的ExternalRuleSetToolkit元件,然後按一下 [開啟]。

    • 請確保在 PolicyFromService 對話框中選取活動,然後按一下 確定

    • 活動現在應該會出現在 RuleSetToolkitUsageSample 元件 類別的工具箱中。

  7. RuleSet 服務已在控制台應用程式主機上使用下列語句在 Program.cs 中設定。

    workflowRuntime.AddService(new RuleSetService());
    
  8. 您也可以使用組態檔在主機上設定服務;如需詳細資訊,請參閱 SDK 檔。

  9. 應用程式組態檔會新增至工作流程專案,以指定服務要使用的資料庫連接字串。 這應該是 RuleSet 工具所使用的相同連接字串,它會指向包含 RuleSet 數據表的資料庫。

  10. 您現在可以像執行任何其他工作流程主控台應用程式一樣執行 RuleSetToolkitUsageSample 專案。 在 Visual Studio 內按 F5 或 Ctrl+F5,或直接執行 RuleSetToolkitUsageSample.exe 檔案。

    備註

    您必須關閉 RuleSet 工具來重新編譯使用範例,因為此工具會載入使用範例元件。