随笔 - 135  文章 - 1 评论 - 2080 trackbacks - 136
<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

QuickFlow下载
SPCAMLEditor 下载
camlquery 类库下载
Book: 《亮剑.NET:SharePoint Server 2007开发实战》
昵称:jianyi
园龄:4年11个月
粉丝:75
关注:7

搜索

 
 

随笔分类(125)

My Friends

wss

积分与排名

  • 积分 - 258523
  • 排名 - 288

最新评论

阅读排行榜

评论排行榜

推荐排行榜

1)动态子流程的场景

考虑以下工作流场景:

image

组长分配工作,指定接收人,每个接收人完成任务后组长立刻可以审批,不必等待其他组员。

2)QuickFlow对子流程的支持

build110821 版本之后,QuickFlow提供了ChildWorkflow和FlowchartWorkflow活动,用来实现子流程。

ChildWorkflow提供顺序子流程模型,FlowchartChildWorkflow提供Flowchart类型的子流程支持。

3) 使用步骤

3.1 确保安装了build110821或之后的版本的wsp,如果在QFD工具箱中找不到ChildWorkflow,则修改QFD目录下的ToolboxItems.txt,添加如下两行:

QuickFlow.ChildWorkflow, QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628
QuickFlow.FlowchartChildWorkflow, QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628

3.2 将ChildWorkflow活动拖入设计器,将子活动添加到ChildWorkflow中,如果子活动的用户分配在各个子流程是一样的,则直接将User或Users属性绑定到工作流变量,或者设置角色名称。

3.3如果子活动用户在各个子流程分支中不一样,则需要配置属性映射:

首先创建一个Names类型的工作流变量,这个变量用来存放各个子流程分支的用户,可以写死或者用过UI代码传递变量值。

然后,设置ChildWorkflow的ChildPropertiesMapping, 将需要动态分配用户的活动的User属性绑定到工作流变量。

4)示例

4.1 画出如图所示的流程图

其中,组长分配工作,组员接受工作,组长审批工作都是Task活动

image

4.2  添加两个工作流变量: groupLeader, string类型,groupMembers, Names类型, 为了方便测试,可以设置groupLeader为一个账号,Names为多个账号,采用换行区分

image

4.3 将组长分配工作和组长审批工作的User属性绑定到groupLeader

4.4 选中ChildWorkflow活动,将InitalChildData属性绑定到groupMembers,InitalChildData的值只能绑定到Names类型的变量,Names变量中包含几个值则对应会创建几个子流程

4.5 编辑ChildPropertiesMapping属性,添加一个映射,将组员接受工作活动的User属性绑定到 groupMembers变量,如下图:

image

4.6 发布流程,进行测试。

示例流程下载:

https://skydrive.live.com/embedicon.aspx/QuickFlow/Examples/%e5%b9%b6%e8%a1%8c%e5%ad%90%e6%b5%81%e7%a8%8b.zip?cid=7f5a25cdf47d03e6&sc=documents

5)ChildWorkflow属性列表

属性名 属性说明
InitalChildData 用来初始化子流程的数据,InitalChildData一般需要绑定到一个Names类型的变量,Names类型实际是一个NameCollection的字符串集合,集合的元素个数决定了子流程的个数
ChildPropertiesMapping 子流程活动属性映射,采用映射,ChildWorkflow自动将子流程的属性设置为对应Names集合中的值
ExecutionType 控制子流程是并行一次创建还是串行一个个创建
TaskTitleFormat 可以控制子流程任务的标题格式,模式为{num}.{title},  {num}表示流程顺序号,{title}表示任务原来的名称, 即TaskTitle属性的值
CompeteCondition 控制ChildWorkflow活动何时完成,若指定了CompeteCondition,则每个子流程完成后会计算CompeteCondition的值,如果返回true,无论其他流程分支有无完成,活动都会结束,未完成的任务被取消

6)备注

6.1 FlowchartChildWorkflow的属性跟ChildWorkflow完全一样

6.2 用FlowchartChildWorkflow时,不必(也不能)拖入Start活动,第一个拖入的活动即为 起始活动。

6.3若要实现子流程结束后统一审批,可以部分打回的效果,则可以在统一审批的时候控制Names变量的值,来控制打回给那些人。

6.4 本文的示例没有涉及到UI的开发,UI开发请看到其他文章进行。

6.5 如果子流程需要会签,则采用MultiTask活动,将其Users属性映射到Names变量,然后控制Names变量值每行多个账号,如下:

dc\user1,dc\user2

dc\user3,dc\user4

6.6 如何在UI代码中给Names变量赋值请参考其他文章。

6.7 不要在ChildWorkflow之外的规则代码中取子流程中活动的属性,比如Taskoutcome,因为动态创建的原因,这些属性可能取不到,或者只能取到最后完成的子流程产生的数据。 

6.8 如果在ChildWorkflow之内的规则代码中获取内部子活动的状态,因为QuickFlow内部有活动属性同步的机制,可以取到当前最新的数据,普通的并发条件下作者做过测试,但不能保证大并发条件下没有问题

6.9 当前版本不允许跨容器拖放移动活动,即:不能将一个活动从ChildWorkflow内部拖拽到其他外部活动内部。

posted on 2011-08-21 14:18 jianyi 阅读(633) 评论(0) 编辑 收藏