WorkFlow(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 < 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();
            
        }

 

最后给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/archive/2007/01/20/625710.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值