和我一起学Windows Workflow Foundation(2)-----让WF通过参数接收数据

原创 2007年09月17日 09:49:00

 

 

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

在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窗体中输入的值成功的传递到了工作流中。

 

创建和运行长时间运行的工作流(三)

分析PersistableIdleAction的枚举值 我们在创建和运行长时间运行的工作流(二)中的ConfigureWorkflowApplication方法里面,在wfApp的Persistab...
  • mathieuxiao
  • mathieuxiao
  • 2013年02月21日 15:13
  • 3220

和我一起学批处理(2)

回显、代码屏蔽与暂停 回显代码屏蔽与暂停 回显 暂停 代码屏蔽 最终效果与代码回显回显,就是在你做的程序中,显示出一行字来,也就是让别人打开程序后,看到一行字(说白了就是输出文字) 例如 这里...
  • wei_developer
  • wei_developer
  • 2016年03月26日 10:50
  • 150

Windows Media Foundation学习笔记3——媒体播放

跳过第二章对工具TopoEdit的介绍,直接进行媒体播放的学习。   媒体播放这章,介绍了个文件播放的例子,想起当初学习dshow的时候,一开始也是个文件播放例子,不过那个例子比较简单,没多少代码,n...
  • zhengxinwcking
  • zhengxinwcking
  • 2014年11月08日 15:15
  • 3229

【新手入门】Oozie workflow如何在action之间传递参数

接触oozie时间并不长,半个月有余,对其十分好用的action管理模式以及各种工作流控制欲罢不能,可惜中文的文档真心少。 上周发现了这样一个问题,虽然说oozie workflow很方便工作流的建...
  • lazykev_D
  • lazykev_D
  • 2014年11月08日 05:58
  • 2899

和我一起学 Selenium WebDriver(2)——入门篇

【1. 加入 jUnit】  Selenium 环境搞定,接下来就要想办法让我们的测试步入正轨了,对于 java 来说,用上 jUnit 是很方便的,maven 项目加入 jUnit...
  • xiao190128
  • xiao190128
  • 2015年11月11日 17:29
  • 375

和我一起学 Selenium WebDriver(2)——入门篇

【1. 加入 jUnit】 Selenium 环境搞定,接下来就要想办法让我们的测试步入正轨了,对于 java 来说,用上 jUnit 是很方便的,maven 项目加入 jUnit 也是轻而易...
  • xuchuangfeng
  • xuchuangfeng
  • 2017年03月06日 15:00
  • 147

我和我的小伙伴们一起学Unity3D(一)

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。(粘自...
  • wwwang89123
  • wwwang89123
  • 2013年08月19日 21:00
  • 738

和我一起学C++之list<一>

list(链表)是一种非常重要的数据结构,在实际应用中到处可见,所以在笔试面试中都是考察的大热门。与vector类似,list也是线性结构,但不同的是list中的内存分布并不是连续的。同时std::l...
  • dhz625
  • dhz625
  • 2017年05月09日 11:59
  • 127

使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建

上个月有一个星期的时间都在研究asp.net mvc统一身份验证及单点登录的实现。经过了一番的探索,最终决定使用微软的Windows Identity Foundation。但是这东西用的人貌似不多,...
  • ojlovecd
  • ojlovecd
  • 2013年02月20日 23:57
  • 15683

和秋叶一起学PPT 又快又好打造说服力幻灯片pdf

下载地址:网盘下载 内容简介  · · · · · · 《和秋叶一起学PPT:又快又好打造说服力幻灯片》适合PPT初学者,但即便你是一个PPT老手,...
  • cf406061841
  • cf406061841
  • 2017年06月09日 18:46
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:和我一起学Windows Workflow Foundation(2)-----让WF通过参数接收数据
举报原因:
原因补充:

(最多只允许输入30个字)