KimhillZhang  

采用Visual Studio 2008 开发工作流模板

本节讲述采用Visual Studio 2008开发SharePoint工作流模板的一般步骤和方法。为了使读者更好地理解本节的内容,本节在讲述基本原理和操作的同时会附带讲解一个实例工作流的开发,这个工作流是一个文档审批工作流:提交者上传文档,然后启动工作流,最后提交给审批人审批。

 创建工作流项目

Step1  新建项目。打开Visual Studio 2008新建项目,选择"Workflow"中的"SharePoint 2007 Sequential Workflow"项目模板,如图1所示。

新建项目

Step2  指定调试工作流所用的站点路径,如图2所示。

2 指定调试工作流所用的站点路径

Step3  指定工作流用来调试时附加到的列表。若列表不存在,则先到站点中创建,如图3所示。

制定工作流用来调试时附加到的列表

Step4  指定工作流调试时的启动方式为手工启动,如图4所示。

指定工作流调试时的启动方式

以上操作完成之后,可以看到VS 2008中如图5所示的布局。该图中左边工具栏上是系统提供的所有活动组件,中间是工作流设计器界面,右边是项目文件。

5操作完后的布局

SharePoint 2007 Sequential Workflow项目模板会自动添加一个OnWorkflowActivated活动,这个活动在工作流启动的时候执行,它的WorkflowProperties属性绑定到工作流的workflowProperties字段,workflowProperties的类型是SPWorkflowActivationProperties,存放了跟工作流相关的数据,如表6所示。

6 SPWorkflowActivationProperties属性说明

   

   

   

AssociationData

String

工作流关联数据,通过关联表单提供 

HistoryList

SPList

存放工作流历史记录的列表

HistoryListId

Guid

存放工作流历史记录的列表ID

InitiationData

String

工作流初始化数据,通过初始化表单提供

Item

SPListItem

工作流附加到的列表项对象

List

SPList

工作流附加到的列表

Originator

String

启动工作流的用户账号

OriginatorUser

SPUser

启动工作流的用户对象

Site

SPSite

工作流运行的站点集

Web

SPWeb

工作流运行的网站

TaskList

SPList

存储工作流任务的列表

 任务的分配

SharePoint工作流是任务驱动的工作流,工作流按照各种逻辑分配任务给用户,用户通过完成任务跟工作流进行交互,驱动流程前进。任务分配跟以下几个活动有关。

l         createTask:通过createTask活动创建任务,工作流代码必须处理createTask活动的MethodInvoking事件,创建任务ID,指定任务操作用户。     

l         onTaskChanged:通过onTaskChanged活动,等待用户完成任务,并可以处理Invoked方法,按照用户的输入进行逻辑处理。

l         completeTask:通过completeTask活动,完成用户的任务。

一个任务的分配过程,都是需要以上3个活动进行配合的。下面是具体分配任务的操作过程。

Step1  从工具栏中拖曳createTask到设计器中,如图7所示。

Step2  指定createTask活动的CorrelationToken属性为"task1Token"OwnerActivityName"Workflow1",如图8所示。

从工具栏中拖曳CreateTask到设计器

指定CreateTask活动的属性

Step3  绑定createTask活动的TaskId属性到工作里的字段。单击"TaskId"属性的设置按钮,在弹出的属性绑定窗口选择绑定到新成员标签,输入名称为"task1Id",选择创建字段,如图9所示。

9 绑定CreateTask活动的TaskId属性到工作里的字段

Step4  绑定createTask活动的TaskProperties属性到工作流的字段task1Properties

Step5  处理createTaskMethodInvoking事件。双击createTask,在自动生成的MethodInvoking事件处理函数中写入如下代码。

private void createTask1_MethodInvoking(object sender, EventArgs e)

 {

            this.task1Id = Guid.NewGuid(); //生成任务ID

            this.task1Properties.Title = "文档审批";

            this.task1Properties.AssignedTo = "codeart\user1"; //设置任务操作人          

 }

Step6  拖曳onTaskChanged到工作流设计器中,如图10所示。

10 拖曳onTaskChanged到工作流设计器

Step7  设置onTaskChanged活动的CorrelationToken属性为"task1Token",如图11所示。

Step8  onTaskChanged活动的TaskId属性绑定到已有的task1Id字段,如图12所示。

11 CorrelationToken属性为"createTask1"

12 TaskId属性绑定到已有的task1Id字段

Step9  onTaskChanged活动的BeforePropertiesAfterProperties属性均绑定到已有task1Properties字段。

Step10 拖曳completeTask活动到工作流设计器中,如图13所示。

13 拖曳CompleteTask活动到工作流设计器

Step11 设置completeTask活动的CorrelationToken属性为"task1Token"

Step12 completeTask活动的TaskId属性绑定到已有的task1Id字段。

Step13 设置completeTask活动的TaskOutcome属性为"完成",如图14所示。

14  设置TaskOutcome属性

以上是创建一个任务的基本过程。在实际过程中,任务操作人的获取可能有多种情形,比如从站点的某个组内获取用户,从第三方的角色管理系统中获取用户等。假设任务要分配给站点的部门经理组中的用户,则createTask活动的MethodInvoking事件可以如下。

private void createTask1_MethodInvoking(object sender, EventArgs e)

        {

            this.task1Id = Guid.NewGuid();

            this.task1Properties.Title = "文档审批";

            //获取到部门经理网站组

            SPGroup group1 = this.workflowProperties.Web.SiteGroups["部门经理"];

            SPUser user1 = group1.Users[0]; //获取部门经理网站组中的第一个用户

            this.task1Properties.AssignedTo = user1.LoginName; //分配任务

        }

createTask活动会在工作流对应的任务列表中创建一个任务列表项。在默认情况下,对任务列表具有操作权限的用户都可以操作这个任务列表项,但通常情况下,希望只有特殊的用户才可以进行操作,这就要用到createTask活动的SpecialPermissions属性。SpecialPermissions是一个集合类型,可以将有权限的用户加到它里面,实现对任务列表项的特殊权限控制。下面是具体的操作步骤。

Step1  选中createTask活动,单击SpecialPermissions属性的"绑定"图标,绑定属性到specialPermissions1字段中,如图15和图16所示。

15 SpecialPermissions属性的绑定图标

16  绑定属性到specialPermissions1字段

Step2  修改createTask的MethodInvoking事件处理方法,设置specialPermissions1集合,代码如下所示。

private void createTask1_MethodInvoking(object sender, EventArgs e)

        {

            this.task1Id = Guid.NewGuid();

            this.task1Properties.Title = "任务标题";

            this.task1Properties.AssignedTo = "codeart\\user1";

            //设置任务权限

            this.specialPermissions1.Add(this.task1Properties.AssignedTo,

SPRoleType.Contributor);

        }

以上讲述的是单个任务的创建过程,重复这个过程,可以创建出多步的顺序审批流程。

  工作流的测试和调试

上一节已经完成了任务分配的基本编码,直接按"F5"键即可部署和调试。如果只是单纯的部署,可以通过项目右键菜单的"Deploy"菜单项进行,如图17所示。

17 右键菜单的"Deploy"菜单项

部署完成后,访问MOSS站点测试工作流关联的文档库(本节示例为名称为文档审批的文档库),新建或上传一个文档,然后选择名称栏右键菜单的"工作流"选项,选择要测试的工作流,如图18和图19所示。

18  新建一个文档

19  工作流选择

启动工作流后,返回文档库,会发现文档库上多出来一栏,以工作流的名称命名,可以称这一栏为工作流状态栏,如图20所示。

20  工作流状态栏

单击工作流状态栏链接,可以转到工作流状态页面。在此页面,可以查看到工作流分配的所有任务情况,如图21所示。

21 工作流状态页面

用具有编辑任务权限的用户登录站点,访问到工作流状态页面,通过任务标题栏的"编辑项目"菜单可以转到任务编辑页面,如图22所示。

22  任务编辑页面

由于尚未定义任务操作页面,所以会看到如图23所示的默认任务编辑页面,单击"确定"按钮即可完成审批任务。

23  默认任务编辑页面

完成任务之后,转回任务状态页面,可以看到任务的状态已经变成"已完成",如图24所示。

24 任务状态页面

以上是在测试时可进行的快捷操作。工作流实际运行时,不可能要求用户采用这样的操作方式,一般采用用户任务Web部件,让用户直接在站点首页集中处理工作流任务。

在站点首页进入编辑模式,选择添加Web部件,选中添加用户任务Web部件即可,如图25所示。

25  选择用户任务Web部件


转载:http://book.csdn.net/bookfiles/936/10093629438.shtml

posted on 2009-07-23 21:58  KimhillZhang  阅读(1268)  评论(0编辑  收藏  举报