使用策略的订单处理
本主题适用于 Windows Workflow Foundation 4。
订单处理策略示例演示了 Windows Workflow Foundation (WF) 的 .NET Framework 3.5 版 中引入的一些主要功能。以下功能对 WF 规则引擎而言是新功能:
支持运算符重载。
支持 new 运算符,允许用户从 WF 规则创建新的对象和数组。
支持扩展方法,使用户能够从与 C# 编码样式兼容的 WF 规则中调用扩展方法。
注意: |
---|
此示例需要安装 .NET Framework 3.5 版才能生成和运行。若要打开项目和解决方案文件,需要使用 Visual Studio 2010。 |
此示例演示了一个 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
属性。
OrderErrorCollection
上的重载运算符 +
在 OrderErrorLibrary
项目的 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 中定义的类和方法。
生成所有项目。
单击**“运行”**。
注意: |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\WF_WCF_Samples\WF\Basic\Rules\Policy\OrderProcessingPolicy
|