[SharePoint 工作流] While里的Replicator ChildInitialized事件不执行的解决方法

首先,这个问题的产生是由于我们打算设计一个多极多人审批的工作流,至于有多少级,每级有多少人是由配置文件定义的。

从逻辑上看,我们只需要用一个While,里面放置一个Replicator,然后在Replicator里放置一个TaskActivity就可以完美的解决问题。(TaskActivity请参考《亮剑.NET SharePoint Server 2007开发实战》,你也可以访问作者博客

 

可是在调试中发现,Replicator的ChildInitialized事件总是不执行。而按照逻辑来讲,是没有问题的,我们在Replicator的Initialize事件里给InitChildData进行赋值,可是ChildInitialize就跟没有一样,不运行。

 

在网上搜索了一些资料,发现同样有人提出过相同的问题,但是没有解决方法。

 

经过2天的试验,调试,终于发现一个方法可以让Replicator的ChildInitialized事件跑起来,解决方法如下:

1. 在OnWorkflowActivated事件里,对Replicator的InitChildData进行赋值。

2. 删除Replicator的Initialize事件给InitChildData进行赋值的语句。

3. 在Replicator之后,加一个CodeActivity,在这里用代码对Replicator的InitChildData进行再赋值。

 

可能有的朋友要问了,为什么需要对Replicator进行多次赋值呢?原因就在于,这是一个多级的审批,我们用一个变量step来控制到了哪一级审批。

 举个实例来说,我们有这么一个请假流程:

  1. 第一级:提交给直接上级、人事经理进行并行审批
  2. 第二级:提交给总经理审批

那么,在OnWorkflowActivated里,Replicator的InitChildData值是2个人:直接上级和人事经理;在CodeActivity里,Replicator的InitChildData值是1个人:总经理。

这个流程的好处在于,我们只需要把配置文件定义好,就可以跑流程了,不需要再做流程方面的开发。

 

现在虽然问题解决了,但是我个人认为导致问题产生的原因应该是Replicator Activity的一个bug(没有和微软的人确认这一点,仅仅是猜测)。

 

希望这个解决方法对你有用,而且对以前碰到过相似问题的朋友有用。

 

在BI,SharePoint,工作流领域,我们服务过众多的国际国内大企业:

1. 西门子中国:BI项目与SharePoint门户
2. Nokia:BI项目与SharePoint门户
3. 中国人寿:BI & 工作流
4. 与狼共舞:BI门户
5. 玫琳凯:BI项目
6. 美国微软:BI项目
等等
posted @ 2009-05-18 15:55  Jasper  阅读(2199)  评论(11编辑  收藏  举报