Sharepoint工作流开发(vs2008)
7.4 采用Visual Studio 2008 开发工作流模板
本节讲述采用Visual Studio 2008开发SharePoint工作流模板的一般步骤和方法。为了使读者更好地理解本节的内容,本节在讲述基本原理和操作的同时会附带讲解一个实例工作流的开发,这个工作流是一个文档审批工作流:提交者上传文档,然后启动工作流,最后提交给审批人审批。
7.4.1 创建工作流项目
Step1 新建项目。打开Visual Studio 2008新建项目,选择“Workflow”中的“SharePoint 2007 Sequential Workflow”项目模板,如图7-40所示。
图7-40 新建项目
Step2 指定调试工作流所用的站点路径,如图7-41所示。
图7-41 指定调试工作流所用的站点路径
Step3 指定工作流用来调试时附加到的列表。若列表不存在,则先到站点中创建,如图7-42所示。
图7-42 制定工作流用来调试时附加到的列表
Step4 指定工作流调试时的启动方式为手工启动,如图7-43所示。
图7-43 指定工作流调试时的启动方式
以上操作完成之后,可以看到VS 2008中如图7-44所示的布局。该图中左边工具栏上是系统提供的所有活动组件,中间是工作流设计器界面,右边是项目文件。
图7-44 操作完后的布局 SharePoint 2007 Sequential Workflow项目模板会自动添加一个OnWorkflowActivated活动,这个活动在工作流启动的时候执行,它的WorkflowProperties属性绑定到工作流的workflowProperties字段,workflowProperties的类型是SPWorkflowActivationProperties,存放了跟工作流相关的数据,如表7-1所示。 表7-1 SPWorkflowActivationProperties属性说明 属 性 AssociationData HistoryList HistoryListId InitiationData Item List Originator OriginatorUser Site Web TaskList 类 型 String SPList Guid String SPListItem SPList String SPUser SPSite SPWeb SPList 说 明 工作流关联数据,通过关联表单提供 存放工作流历史记录的列表 存放工作流历史记录的列表ID 工作流初始化数据,通过初始化表单提供 工作流附加到的列表项对象 工作流附加到的列表 启动工作流的用户账号 启动工作流的用户对象 工作流运行的站点集 工作流运行的网站 存储工作流任务的列表 7.4.2 任务的分配 SharePoint工作流是任务驱动的工作流,工作流按照各种逻辑分配任务给用户,用户通过完成任务跟工作流进行交互,驱动流程前进。任务分配跟以下几个活动有关。 l createTask:通过createTask活动创建任务,工作流代码必须处理createTask活动的MethodInvoking事件,创建任务ID,指定任务操作用户。 l onTaskChanged:通过onTaskChanged活动,等待用户完成任务,并可以处理Invoked方法,按照用户的输入进行逻辑处理。
l completeTask:通过completeTask活动,完成用户的任务。
一个任务的分配过程,都是需要以上3个活动进行配合的。下面是具体分配任务的操作过程。
Step1 从工具栏中拖曳createTask到设计器中,如图7-45所示。
Step2 指定createTask活动的CorrelationToken属性为“task1Token”,OwnerActivityName为“Workflow1”,如图7-46所示。
图7-45 从工具栏中拖曳CreateTask到设计器 图7-46 指定CreateTask活动的属性
Step3 绑定createTask活动的TaskId属性到工作里的字段。单击“TaskId”属性的设置按钮,在弹出的属性绑定窗口选择绑定到新成员标签,输入名称为“task1Id”,选择创建字段,如图7-47所示。
图7-47 绑定CreateTask活动的TaskId属性到工作里的字段
Step4 绑定createTask活动的TaskProperties属性到工作流的字段task1Properties。
Step5 处理createTask的MethodInvoking事件。双击createTask,在自动生成的MethodInvoking事件处理函数中写入如下代码。
private void createTask1_MethodInvoking(object sender, EventArgs e) {
this.task1Id = Guid.NewGuid(); //生成任务ID this.task1Properties.Title = \文档审批\
this.task1Properties.AssignedTo = \设置任务操作人 }
Step6 拖曳onTaskChanged到工作流设计器中,如图7-48所示。
图7-48 拖曳onTaskChanged到工作流设计器
Step7 设置onTaskChanged活动的CorrelationToken属性为“task1Token”,如图7-49所示。 Step8 将onTaskChanged活动的TaskId属性绑定到已有的task1Id字段,如图7-50所示。
图7-49 CorrelationToken属性为“createTask1”
图7-50 TaskId属性绑定到已有的task1Id字段
Step9 将onTaskChanged活动的BeforeProperties和AfterProperties属性均绑定到已有task1Properties字段。
Step10 拖曳completeTask活动到工作流设计器中,如图7-51所示。