任务 3:创建使用规则和条件顺序工作流
在此任务中,您将创建一个不包含任何活动的基本顺序工作流。 通过添加要发送回宿主应用程序的必要活动和逻辑,您可以随着教程的进展而基于此工作流完成各个步骤。
备注
虽然建议您按顺序进行下列练习,但并不要求您这么做。 您可以通过打开示例项目并执行下节中的步骤来开始此练习。
创建工作流源文件
按照以下步骤创建源文件,并定义用于该教程其余部分的工作流。
在 Visual Studio 中创建 DiscountWorkflow 顺序工作流源文件
- 在“解决方案资源管理器”中,右击 RulesAndConditions 项目,再单击“添加”和“新建项”。 选择“类”并将其名称更改为 DiscountWorkflow。
使用文本编辑器创建 DiscountWorkflow 顺序工作流源文件
在项目目录中,创建一个名为 DiscountWorkflow 的新文件。
如果要创建 C# 应用程序,请为该文件使用 cs 扩展名;如果要创建 Visual Basic 应用程序,请为文件使用 .vb 扩展名。
在主项目文件 (RulesAndConditions) 中,在您在上一任务中创建的 ItemGroup 元素中,添加新的 Compile 元素。
向 Compile 元素添加一个名为 Include 的新属性。
使用在步骤 1 中创建的文件名作为属性值。
向 Compile 元素添加一个名为 SubType 的新的子元素。
为该元素赋予 Component 值。 ItemGroup 节点将如下所示:
<ItemGroup> <Compile Include="DiscountWorkflow.vb"> <SubType>Component</SubType> </Compile> <Compile Include="PointOfSaleSimulator.vb"> <SubType>Form</SubType> </Compile> <Compile Include="Program.vb"/> </ItemGroup>
<ItemGroup> <Compile Include="DiscountWorkflow.cs"> <SubType>Component</SubType> </Compile> <Compile Include="PointOfSaleSimulator.cs"> <SubType>Form</SubType> </Compile> <Compile Include="Program.cs" /> </ItemGroup>
定义 DiscountWorkflow 顺序工作流
在 DiscountWorkflow 文件中,添加下列命名空间指令,以导入必须用于工作流的类型。
using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Reflection; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.Runtime; using System.Workflow.Activities; using System.Workflow.Activities.Rules;
在 Microsoft.Samples.Workflow.Tutorials.RulesAndConditions 命名空间中创建一个名为 DiscountWorkflow 的新密封类。
从 SequentialWorkflowActivity 派生在上一步创建的类。
Namespace Microsoft.Samples.Workflow.Tutorials.RulesAndConditions Public NotInheritable Class DiscountWorkflow : Inherits SequentialWorkflowActivity End Class End Namespace
namespace Microsoft.Samples.Workflow.Tutorials.RulesAndConditions { public sealed class DiscountWorkflow : SequentialWorkflowActivity { } }
在 DiscountWorkflow 类中创建默认构造函数。
在此构造函数中,调用在下一步中创建的 InitializeComponent 方法。
public DiscountWorkflow2() { InitializeComponent(); }
在 DiscountWorkflow 类中,创建一个名为 InitializeComponent 的私有方法。
在 InitializeComponent 方法中,将 DiscountWorkflow 类的 Name 属性设置为 "DiscountWorkflow" 值。
private void InitializeComponent() { this.Name = "DiscountWorkflow"; }
修改宿主应用程序
既然您已创建了基本顺序工作流,就必须创建代码,才能在 Windows 窗体中单击“签出”按钮时启动该工作流。 对于此教程,您将在应用程序启动时创建一个 WorkflowRuntime 实例,并将事件处理程序添加到 WorkflowTerminated 和 WorkflowCompleted 事件。 在针对“签出”按钮的事件处理程序中,您将启动 DiscountWorkflow。
在下一个练习(即练习 2:与 IfElseActivity 一起使用规则和条件)中,您将在执行工作流时将任何必要数据传递到该工作流。 但是,在本练习中,只需启动工作流。
启动 DiscountWorkflow 顺序工作流
在 PointOfSaleSimulator 类中,创建一个名为 workflowRuntime 的新私有 WorkflowRuntime 字段并创建一个新实例。
private WorkflowRuntime workflowRuntime = new WorkflowRuntime();
在 PointOfSaleSimulator 构造函数中,在调用 InitializeComponent 方法之后,调用在您在上一步中创建的 WorkflowRuntime 对象中定义的 StartRuntime 方法。
为由 WorkflowRuntime 对象引发的 WorkflowCompleted 事件创建一个名为 workflowRuntime_WorkflowCompleted 的事件处理程序。
为由 WorkflowRuntime 对象引发的 WorkflowTerminated 事件创建一个名为 workflowRuntime_WorkflowTerminated 的事件处理程序。
workflowRuntime.StartRuntime(); workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs> (workflowRuntime_WorkflowCompleted); workflowRuntime.WorkflowTerminated += new EventHandler<WorkflowTerminatedEventArgs> (workflowRuntime_WorkflowTerminated);
创建一个名为 workflowRuntime_WorkflowCompleted 的新私有方法,用于接受名为 sender 的 Object 和名为 e 的 WorkflowCompletedEventArgs 作为参数。
备注
现在,此方法留空,但您将在本教程后面向其添加其他功能。
void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e) { }
创建一个名为 workflowRuntime_WorkflowTerminated 的新私有方法,用于接受名为 sender 的 Object 和名为 e 的 WorkflowTerminatedEventArgs 作为参数。
在 workflowRuntime_WorkflowTerminated 方法中,通过在 WorkflowTerminatedEventArgs 参数中使用 Exception 的 Message 属性来显示一条消息。
void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e) { MessageBox.Show("Workflow terminated: " + e.Exception.Message); }
在 PointOfSaleSimulator 类的 btnCheckout_Click 方法中,调用 workflowRuntimeObject 的 CreateWorkflow 方法,并将 DiscountWorkflow 类型作为参数传递。
从由在上一步中添加的 CreateWorkflow 方法返回的对象调用 Start 方法。
private void btnCheckout_Click(object sender, EventArgs e) { Type type = typeof(DiscountWorkflow); workflowRuntime.CreateWorkflow(type).Start(); }
编译代码
有关编译代码的信息,请参见编译代码。
在练习 2:与 IfElseActivity 一起使用规则和条件中,您将创建 DiscountWorkflow 和主机程序用于销售点仿真程序所需的基础结构,并将使用 IfElseActivity 活动。
请参见
参考
SequentialWorkflowActivity
WorkflowTerminated
WorkflowCompleted
StartRuntime
WorkflowCompletedEventArgs
WorkflowTerminatedEventArgs
概念
其他资源
练习 2:与 IfElseActivity 一起使用规则和条件
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。