[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来控制到了哪一级审批。
举个实例来说,我们有这么一个请假流程:
- 第一级:提交给直接上级、人事经理进行并行审批
- 第二级:提交给总经理审批
那么,在OnWorkflowActivated里,Replicator的InitChildData值是2个人:直接上级和人事经理;在CodeActivity里,Replicator的InitChildData值是1个人:总经理。
这个流程的好处在于,我们只需要把配置文件定义好,就可以跑流程了,不需要再做流程方面的开发。
现在虽然问题解决了,但是我个人认为导致问题产生的原因应该是Replicator Activity的一个bug(没有和微软的人确认这一点,仅仅是猜测)。
希望这个解决方法对你有用,而且对以前碰到过相似问题的朋友有用。
1. 西门子中国:BI项目与SharePoint门户
2. Nokia:BI项目与SharePoint门户
3. 中国人寿:BI & 工作流
4. 与狼共舞:BI门户
5. 玫琳凯:BI项目
6. 美国微软:BI项目
等等