none
我一起学Windows Workflow Foundation(二) RRS feed

  • 常规讨论

  • (2)-----让WF通过参数接收数据

     

    在这一节,我们一起学习通过其他程序调用工作流,并且在工作流启动时给工作流传递一些数据,使其在工作流中使用。

    在workflow开始执行时,我们有两种方式给工作流传递数据------参数和事件。今天,我们先说说怎样通过参数来给工作流传递数据。

    需要传递给workflow的参数,我们需要先在工作流中通过属性来进行设置,而后在其他程序调用这个工作流创建一个工作流的实例时,通过 Dictionary<string, object>键值集合进行传递,如下:

    继续使用我们上一节用到的代码,给Workflow1 类添加两个属性FirstName和LastName

     

            private string firstName ;

            
    public string FirstName
            {
                
    get
                {
                    
    return firstName;
                }
                
    set
                {
                    firstName 
    = value;
                }
            }

            
    private string lastName;

            
    public string LastName
            {
                
    get
                {
                    
    return lastName;
                }
                
    set
                {
                    lastName 
    = value;
                }
            }

     

    这里我们将通过其他应用程序传递fristName和lastName并让这两个值在工作流执行过程中以对话框的形式显示出来。

    因为我们上一节中创建的是个控制台应用程序,所以让起弹出对话框需要应用System.Windows.Forms程序集。

    然后修改我们的Workflow1类中的codeActivity1_CodeHandler

     

            private void codeActivity1_CodeHandler(object sender, EventArgs e)
            {
                System.Windows.Forms.MessageBox.Show(
                        
    "Hello world: " + firstName + " " + lastName);
            }


    现在我们已经修改好我们要做的工作流代码了。

     

     

    下面我们要创建一个winForm应用程序。

    添加一个新的项目WinFormTestHost

    接下来我们要确认我们新创建的项目WinFormTestHost能够调用工作流Workflow1。

    给WinFormTestHost添加引用,引用项目HelloWorldWorkflow.

    同时,我们还要让我们的这个winfrom应用程序引用wwf程序集。继续添加引用,选择.net选项卡,添加如下三项:

    System.Workflow.Activities

    System.Workflow.ComponentModel

    System.Workflow.Runtime

     

    修改我们的Form1窗体。

    添加两个Label分别为Label1和Label2,Text属性分别为First name和 LastName。

    添加两个TextBox分别为txtFirstName和txtLastName。

    添加一个按钮btnStartWorkflow,用来启动我们的工作流,Name属性为btnStartWorkflow,Text属性为Start Workflow。

    这个简单的窗体就做完了,我们来添加代码。

    首先在我们的类Form1.cs中添加工作流运行时声明:

           private WorkflowRuntime wr;

     

    双击btnStartWorkflow添加事件处理程序。

     

            private void btnStartWorkflow_Click(object sender, EventArgs e)
            {
                
    if (wr == null)
                {
                    wr 
    = new WorkflowRuntime();
                    wr.StartRuntime();
                }

                
    //定义键和值的集合(Dictionary)用来传递参数
                Dictionary<stringobject> parameters = new Dictionary<stringobject>();
                parameters.Add(
    "FirstName", txtFirstName.Text);
                parameters.Add(
    "LastName", txtLastName.Text);

                
    //创建一个工作流实例
                WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
                
    //启动工作流
                instance.Start();
                
            }

    最后给FormClosed事件添加一段代码,使其在关闭窗体时关闭工作流

     

            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                
    if (wr != null)
                {
                    
    if (wr.IsStarted)
                    {
                        wr.StopRuntime();
                    }
                }
            }

     

    现在,我们的程序就开发完成了,点击F5,将打开窗体:

    我们输入名称后点Start Workflow,将弹出窗体:

    这个窗体是在Workflow1中执行的,同时,我们也看到,在winfrom窗体中输入的值成功的传递到了工作流中。

    转自:http://www.cnblogs.com/zhuhee/

    2009年6月18日 7:09

全部回复