工作流开发sharepointVS.docx
- 文档编号:25456985
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:80
- 大小:1.05MB
工作流开发sharepointVS.docx
《工作流开发sharepointVS.docx》由会员分享,可在线阅读,更多相关《工作流开发sharepointVS.docx(80页珍藏版)》请在冰豆网上搜索。
工作流开发sharepointVS
Sharepoint工作流开发(vs2008)
7.4 采用VisualStudio2008开发工作流模板
本节讲述采用VisualStudio2008开发SharePoint工作流模板的一般步骤和方法。
为了使读者更好地理解本节的内容,本节在讲述基本原理和操作的同时会附带讲解一个实例工作流的开发,这个工作流是一个文档审批工作流:
提交者上传文档,然后启动工作流,最后提交给审批人审批。
7.4.1 创建工作流项目
Step1 新建项目。
打开VisualStudio2008新建项目,选择“Workflow”中的“SharePoint2007SequentialWorkflow”项目模板,如图7-40所示。
图7-40 新建项目
Step2 指定调试工作流所用的站点路径,如图7-41所示。
图7-41 指定调试工作流所用的站点路径
Step3 指定工作流用来调试时附加到的列表。
若列表不存在,则先到站点中创建,如图7-42所示。
图7-42 制定工作流用来调试时附加到的列表
Step4 指定工作流调试时的启动方式为手工启动,如图7-43所示。
图7-43 指定工作流调试时的启动方式
以上操作完成之后,可以看到VS2008中如图7-44所示的布局。
该图中左边工具栏上是系统提供的所有活动组件,中间是工作流设计器界面,右边是项目文件。
图7-44 操作完后的布局
SharePoint2007SequentialWorkflow项目模板会自动添加一个OnWorkflowActivated活动,这个活动在工作流启动的时候执行,它的WorkflowProperties属性绑定到工作流的workflowProperties字段,workflowProperties的类型是SPWorkflowActivationProperties,存放了跟工作流相关的数据,如表7-1所示。
表7-1 SPWorkflowActivationProperties属性说明
属 性
类 型
说 明
AssociationData
String
工作流关联数据,通过关联表单提供
HistoryList
SPList
存放工作流历史记录的列表
HistoryListId
Guid
存放工作流历史记录的列表ID
InitiationData
String
工作流初始化数据,通过初始化表单提供
Item
SPListItem
工作流附加到的列表项对象
List
SPList
工作流附加到的列表
Originator
String
启动工作流的用户账号
OriginatorUser
SPUser
启动工作流的用户对象
Site
SPSite
工作流运行的站点集
Web
SPWeb
工作流运行的网站
TaskList
SPList
存储工作流任务的列表
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事件处理函数中写入如下代码。
privatevoidcreateTask1_MethodInvoking(objectsender,EventArgse)
{
this.task1Id=Guid.NewGuid();//生成任务ID
this.task1Properties.Title="文档审批";
this.task1Properties.AssignedTo="codeart\user1";//设置任务操作人
}
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所示。
图7-51 拖曳CompleteTask活动到工作流设计器
Step11设置completeTask活动的CorrelationToken属性为“task1Token”。
Step12将completeTask活动的TaskId属性绑定到已有的task1Id字段。
Step13设置completeTask活动的TaskOutcome属性为“完成”,如图7-52所示。
图7-52 设置TaskOutcome属性
以上是创建一个任务的基本过程。
在实际过程中,任务操作人的获取可能有多种情形,比如从站点的某个组内获取用户,从第三方的角色管理系统中获取用户等。
假设任务要分配给站点的部门经理组中的用户,则createTask活动的MethodInvoking事件可以如下。
privatevoidcreateTask1_MethodInvoking(objectsender,EventArgse)
{
this.task1Id=Guid.NewGuid();
this.task1Properties.Title="文档审批";
//获取到部门经理网站组
SPGroupgroup1=this.workflowProperties.Web.SiteGroups["部门经理"];
SPUseruser1=group1.Users[0];//获取部门经理网站组中的第一个用户
this.task1Properties.AssignedTo=user1.LoginName;//分配任务
}
createTask活动会在工作流对应的任务列表中创建一个任务列表项。
在默认情况下,对任务列表具有操作权限的用户都可以操作这个任务列表项,但通常情况下,希望只有特殊的用户才可以进行操作,这就要用到createTask活动的SpecialPermissions属性。
SpecialPermissions是一个集合类型,可以将有权限的用户加到它里面,实现对任务列表项的特殊权限控制。
下面是具体的操作步骤。
Step1 选中createTask活动,单击SpecialPermissions属性的“绑定”图标,绑定属性到specialPermissions1字段中,如图7-53和图7-54所示。
图7-53 SpecialPermissions属性的绑定图标
图7-54 绑定属性到specialPermissions1字段
Step2 修改createTask的MethodInvoking事件处理方法,设置specialPermissions1集合,代码如下所示。
privatevoidcreateTask1_MethodInvoking(objectsender,EventArgse)
{
this.task1Id=Guid.NewGuid();
this.task1Properties.Title="任务标题";
this.task1Properties.AssignedTo="codeart\\user1";
//设置任务权限
this.specialPermissions1.Add(this.task1Properties.AssignedTo,
SPRoleType.Contributor);
}
以上讲述的是单个任务的创建过程,重复这个过程,可以创建出多步的顺序审批流程。
7.4.3 工作流的测试和调试
上一节已经完成了任务分配的基本编码,直接按“F5”键即可部署和调试。
如果只是单纯的部署,可以通过项目右键菜单的“Deploy”菜单项进行,如图7-55所示。
图7-55 右键菜单的“Deploy”菜单项
部署完成后,访问MOSS站点测试工作流关联的文档库(本节示例为名称为文档审批的文档库),新建或上传一个文档,然后选择名称栏右键菜单的“工作流”选项,选择要测试的工作流,如图7-56和图7-57所示。
图7-56 新建一个文档
图7-57 工作流选择
启动工作流后,返回文档库,会发现文档库上多出来一栏,以工作流的名称命名,可以称这一栏为工作流状态栏,如图7-58所示。
图7-58 工作流状态栏
单击工作流状态栏链接,可以转到工作流状态页面。
在此页面,可以查看到工作流分配的所有任务情况,如图7-59所示。
图7-59 工作流状态页面
用具有编辑任务权限的用户登录站点,访问到工作流状态页面,通过任务标题栏的“编辑项目”菜单可以转到任务编辑页面,如图7-60所示。
图7-60 任务编辑页面
由于尚未定义任务操作页面,所以会看到如图7-61所示的默认任务编辑页面,单击“确定”按钮即可完成审批任务。
图7-61 默认任务编辑页面
完成任务之后,转回任务状态页面,可以看到任务的状态已经变成“已完成”,如图7-62所示。
图7-62 任务状态页面
以上是在测试时可进行的快捷操作。
工作流实际运行时,不可能要求用户采用这样的操作方式,一般采用用户任务Web部件,让用户直接在站点首页集中处理工作流任务。
在站点首页进入编辑模式,选择添加Web部件,选中添加用户任务Web部件即可,如图7-63所示。
图7-63 选择用户任务Web部件
7.4.4 设计工作流模板的任务表单
上一节已经看到了默认的任务编辑页面,这显然是不符合实际要求,普通的审批页面一般具有一个意见框、一个批准和拒绝的选项。
本节讲述如何采用InfoPath来开发自定义的任务操作界面。
1.设计表单
Step1 新建表单。
打开InfoPath,选择“表单模板”单选按钮,确认选中“仅启动浏览器兼容性功能”复选框,如图7-64所示。
图7-64 新建表单
Step2 添加数据源域。
在数据源中添加两个字段域,一个名称为“comments”,数据类型为“文本”;另一个名称为“approval”,数据类型为“boolean”,如图7-65和图7-66所示。
图7-65 添加数据源域
图7-66 添加数据源域
Step3 插入布局表格。
选择“插入”菜单中的“版式表格”选项,插入一个3行1列的布局表格,如图7-67和图7-68所示。
图7-67 插入布局表格
图7-68 插入布局表格
Step4 设计表单字段。
将审批意见域拖曳到布局表格上,并调整高度。
将审批结果域拖曳到布局表格上,并且更改为选项按钮,分别在两个单项框后面添加批准和拒绝文字,如图7-69所示。
图7-69 设计表单字段
Step5 添加“提交”按钮。
通过设计任务转到插入控件面板,拖曳一个按钮控件到布局表格中,双击按钮,在属性窗口中将按钮标签改为“提交”,如图7-70所示。
图7-70 添加提交按钮
Step6 添加按钮规则。
单击“规则”按钮,在规则编辑窗口中单击“添加”按钮,如图7-71所示。
在添加规则窗口单击“添加操作”按钮,如图7-72所示。
图7-71 添加按钮规则 图7-72 “添加操作”按钮
选择使用数据连结进行提交操作,单击“添加”按钮,如图7-73所示。
在“数据连接向导”窗口中,选择“新建连接”和“仅提交数据”单选按钮,如图7-74所示。
图7-73 使用数据连接进行提交操作 图7-74 选择“新建连接”和“仅提交数据”
单击“下一步”按钮,选择“提交到宿主环境”单选按钮,如图7-75所示,再单击“下一步”按钮,在弹出的窗口中单击“完成”按钮,然后依次单击“确定”按钮,返回规则编辑窗口。
在规则编辑窗口中添加关闭表单操作,如图7-76所示,最终设计好的表单如图7-77所示。
图7-75 选择提交到宿主环境 图7-76 添加关闭表单操作
图7-77 设计好的表单
2.发布表单
Step1 确认表单的安全级别为“完全信任”。
通过“工具”菜单调出“表单选项”窗口,在“安全和信任”类别中选中表单的安全级别为“完全信任”,如图7-78和图7-79所示。
图7-78 调出“表单选项”窗口 图7-79 确认表单的安全级别为“完全信任”
Step2 单击设计任务面板中的“发布表单模板”链接,如图7-80所示。
在“发布向导”窗口中选择“网络位置”单选按钮,单击“下一步”按钮,如图7-81所示。
图7-80 任务面板 图7-81 “发布向导”窗口
Step3 指定表单模板的发布位置为项目所在的目录,指定文件名为“ApprovalForm.xsn”,单击“下一步”按钮,如图7-82所示。
确保如图7-83所示的路径输入框为空,单击“下一步”按钮完成表单发布。
图7-82 指定表单模板的发布位置
图7-83 路径输入框
3.修改工作流的配置文件和代码
Step1 确保表单正确发布到项目目录中,如图7-84所示。
图7-84 确保表单正确发布到项目目录
Step2 修改feature.xml文件。
在feature.xml文件的ElementManifests节点下添加如下代码,确保infopath表单能被VisualStudio自动发布。
最终的feature.xml文件如下所示。
xmlversion="1.0"encoding="utf-8"?
>
Title="CodeArt.WorkflowDemo1feature" Description="MySharePointWorkflowFeature" Version="12.0.0.0" Scope="Site" ReceiverAssembly="Microsoft.Office.Workflow.Feature,Version=12.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c" ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver" xmlns=" --ValueforRegisterFormskeyindicatesthepathtotheformsrelativeto featurefilelocation--> --ifyoudon'thaveforms,use*.xsn-->
Step3 修改workflow.xml文件。
在workflow.xml文件的Workflow节点下添加如下属性,确保工作流创建的任务采用infopath表单内容类型。
TaskListContentTypeId="0x01080100C9C9515DE4E24001905074F980F93160"
在MetaData节点下添加任务的FormURN注册,代码如下所示。
schemas-microsoft-com:
office:
infopath:
Task0:
-myXSD-2008-10-02T19-07-06
FormURN的实际值可以通过infopath表单的“文件”→“属性”命令获得,如图7-85所示的ID域即是表单的FormURL。
图7-85 表单模板属性
Step4 修改greateTask的MethodInvoking事件处理方法,指定TaskType为0,代码如下。
privatevoidcreateTask1_MethodInvoking(objectsender,EventArgse)
{
this.task1Id=Guid.NewGuid();//生产任务ID
this.task1Properties.Title="文档审批";
this.task1Properties.AssignedTo="codeart\\user1";//指定任务操作人
this.task1Properties.TaskType=0;//设置任务采用第一个任务表单
//将任务编辑权限分配给任务操作人
this.specialPermissions1.Add(this.task1Properties.AssignedTo,
SPRoleType.Contributor);
}
以上操作完成后可以再次部署工作流,启动流程后可以看到如图7-86所示的任务编辑页面。
图7-86 任务编辑页面
4.表单的校验步骤
InfoPath表单发布后,访问任务页面的时候可能会出现表单加载错误,这个现象大多数情形下是由表单本身引起的,可以先通过SharePoint管理中心的管理表单模板模块进行校验,确保表单校验成功。
表单校验步骤如下。
Step1 访问应用程序管理中的管理表单模板模块,如图7-87所示。
图7-87 管理表单模板模块
Step2 单击“上载表单模板”链接,如图7-88所示。
图7-88 “上载表单模板”链接
Step3 单击“浏览”按钮找到项目目录中发布后的模板,再单击“校验”按钮,确定表单验证状态为“成功”,如图7-89和图7-90所示。
若表单校验不成功,则按照提示信息操作。
图7-89 验证表单模板
图7-90 表单验证成功
不要单击“上载”按钮,工作流任务表单模板和工作流定义的Feature关联,安装Feature之后表单模板会自动安装。
7.4.5 工作流代码给任务表单域赋值
上一节讲述了如何设计工作流的任务表单,以及如何让任务表单跟工作流的任务关联起来。
在很多情况下,工作流代码需要访问任务表单中的域,给某个域赋值或者获取某个域的值。
工作流代码不能直接给表单域赋值,给表单域赋值必须借助于辅助数据源来进行。
以下是添加辅助数据源的步骤。
Step1 新建ItemMetadata.xml文件。
新建一个文本文件,改名为ItemMetadata.xml,添加以下内容。
rowxmlns: z="#RowsetSchema" ows_comments=""/> 以ows开头的属性是辅助数据源中的字段,工作流代码可以控制这些字段的值,按照需要可以添加多个字段,但是要注意字段命名的格式以ows_开头。 Step2 添加数据连接。 选择“工具”菜单中的“数据连接”命令,如图7-91所示。 图7-91 选择“数据连接”命令 Step3 在弹出的“数据连接”窗口中单击“添加”按钮,再在弹出的对话框中选择“新建连接”和“仅接收数据”单选按钮,如图7-92所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工作流 开发 sharepointVS