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

本文内容来自 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 键在绿色的区域中进行切换,,输入好后使用回车键即可转到代码下面,完成一个属性的定义。
这里定义两个属性, FirstName LastName
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.cs Program.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> 对象用来传递参数的数组。两个参数 FirstName LastName 。界面如下:
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)
 

你可能感兴趣的:(workflow,参数,工作流,笔记,HOL)