代码改变世界

Windows Workflow Beta2 HOL学习笔记(二):向工作流中传递参数

2006-12-21 10:08  努力学习的小熊  阅读(2341)  评论(11编辑  收藏  举报

本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2中的HOL01中的第二个练习,其中包括三个任务:

Ø         定义工作流的参数

Ø         修改Code Activity

Ø         运行修改好的工作流

 

1.打开上一个练习创建好的HelloWorldWorkflow项目,打开Workflow1.xoml顺序工作流文件,并转到查看代码。

2.找到如下代码,然后在其中添加两个属性。

     public partial class Workflow1 : SequentialWorkflowActivity

     {

        private void codeActivity1_CodeHandler(object sender, EventArgs e)

        {

            Console.WriteLine("Hello, World!");

        }

    }

在方法codeActivity1_CodeHandler下面打“prop”Tab键,即可由VS2005自动生成属性的格式代码。
   

然后使用Tab键在绿色的区域中进行切换,,输入好后使用回车键即可转到代码下面,完成一个属性的定义。

这里定义两个属性,FirstNameLastName

3.因为例子需要控制台弹出一个Windows中的MessageBox消息提示框,所以添加System.Windows.Forms引用。

4.修改Code Activiity实例的代码。

        private void codeActivity1_CodeHandler(object sender, EventArgs e)

        {

            System.Windows.Forms.MessageBox.Show("Hello world: " + firstName + " " + lastName);

        }

5.在当前解决方案下添加一个Windows Application项目,名字为WinFormTestHost。在菜单中选择File | Add | New Project
   

6.删除其中的Form1.csProgram.cs两个文件。

7.在我们安装HOL的如下路径找到以下四个文件,使用添加现有项添加到WinFormTestHost项目中。

C:\Windows Workflow Foundation\Labs\Lab01\Resources\WinFormTestHost Files
      

8.将WinFormTestHost项目设置为启动项目。

9.查看Form1.cs其中的代码如下:

     public partial class Form1 : Form

     {

         private WorkflowRuntime wr;

         private string workflowAssembly = "";

         private string workflowTypeName = "";

 

         public Form1()

         {

              InitializeComponent();

 

              workflowAssembly = "HelloWorldWorkflow";

              workflowTypeName = "HelloWorldWorkflow.Workflow1";

         }

 

         private void btnStartWorkflow_Click(object sender, EventArgs e)

         {

            if (wr == null)

            {

                wr = new WorkflowRuntime();

                wr.StartRuntime();

            }

 

              Dictionary<string, object> parameters = new Dictionary<string, object>();

              parameters.Add("FirstName", txtFirstName.Text);

              parameters.Add("LastName", txtLastName.Text);

 

            WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);

            instance.Start();

         }

 

         private void Form1_FormClosed(object sender, FormClosedEventArgs e)

         {

              if (wr != null)

              {

                   if (wr.IsStarted)

                   {

                       wr.StopRuntime();

                   }

              }

         }

     }

1)运行工作流需要工作流运行时的支持,所以首先定义并实例化了一个WorkflowRuntime对象。然后使用这个对象的StartRuntime方法启动运行时。

2)定义了Dictionary<string, object>对象用来传递参数的数组。两个参数FirstNameLastName。界面如下:
   

3)在往下就是创建工作流实例并执行工作流对象的代码了。

       WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);

       instance.Start();

4)最后在窗口关闭的时候停止运行时。

10.其中用到的工作流的对象和方法,所以我们要添加几个引用:

项目HelloWorldWorkflow的引用

System.Workflow.Activities.dll

System.Workflow.ComponentModel.dll

System.Workflow.Runtime.dll

三个程序集的应用。

11.按F5运行程序,会出现上面的窗口,在两个输入框中输入相应的值点击Start Workflow按钮,就会看到一个Windows消息提示框。
   

 

至此完成第二个练习。

其中涉及到两个我自己不太明白的东东,准备查查MSDN放在下面:

Dictionary

WorkflowRuntime.CreateWorkflow方法

现在仅知道在顺序工作流类中建立属性后,可以通过这个方法,将参数放到Dictionary类中,创建工作流实例时给属性赋值。

MSDN中的原文:

WorkflowRuntime.CreateWorkflow Method (Type, Generic Dictionary)

Creates a workflow instance by using the specified workflow Type and the arguments to the workflow contained in the specified Dictionary.

Namespace: System.Workflow.Runtime
Assembly: System.Workflow.Runtime (in system.workflow.runtime.dll)

public WorkflowInstance CreateWorkflow (

        Type workflowType,

        Dictionary<string,Object> namedArgumentValues

)

Parameters

workflowType

The Type of the workflow to create.

namedArgumentValues

A Dictionary of objects keyed by string that represents the arguments to the workflow.

Return Value

A WorkflowInstance object that represents the workflow instance created.

Exceptions

Exception type

Condition

ArgumentNullException

workflowType is a null reference (Nothing in Visual Basic).

 

参考资料:

Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2

WorkflowRuntime.CreateWorkflow Method (Type, Generic Dictionary)