代码改变世界

MOSS多级审批工作流【Sequential+ConditionedActivityGroup版】v1.1

2007-08-01 23:08 Windie Chai 阅读(...) 评论(...) 编辑 收藏

今年二月份,我开发了一个MOSS多级审批工作流,它实现了如下图所示的流程:



之后我在《
SharePoint多级审批工作流开发文档[Sequential]》这篇文档中详细的描述了整个开发过程并提供了项目源码下载。

其实我在匆匆的写这篇文档的时候,对MOSSWF连一知半解都谈不上。

所以为了实现审批流程中常见的动作-“回退”,我用了好几层的WhileIfElse嵌套,最终整个工作流的流程图如下:



看着这么长而且繁复的流程图就知道这是比较笨的方法了。

最近终于决定腾出一个分区安装了Windows Server 2003 MOSS,然后把这个审批工作流改了一下,现在的流程图是这样的:




清爽了很多吧?

忘记那些讨厌的While+IfElse嵌套吧,我们只需要一个活动就可以代替它们: ConditionedActivityGroup

简单的介绍一下ConditionedActivityGroup活动:

  • 可以包含多条分支;
  • 每条分支都有一个WhenCondition条件用来决定它是否可以被执行;
  • 如果不设置分支的WhenCondition条件,那么这个分支只会在第一次循环的时候执行;
  • ConditionedActivityGroupUntilCondition条件可以决定什么时候结束该活动,如果UntilCondition条件一直不满足,ConditionedActivityGroup就一直循环;
  • 如果没有设置UntilCondition条件,则ConditionedActivityGroup会一直循环直到它的分支都不再执行为止。

也可以把ConditionedActivityGroup理解为一条包含若干if语句的do…until语句。

 

修改后的工作流项目下载:ApprovalSequentialEdition_with_CAG.zip

 

最后谢谢一些朋友对《SharePoint多级审批工作流开发文档[Sequential]》这篇文档的支持,本文对其实现进行了改进,但是我必须说,审批这样的流程并不适合用顺序工作流来实现,用WF的另外一种工作流-状态机工作流会更好。

本文写给一些总喜欢在顺序工作流里实现回退的朋友。

注:于2007年8月5日更新部分代码,修正某些情况下任务的分配对象会丢失地问题.