訂單處理原則
訂單處理原則範例將示範在 Windows Workflow Foundation (WF) 的 .NET Framework version 3.5 中引入的一些主要功能。 下列是 WF 規則引擎的新功能:
運算子多載支援。
new 運算子的支援,以便允許使用者從 WF 規則建立新的物件和陣列。
擴充方法的支援,可讓從 WF 規則呼叫擴充方法的使用者經驗與 C# 程式碼撰寫方式相容。
注意: |
---|
要建置和執行這個範例,必須安裝 .NET Framework version 3.5。要開啟專案和方案檔,必須要有 Visual Studio 2008。 |
此範例將示範 OrderProcessingPolicy 專案,其中會輸入包含可用項目的編號清單以及郵遞區號的客戶訂單。 如果兩個項目都正確,訂單便會成功處理,否則,原則會建立錯誤物件,並利用多載 +
運算子和預先定義的擴充方法來通知使用者發生錯誤。
注意: |
---|
如需擴充方法的詳細資訊,請參閱 C# 3.0 版規則 (本頁面可能為英文)。 |
此範例是由下列專案所組成:
OrderErrorLibrary
OrderErrorLibrary 是定義
OrderError
和OrderErrorCollection
類別的類別程式庫。OrderError
執行個體是在輸入無效輸入時所建立。 此類別程式庫也會提供OrderErrorCollection
類別上的擴充方法,此方法會輸出OrderErrorCollection
中所有OrderError
物件上的ErrorText
屬性。OrderProcessingPolicy
OrderProcesssingPolicy 專案是 WF 主控台應用程式,其中會定義單一
PolicyFromFile
活動。 此活動有三個規則:invalidItemNum
這個規則會驗證 1 到 6 之間 (包括 1 和 6) 的項目編號。 如果項目編號在有效範圍之內,此規則就不會執行任何動作 (除了列印至主控台)。 如果項目編號不是在 1 到 6 之間,invalidItemNum 規則便會執行下列動作:
建立新的
OrderError
物件,並將輸入的項目編號傳遞給它,然後在該物件上設定ErrorText
和CustomerName
屬性。建立
invalidItemNumErrorCollection
物件。將新建立的
OrderError
執行個體新增至invalidItemNumErrorCollection
。這樣便會示範 new 運算子的支援,而您可以透過該項支援來產生符合規則的物件。
invalidZip
這個規則會驗證郵遞區號有 5 個數字,而且範圍在 600 到 99998。如果郵遞區號在有效範圍之內,此規則就不會執行任何動作 (除了列印至主控台)。 如果郵遞區號少於 5 個數字,而且不是在 00600 到 99998 之間,invalidZip 規則便會執行下列動作:
建立
OrderError
物件,並將輸入的郵遞區號傳遞給它,然後在該物件上設定ErrorText
和CustomerName
屬性。建立
invalidZipCodeErrorCollection
物件。將新建立的
OrderError
執行個體新增至新建立的invalidZipCodeErrorCollection
。這個規則會再次示範 new 運算子的支援,而您可以透過它來產生符合規則的物件。
displayErrors
這個規則會檢查在兩個
OrderErrorCollection
物件 (invalidItemNumErrorCollection
和invalidIZipCodeErrorCollection
) 中的先前兩個規則是否有新增任何錯誤。 如果有發生錯誤 (invalidItemNumErrorCollection
或invalidZipCodeErrorCollection
不是 null),規則便會執行下列動作:
呼叫多載
+
運算子,以便將invalidItemNumErrorCollection
和invalidZipCodeErrorCollection
的內容複製到invalidOrdersCollection
OrderErrorCollection
執行個體。在
invalidOrdersCollection
上呼叫PrintOrderErrors
擴充方法,並輸出invalidOrdersCollection
中所有orderError
物件上的ErrorText
屬性。
在 OrderErrorLibrary
專案中,OrderErrorCollection
上的多載運算子 +
是定義在 OrderErrorCollection
類別中。 它會接受兩個 OrderErrorCollection
物件,並將它們結合成為一個 OrderErrorCollection
物件。
PrintOrderErrors
擴充方法也有定義在 OrderErrorLibrary
專案中。 擴充方法是新的 C# 功能,其可讓開發人員將新方法新增至現有 CLR 型別的公用合約,而不需為其建立子類別或重新編譯原始型別。
執行範例時會出現提示,要求您輸入名稱、要購買之項目的項目編號以及郵遞區號。 這份資訊接著會由定義於原則活動中的規則加以驗證。 下列是來自此程式的輸出範例:
Please enter your name: John
What would you like to purchase?
(1) Vista Ultimate DVD
(2) Vista Ultimate Upgrade DVD
(3) Vista Home Premium DVD
(4) Vista Home Premium Upgrade DVD
(5) Vista Home Basic DVD
(6) Vista Home Basic Upgrade DVD
Please enter an item number: 1
Please enter your 5-Digit zip code: 98102
Executing Rule: invalidItemNum
Executing Rule: invalidZip
Executing Rule: displayErrors
Thank you for your order, it has been processed.
Workflow Completed
Another Order? (Y/N): y
Please enter your name: Joel
What would you like to purchase?
(1) Vista Ultimate DVD
(2) Vista Ultimate Upgrade DVD
(3) Vista Home Premium DVD
(4) Vista Home Premium Upgrade DVD
(5) Vista Home Basic DVD
(6) Vista Home Basic Upgrade DVD
Please enter an item number: 8
Please enter your 5-Digit zip code: 0000
Executing Rule: invalidItemNum
Executing Rule: invalidZip
Executing Rule: displayErrors
Your order contains the following error(s)
Error: No item number found. Please choose an available item.
Error: Invalid zip code. Please choose a zip code between 00600 and 99998.
Workflow Completed
Another Order? (Y/N): n
設定、建置及執行範例
在 Visual Studio 中開啟 OrderProcessingPolicy.sln 專案檔。
在此方案中有兩個不同的專案:OrderErrorLibrary 和 OrderProcessingPolicy。 OrderProcessingPolicy 專案會使用定義於 OrderErrorLibrary 中的類別和方法。
建置所有專案。
按一下 [執行]。
Copyright © 2007 by Microsoft Corporation. All rights reserved.