任务 3:创建使用规则和条件顺序工作流

在此任务中,您将创建一个不包含任何活动的基本顺序工作流。 通过添加要发送回宿主应用程序的必要活动和逻辑,您可以随着教程的进展而基于此工作流完成各个步骤。

备注

虽然建议您按顺序进行下列练习,但并不要求您这么做。 您可以通过打开示例项目并执行下节中的步骤来开始此练习。

创建工作流源文件

按照以下步骤创建源文件,并定义用于该教程其余部分的工作流。

在 Visual Studio 中创建 DiscountWorkflow 顺序工作流源文件

  • 在“解决方案资源管理器”中,右击 RulesAndConditions 项目,再单击“添加”和“新建项”。 选择“类”并将其名称更改为 DiscountWorkflow。

使用文本编辑器创建 DiscountWorkflow 顺序工作流源文件

  1. 在项目目录中,创建一个名为 DiscountWorkflow 的新文件。

    如果要创建 C# 应用程序,请为该文件使用 cs 扩展名;如果要创建 Visual Basic 应用程序,请为文件使用 .vb 扩展名。

  2. 在主项目文件 (RulesAndConditions) 中,在您在上一任务中创建的 ItemGroup 元素中,添加新的 Compile 元素。

  3. Compile 元素添加一个名为 Include 的新属性。

    使用在步骤 1 中创建的文件名作为属性值。

  4. 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 顺序工作流

  1. 在 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;
    
  2. Microsoft.Samples.Workflow.Tutorials.RulesAndConditions 命名空间中创建一个名为 DiscountWorkflow 的新密封类。

  3. 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
        {
        }
    }
    
  4. DiscountWorkflow 类中创建默认构造函数。

    在此构造函数中,调用在下一步中创建的 InitializeComponent 方法。

    public DiscountWorkflow2()
    {
        InitializeComponent();
    }
    
  5. DiscountWorkflow 类中,创建一个名为 InitializeComponent 的私有方法。

  6. InitializeComponent 方法中,将 DiscountWorkflow 类的 Name 属性设置为 "DiscountWorkflow" 值。

    private void InitializeComponent()
    {
        this.Name = "DiscountWorkflow";
    }
    

修改宿主应用程序

既然您已创建了基本顺序工作流,就必须创建代码,才能在 Windows 窗体中单击“签出”按钮时启动该工作流。 对于此教程,您将在应用程序启动时创建一个 WorkflowRuntime 实例,并将事件处理程序添加到 WorkflowTerminatedWorkflowCompleted 事件。 在针对“签出”按钮的事件处理程序中,您将启动 DiscountWorkflow

在下一个练习(即练习 2:与 IfElseActivity 一起使用规则和条件)中,您将在执行工作流时将任何必要数据传递到该工作流。 但是,在本练习中,只需启动工作流。

启动 DiscountWorkflow 顺序工作流

  1. PointOfSaleSimulator 类中,创建一个名为 workflowRuntime 的新私有 WorkflowRuntime 字段并创建一个新实例。

    private WorkflowRuntime workflowRuntime = new WorkflowRuntime();
    
  2. PointOfSaleSimulator 构造函数中,在调用 InitializeComponent 方法之后,调用在您在上一步中创建的 WorkflowRuntime 对象中定义的 StartRuntime 方法。

  3. 为由 WorkflowRuntime 对象引发的 WorkflowCompleted 事件创建一个名为 workflowRuntime_WorkflowCompleted 的事件处理程序。

  4. 为由 WorkflowRuntime 对象引发的 WorkflowTerminated 事件创建一个名为 workflowRuntime_WorkflowTerminated 的事件处理程序。

    workflowRuntime.StartRuntime();
    
    workflowRuntime.WorkflowCompleted += new
        EventHandler<WorkflowCompletedEventArgs>
        (workflowRuntime_WorkflowCompleted);
    workflowRuntime.WorkflowTerminated += new
        EventHandler<WorkflowTerminatedEventArgs>
        (workflowRuntime_WorkflowTerminated);
    
  5. 创建一个名为 workflowRuntime_WorkflowCompleted 的新私有方法,用于接受名为 senderObject 和名为 eWorkflowCompletedEventArgs 作为参数。

    备注

    现在,此方法留空,但您将在本教程后面向其添加其他功能。

    void workflowRuntime_WorkflowCompleted(object sender,
        WorkflowCompletedEventArgs e)
    {
    }
    
  6. 创建一个名为 workflowRuntime_WorkflowTerminated 的新私有方法,用于接受名为 senderObject 和名为 eWorkflowTerminatedEventArgs 作为参数。

  7. workflowRuntime_WorkflowTerminated 方法中,通过在 WorkflowTerminatedEventArgs 参数中使用 ExceptionMessage 属性来显示一条消息。

    void workflowRuntime_WorkflowTerminated(object sender,
        WorkflowTerminatedEventArgs e)
    {
        MessageBox.Show("Workflow terminated: " + e.Exception.Message);
    }
    
  8. PointOfSaleSimulator 类的 btnCheckout_Click 方法中,调用 workflowRuntimeObjectCreateWorkflow 方法,并将 DiscountWorkflow 类型作为参数传递。

  9. 从由在上一步中添加的 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 一起使用规则和条件

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。