Windows Workflow Beta2 HOL学习笔记(二):向工作流中传递参数
2006-12-21 10:08 努力学习的小熊 阅读(2355) 评论(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键在绿色的区域中进行切换,,输入好后使用回车键即可转到代码下面,完成一个属性的定义。
这里定义两个属性,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放在下面:
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)
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号