《WF编程》系列之17 - 工作流与外部事件:工作流参数 居然有两个多月没有更新WF笔记,这段时间也许真的太忙了,毕业的事情,工作的事情,从今天起继续更新.
2008-08-27 13:01
706 查看
《WF编程》系列之17 - 工作流与外部事件:工作流参数
居然有两个多月没有更新WF笔记,这段时间也许真的太忙了,毕业的事情,工作的事情,从今天起继续更新. |
3.2.2 工作流参数
Runtime的CreateWorkflow方法有一个重载允许我们向新的工作流实例传递参数,参数的类型是Dictionary(名值对的集合).Dictionary parameters = new new Dictionary<string, object>(); ;
parameters.Add("FirstName", "Scott");
parameters.Add("LastName", "Allen");
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(chapter3_parameter.Workflow1), parameters);
instance.Start();
当工作流Runtime创建了新的工作流实例时,它会尝试寻找每个参数名称的伴随属性(Companion Property).伴随属性是工作流对象中公开并可写的属性,它们有着和工作流参数项相同的名字.举例来说,工作流会接受上面代码中的FirstName和LastName参数是因为在其内部有着同样名字的属性:
//只写
public string FirstName
{
set { _firstName = value; }
}
private string _firstName;
//只写
public string LastName
{
set { _lastName = value; }
}
private string _lastName;
//只读
public string FullName
{
get { return _fullName; }
}
private string _fullName;
如果我们尝试传递一个FullName参数,Runtime会抛出异常,因为FullName属性是只读的.Runtime无法为其找到相应的公开并可写的伴随属性,Runtime会抛出System.ArgumentException异常.对于参数来说,必须有公开并可写的属性与之对应;而对属性来说,并不是每一个公开并可写的属性都必须对应一个参数,输入参数是可选的.
工作流内的活动不需要关心如何取得参数值.Runtime会在工作流执行前将所有的参数指派给相应的属性.在上面的代码中, CodeActivity的ExecuteCode事件将接收到的FirstName和LastName参数合并到FullName属性中.不仅仅可以向工作流输入数据,我们还可以将FullName属性作为工作流的输出参数.当工作流完成时,Runtime触发WorkflowCompleted事件, 该事件的WorkflowCompletedEventArgs参数包含一个OutputParameters属性(输出参数的Dictionary集合),Runtime将复制每个公开可读的工作流属性到OutputParameters集合中.
现在来测试一下,输出的结果如下图所示:
可以看到我们输入的两个参数(Scott和Allen)合并的结果,但是DynamicUpdateCondition是什么呢?它并不是我们的输入参数,之前提到过Runtime会把每个公开可读的工作流属性复制到OutputParameters集合中,而DynamicUpdateCondition正是SequentialWorkflowActivity的一个公开并可读的属性.但问题又出来了, SequentialWorkflowActivity有很多公开并可读的属性,为什么仅仅是DynamicUpdateCondition被作为输出参数?期待园子里的朋友可以回答我这个问题. |
相关文章推荐
- 《WF编程》系列之17 - 工作流与外部事件:工作流参数
- 《WF编程》系列之16 - 工作流与外部世界:生存周期事件 3.2 工作流与外部世界
- 《WF编程》系列之34 - 基本活动:状态活动 到目前为止,我们所讨论的工作流都是顺序工作流,而WF还支持另外一种工作流机制-状态机(State-Machine)工作流,本节就来介绍这些在状态机工作流中工作的活动.
- 《WF编程》系列之16 - 工作流与外部世界:生存周期事件
- 我今天什么也没有学到。在工作的时间。
- 有段时间没有更新博客了,最近比较忙,今天和大家分享一个使用Swift实现的新特性功能吧
- 2014-04-17工作日志:时间安排(上班时间,没有什么特殊事情,禁止登qq)
- 失踪人口回归系列,好长时间没有更新博客了,今天来记录下python的相关安装过程
- 《WF编程》系列之19 - 触发事件与调用方法:服务以及工作流的实现
- 工作好辛苦,没有时间更新Blog。。。
- 今天工作上班了!——人生转折点,大学刚毕业,心情系列(第一天上班)
- 最近项目太忙,都没有时间来更新BLOG自己检讨一下
- 《WF编程》系列之19 - 触发事件与调用方法:服务以及工作流的实现 3.2.3.2服务的实现
- 《WF编程》系列之0 - WF笔记开始
- 《WF编程》系列之11 - 编译工作流:使用MSBUILD
- 《WF编程》系列之12 - 编译工作流:XAML序列化
- java笔记--使用事件分配线程更新Swing控件
- 最近时间比较紧,好久没有更新我的blog了
- Unity Manual 笔记01 第一章 使用Unity工作——资源工作流
- 从前有个小孩,更新一次网站需要更新15(以后会更多)台服务器,后来他死了?没有,他是个懒惰的小孩,他不甘于重复(re)地工作(2005年9月8日,周四)