星宿.net

星星的随笔

博客园 首页 新随笔 联系 订阅 管理
  31 Posts :: 0 Stories :: 235 Comments :: 16 Trackbacks

 

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

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

 

posted on 2007-01-20 19:12 星宿.NET 阅读(6127) 评论(35)  编辑 收藏 网摘 所属分类: WinFX

Feedback

跟着你的脚步学习了,谢了!一定要坚持下去哦!
今晚照着做了做,程序可以把值传递给工作流了,但很想知道程序如何访问到工作流当前节点的值或者属性
  回复  引用    

#2楼  2007-01-21 16:08 shenfx      
不错,很容易让新手上手,跟着你一步一步学了,加油啊,呵呵
  回复  引用  查看    

#3楼  2007-01-22 07:37 兰亭      
希望能跟着把Workflow系统地学习一下,谢谢。
  回复  引用  查看    

#4楼  2007-01-28 13:42 有问题 [未注册用户]
晕, wr 变量是哪里定义的啊
  回复  引用    

#5楼  2007-01-29 16:18 坏坏的小样      
如果当前页面的工作流不关闭的话会不会影响到本工程的其他工作流?
我的意思是说:工作流是不是象计算机的进程一样同一时刻只能激活一个呢?
  回复  引用  查看    

#6楼 [楼主] 2007-01-29 16:24 星宿.NET      
我的理解里应该不会影响,在创建的时候应该是创建了一个工作流的实例,实例应该可以有多个的
  回复  引用  查看    

#7楼  2007-02-01 13:29 ddr888      
喜欢这种一看就能看懂的文章~谢谢lz
  回复  引用  查看    

#8楼  2007-02-01 13:31 ddr888      
我有个问题问lz: 如果web项目中用了wf,在开发端肯定要装net3.0了,那么如果要在网络上的net2.0虚拟主机上部署该怎么办(假设该虚拟主机暂时不能装net3.0)?
  回复  引用  查看    

千言万语汇成一个字!好!!!
  回复  引用    

#10楼 [楼主] 2007-02-01 18:09 星宿.NET      
@ddr888
自然不装net3.0是不能运行的了
  回复  引用  查看    

#11楼  2007-02-13 12:22 NET开发 [未注册用户]
学了两章,感觉不错,后面的没看,不知是否有
Web项目中加入WorkFlow的教程,
本人是做Asp.NET开发的。

  回复  引用    

#12楼  2007-03-30 09:03 维德成员      
请教一个问题,我跟据写得懂懂练习,可是提示: System.Windows.Forms.MessageBox.Show(
"Hello world: " + firstName + " " + lastName);

就是错误 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“MessageBox”(是缺少程序集引用吗?)

要怎么解决阿?


  回复  引用  查看    

#13楼 [楼主] 2007-03-30 09:05 星宿.NET      
@维德成员
需要引用System.Windows.Forms命名空间
即在using System.Windows.Forms
  回复  引用  查看    

#14楼  2007-03-30 09:11 维德成员      
谢谢了,我搞定了,检查原来缺少一个引用,版主写得很好,让我学到不少东西。
  回复  引用  查看    

#15楼 [楼主] 2007-03-30 09:35 星宿.NET      
@维德成员
:)
  回复  引用  查看    

#16楼  2007-04-12 16:22 mliu [未注册用户]
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWordWorkFlow.Workflow1), parameters);
楼主,执行到这里时,报NULL异常.
  回复  引用    

#17楼  2007-04-12 16:44 mliu [未注册用户]
楼主,我解决问题了.是我的逻辑不对
  回复  引用    

给WinFormTestHost添加引用,引用项目HelloWorldWorkflow.添加引用是如何添加上的,我怎么添加不上呢?
  回复  引用    

#19楼  2007-05-24 15:46 polaris [未注册用户]
楼上的 ,HelloWorldWorkflow 是你开始建的那个工作流工程名称
  回复  引用    

#20楼  2007-09-13 11:27 glumtree [未注册用户]
谢谢了师父!
  回复  引用    

有问题请教lz,为什么我的程序完成之后没有弹出输入值的哪个对话框呢?直接就是hello world,没有输入参数的地方?这是为什么呀?
winform是新建一个项目之后的windows应用程序吗?为什么我找不到winform呢?感谢楼主,我的水平太差了
  回复  引用    

#22楼  2008-01-04 17:54 fdr [未注册用户]
谢谢,终于搞出来了,为什么FORM不能是个工作流
  回复  引用    

#23楼  2008-01-25 15:59 狐狸马三      
初学者,多谢了!
  回复  引用  查看    

#24楼  2008-01-30 09:23 Mars.Lee [未注册用户]
楼主帮忙啊。
为什么我调试你这个程序的时候,编译器会直接关闭
控制台的那个程序就没问题

另外,你这个程序是控制台程序,你引用WinForm是不是这个原因导致的呀?!

要怎么解决呢?!谢谢,,新手着急中,

加你MSN了!!
  回复  引用    

#25楼  2008-03-18 14:22 Nim [未注册用户]
请教,给winfrom应用程序引用wwf程序集时,在.net选项卡中找不到这三个System.Workflow.Activities

System.Workflow.ComponentModel

System.Workflow.Runtime
是否说明安装的时候处错误了?

  回复  引用    

设置启动项目即可!
  回复  引用    

#27楼  2008-04-27 16:07 canding [未注册用户]
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWordWorkFlow.Workflow1), parameters);
楼主,执行到这里时,请问报NULL异常,急问。。。我的msn:winlinking@163.com

  回复  引用    

#28楼  2008-05-15 13:07 kevin.lzf [未注册用户]
谢谢!
  回复  引用    

#29楼  2008-06-07 11:41 ybfh [未注册用户]
请问,在workflow1分部类中若不定义属性,而直接定义两个全局public变量,为什么不能成功运行啊??未处理的“System.ArgumentException”类型的异常出现在 System.Workflow.Runtime.dll 中.谢谢!
  回复  引用    

谢谢,老大,我学的很快
  回复  引用    

#31楼  2008-08-26 10:29 WWF菜鸟 [未注册用户]
LZ,我有引用 system.windows.forms; 但为什么还是报错:
就是错误 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“MessageBox”(是缺少程序集引用吗?)



  回复  引用    

#32楼  2008-08-26 10:34 WWF菜鸟 [未注册用户]
System.Window.Forms 后面点不出来Messagebox ???怎么办呀
  回复  引用    

#33楼  2008-08-26 10:44 WWF菜鸟 [未注册用户]
很奇怪,可能用了。
  回复  引用    

#34楼  2008-08-31 18:47 abu [未注册用户]
--引用--------------------------------------------------
每天一点: 有问题请教lz,为什么我的程序完成之后没有弹出输入值的哪个对话框呢?直接就是hello world,没有输入参数的地方?这是为什么呀?
<br>winform是新建一个项目之后的windows应用程序吗?为什么我找不到winform呢?感谢楼主,我的水平太差了
--------------------------------------------------------
我也有这个错误呢
  回复  引用    

#35楼  2008-08-31 19:15 abu [未注册用户]
@abu
--引用--------------------------------------------------
abu: --引用--------------------------------------------------
每天一点: 有问题请教lz,为什么我的程序完成之后没有弹出输入值的哪个对话框呢?直接就是hello world,没有输入参数的地方?这是为什么呀?
&lt;br&gt;winform是新建一个项目之后的windows应用程序吗?为什么我找不到winform呢?感谢楼主,我的水平太差了
--------------------------------------------------------
我也有这个错误呢
--------------------------------------------------------
我又杀回来了:),我又重新添加了一遍对HelloWorldWorkflow引用就成功了。

  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-28 15:26 编辑过
Google站内搜索

相关文章:

相关链接: