QF中控制DataField and TaskField

1)概述

DataFields和TaskFields是QF中的两个概念:
DataFields实际上就是工作流关联的列表项。
TaskFields表示一个任务的数据,DataFields和TaskField都都支持用索引(DataFields["name"])来操作字段值。
QF的UI代码API中首先支持这两个对象,如,在Executing事件中,可以通过以下代码操作DataFields和TaskFields:

WorkflowContext.Current.DataFields["Title"] = "some title"; //set list item title in code
string comment s = WorkflowContext.Current.TaskFields["Body"];//get task comments

 2)FlowchartWorkflow.DataFields

最新Release中,在工作流(WF)API中也支持类似的接口:
首先,FlowchartWorkflow工作流根活动上增加了DataFields属性,在活动的BeforeRule或AfterRule中可以直接通过DataFields
来获取或设置列表项字段值,如:

BeforeRule:
this.DataFields["Title"] = "some Request title";
string title = ""+this.DataFiels["Title"];

注意:在WF中设置DataFields之后,默认只有当活动结束后才会执行更新。如:如果在多任务活动的TaskCompleted事件中修改了DataFields,则只有当最后一个任务完成,同时整个活动完成时才会真正对ListItem执行更新。

如果要立刻更新ListItem,则可以调用this.DataFields.Update()方法。

 3)Task.TaskFields

其次,在Task活动上,增加了TaskFields属性,通过这个属性,在任务创建前,可以控制任务字段属性,在任务创建后,可以获取任务字段值:

task1.BeforeRule
this.task1.TaskFields["Body"] = "input your comment here.";

task1.AfterRule:
this.DataFields["AllComments"] = ""+this.DataFields["AllComments"]+";" + this.task1.TaskFields["Body"]; //把任务字段的值同步到列表项

TaskFields的另一个功能是使用自定义任务内容类型时:

QF支持在根站点下创建一个内容类型,继承与QuickFlowTaskContentType,添加扩展字段,然后编辑任务活动的TaskForm属性,设置任务关联到这个
内容类型,这时可以用规则控制任务扩展字段的值:


task1.AfterRule:
this.task1.TaskFields["RequestDate"] = this.DataFields["RequestDate"]; //设置任务上直接显示申请信息
 

4)多任务活动的TaskFields

多任务活动(MultiTask,RuleDriven)在Build110714版本后也支持TaskFields。

多任务活动的TaskFields需要注意: 

1-给TaskFields赋值时,会影响到所有的任务,并且所有任务的属性只能一样

2-通过TaskFields取值时,只能获取到最后一个有效任务的字段。
 

5)注意

所有字段名都必须用内部名(internalName)
用QF的Rule之前最好了解下WF规则引擎:http://msdn.microsoft.com/zh-cn/library/aa480193.aspx

此功能Build110714后版本支持

多任务活动在Build110724版本后支持TaskFields

this.DataFields.Update()方法在Build120325版本后支持

posted on 2011-07-14 09:34  jianyi  阅读(1397)  评论(8编辑  收藏  举报