WF-Activity高级篇-Replicator

[ 2006-02-04 22:15:08 | Author: ccBoy ]
Font Size: Large | Medium | Small
Replicator Activity

简单的说,Replicator可以在运行时刻,建立某个Activity 的N的实例。通俗的说,被设计成这样一种场景,你需要执行一个Activity N次得到某个结果。有时候对于N等于几,只有WF引擎知道,这个场景下,它非常像C#的Foreach 操作,而不是for .

很多的业务场景中可以用Replicator 来展现:
  • 最典型的是投票的场景,多个人参与投票,每个人给出自己的选择,最后产生一个投票的结果
  • 多人多环节的业务审批,分组的审议
  • 在运行时刻,根据提供的数据动态的产生多个工作流处理实例
Replicator 是一个容器,而且只能包含一个Activity。这个Activity可以是一个顺序的工作流也可以是一个Composite Activity。
在运行时刻Replicator 将通过CurrentChildData 中的个数启动同样数量Activity的实例,然后可以控制串行还是并行的运行这些Activity的实例。默认的情况下,所有该Activity的实例执行完成,则Replicator完成。Replicator也有一个UntilCondition 条件,所有如果UntilCondition满足,那么Replicator也会取消或中断正在运行的所有实例,而退出。


因为Replicator 是一个容器,所有你需要关注它的两个事件:
  • Initialized -ReplicatorActivity 初始化的时候触发该事件,最常见的是在这里定义ReplicatorActivity 的ExecutionType
  • Completed -ReplicatorActivity 完成时会调用这个方法,经常在这里获得最后的结果,比如投票的结果
Replicator 中包含了一个子Activity,那么还有两个重要的事件是和这个子Activity相关的。
  • ChildInitialized-每次创建子Activity 实例时会执行这个方法
  • ChildCompleted -每次子Activity 实例完成时会调用这个方法
ChildInitialized 事件中有一个System.Workflow.Activities.ReplicatorChildEventArgs 对象非常重要,它是容器Replicator,将数据传递给每个子Activity 实例的通道。
ReplicatorChildEventArgs 包含两个对象一个是Activity, 代表当前子Activity 实例的引用,通过这个应用你可以访问子Activity 中定义的属性和数据对象。而另外一个是InstanceData,这个数据就是容器-Replicator 初始化方法Initialized方法中数据,也就是CurrentChildData 属性,这个属性在Beta1是ArrayList ,在Beta2中是一个IList对象。运行时刻每建立一个子Activity 的实例,就会从这个IList中取出一个对象作为该实例使用的数据
比如
ReplicatorActivity1.CurrentChildData.Add("Child Instance 1");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 2");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 3");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 4");
那么运行时刻将会串行或并行的创建4个子Activity实例,每个实例拥有一个自己的字符数据-Child Instance #。

当然有空你要熟悉一下 DP(DependencyProperty )这个在WinFX 中是一个非常重要的对象和概念。
ms-help://MS.MSSDK.1033/MS.WinFXSDK.1033/Wcp_conceptual/html/d119d00c-3afb-48d6-87a0-c4da4f83dee5.htm

Replicator 很像一个线程池,子Activity 就是线程方法,CurrentChildData决定了线程池中活动线程的数量,ExecutionType则控制活动线程是并发还是串行的产生和执行方法,InstanceData 则是每个活动线程能够使用的数据。任何在运行时需要多个实例或需要多次运行一个Activity获得结果的场景,你都可以考虑使用Replicator Activity。

ver: 1.01

注意-文章原创作品版权所有,不得擅自转载或以其它方式的传播
[Last Modified By ccBoy, at 2006-02-06 00:57:59]
Tags: WF
Comments Feed Comments Feed: http://www.dotnettools.org/Blog/feed.asp?q=comment&id=79

There is no comment on this article.

You can't post comment on this article.