sharepoint高效率工作流开发_第1页
sharepoint高效率工作流开发_第2页
sharepoint高效率工作流开发_第3页
sharepoint高效率工作流开发_第4页
sharepoint高效率工作流开发_第5页
已阅读5页,还剩147页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章主要阐述SharePoint Designer 2007(SPD)的工作流应用及利用WF对SharePoint Designer工作流组件(动作和条件)进行扩展,讲解利用WF和Visual Studio 2008开发工作流模板的方法。本章提供视频教程:采用SPD设计工作流的默认方式和定制后的方式。本章包括:n 工作流开发概述n 采用SSharrePoointt Deesiggnerr设计工工作流n ShaarePPoinnt DDesiigneer工作作流的扩扩展n 采用VVisuual Stuudioo 20008 开发工工作流模模板7.1 工作流流开发概概述ShareePoiint基基

2、于WFF(Wiindoow WWorkkfloow FFounndattionn)构建建了它的的工作流流功能。WWF是SSharrePoointt工作流流框架的的基础,要要深入了了解ShhareePoiint工工作流的的开发,首首先应该该了解WWF的一一些基础础知识,本本章对WWF的技技术细节节并不会会过多讲讲解。本本节将讲讲述ShhareePoiint工工作流的的基础知知识,并并介绍系系统自带带的工作作流模板板的使用用和默认认的工作作流任务务操作方方式。7.1.11 工工作流开开发环境境的搭建建如果使用VVisuual Stuudioo 20005开开发ShhareePoiint工工作流应应

3、用,首首先需要要安装VVisuual Stuudioo 20005的的WF扩扩展Vissuall Sttudiio 220055 Exxtennsioons forr Wiindoows Worrkfllow Fouundaatioon ,可可以在以以下地址址下载: 5DD614409EE-1FFA3-48CCF- 80223-EE8F338E7709BBA6&dissplaaylaang=zh-cn。然然后安装装Offficee ShhareePoiint Serrverr 20007 SDKK。采用Vissuall Sttudiio 220055开发SSharrePoointt工作流流,无

4、论论是开发发环境的的搭建还还是开发发时调试试和测试试,都比比较烦琐琐。Viisuaal SStuddio 20008已经经发布正正式版了了,VSS 20008提提供了对对ShaarePPoinnt工作作流开发发更好的的支持,直直接集成成了开发发、部署署和调试试。本章章的示例例将采用用VS 20008来进进行。为了便于调调试和测测试工作作流,选选择直接接在ShhareePoiint服服务器环环境下开开发,因因此VSS 20008要要直接安安装在SSharrePoointt服务器器上。7.1.22 SSharrePoointt工作流流的基本本概念ShareePoiint工工作流是是一个预预先定义义

5、好的对对列表项项或文档档库文档档的处理理流程。一一个工作作流实例例跟一个个列表项项或文档档进行关关联,工工作流实实例不能能脱离列列表项存存在。当当需要用用户处理理数据的的时候,比比如进行行审批操操作,系系统会创创建一个个任务到到某个任任务列表表中,审审批用户户操作列列表中的的任务来来实现跟跟流程实实例的交交互。工作流实例例可以在在列表新新建、修修改时自自动启动动,或者者可以由由用户手手动启动动。MOOSS支支持两种种工作流流的开发发方式。l 利利用ShhareePoiint Dessignner可可以设计计简单的的无代码码顺序工工作流。在SharrePoointt Deesiggnerr中,可

6、可以直接接创建跟跟某个列列表或文文档库关关联的工工作流,在在工作流流中,可可以直接接访问列列表项的的字段,获获取字段段的值作作逻辑判判断或者者给字段段赋值,给给用户分分配审批批任务并并动态生生成审批批界面。SharePoint Designer设计的工作流只能跟一个列表(或文档库)关联,单个工作流无法用于多个列表,不同列表(或文档库)的工作流处理逻辑即使一样,也只能分别进行设计。 采用ShaarePPoinnt DDesiigneer设计计工作流流的优点点是操作作简单,无无须编译译和部署署,缺点点是只能能实现顺顺序操作作逻辑,无无法实现现退回等等循环逻逻辑,审审批界面面自动生生成,也也无法实实

7、现一些些复杂的的操作。77.2节节将演示示采用SSharrePoointt Deesiggnerr设计工工作流的的步骤。l 利利用Viisuaal SStuddio可可以开发发复杂的的顺序或或状态机机工作流流。在Visuual Stuudioo 20008中中,可以以直接在在WF设设计器中中开发工工作流,工工作流开开发好后后,编译译成DLLL,然然后采用用Feaaturre部署署到ShhareePoiint服服务器,在在网站中中将Feeatuure激激活后,工工作流即即可使用用了,可可以把这这种工作作流关联联到多个个列表。所所以又称称Vissuall Sttudiio 220088设计的的工作

8、流流为工作作流模板板。Visuaal SStuddio 20008开发发工作流流的优点点是能实实现很复复杂的流流程逻辑辑,开发发出来的的工作流流模板可可以供多多个网站站、多个个列表使使用。流流程任务务的操作作界面可可以采用用inffopaath或或者直接接采用aaspxx页面,这这样就可可以实现现较复杂杂的页面面操作。缺点就是开发部署比较复杂,对开发人员要求较高。7.1.33 SSharrePoointt工作流流的操作作方式ShareePoiint的的工作流流的默认认操作方方式并不不适合用用户的操操作习惯惯,一般般来说其其他工作作流产品品的操作作方式是是用户在在一个页页面上完完成所有有操作,包

9、包括查看看业务数数据(被被审批数数据)、填填写审批批意见等等。而SSharrePoointt工作流流的操作作方式是是:业务务数据跟跟审批数数据分离离,业务务数据可可以用列列表项或或文档库库中的文文档来表表示,用用户审批批的时候候默认只只看到审审批页面面,只有有单击链链接才能能查看业业务数据据,这种种操作方方式对文文档审批批还是说说的过去去的,但但是对列列表数据据的审批批操作就就有点“不不够人性性化”了了。在实实际的项项目中,需需要对用用户的操操作习惯惯进行引引导。ShareePoiint默默认提供供了很多多工作流流模板,这这些工作作流模板板跟采用用VS 20008开发发的工作作流模板板操作上上

10、是一样样的。下下面看一一下系统统自带的的“审批批”工作作流模板板的使用用。要在在ShaarePPoinnt中使使用一个个工作流流模板,首首先需要要将工作作流模板板跟文档档库或列列表关联联,操作作步骤如如下。Step11 在在文档库库的设置置页面单单击“工工作流设设置”链链接,如如图7-1所示示。图7-1 工作作流设置置Step22 在在添加工工作流页页面中,选选择工作作流模板板为“审审批”,输输入工作作流名称称为“文文档审批批”,单单击“下下一步”,如如图7-2所示示。图7-2 添加加工作流流任务列表是是用户存存放工作作流给审审批用户户分配的的任务列列表项的的列表,可可选择系系统已经经存在的的

11、任务列列表或者者新建一一个任务务列表。历历史记录录列表用用户存放放工作流流运行工工程中产产生的日日志信息息。Step33 在在工作流流参数设设置页面面中,选选择任务务分配对对象为“串串行”,输输入两个个用户作作为审批批者,选选择“文文档被拒拒绝”时时取消工工作流,选选择“工工作流完完成后”为为“更新新审批状状态”,如如图7-3所示示。单击击“确定定”按钮钮完成设设置。图7-3 设置置工作流流参数设置工作流流参数页页面又叫叫做工作作流关联联界面,本本示例中中的关联联界面是是采用IInfooPatth表单单开发的的,这个个表单叫叫做工作作流关联联表单,77.4.7节将将讲述工工作流关关联表单单的开

12、发发。Step44 为为了方便便审批用用户的操操作,需需要将用用户任务务WebbParrt添加加到网站站的首页页,如图图7-44所示。图7-4 添加加用户任任务WeebPaart工作流的配配置操作作已经完完成,下下面我们们看一下下这个工工作流的的使用。Step11 在在文档库库中新建建或上传传一个文文档,然然后在下下拉列表表中选择择“工作作流”选选项,如如图7-5所示示。图7-5 选择择“工作作流”选选项Step22 单单击“文文档审批批”工作作流,如如图7-6所示示。图7-6 选择择工作流流Step33 在在接下来来的配置置审批参参数页面面中,可可以输入入审批信信息,如如图7-7所示示。再单

13、单击“启启动”按按钮。图7-7 配置置审批参参数这个配置审审批参数数的页面面在工作作流启动动(初始始化)的的时候出出现,因因此叫做做初始化化表单,可可以采用用inffopaath开开发,在在7.44.8节节将具体体讲述工工作流初初始化表表单的开开发。现在文档审审批工作作流已经经启动,返返回到文文档库页页面,可可以看到到文档库库上多出出来一个个“文档档审批”栏栏,如图图7-88所示。通通过“文文档审批批”栏中中的链接接可以链链接到工工作流监监控和管管理页面面,如图图7-99所示。通通过工作作流监控控和管理理页面,可可以查看看工作流流任务的的分配和和完成情情况,强强制终止止工作流流。图7-8 文档

14、档库中工工作流链链接图7-9 工作作流监控控页面用第一个审审批用户户的账号号登录系系统,可可以在用用户任务务Webb部件中中看到需需要操作作的任务务,如图图7-110所示示。图7-100 工工作流任任务单击任务链链接,在在接下来来的任务务操作页页面中可可以通过过链接查查看被审审批的文文档,通通过下方方的“批批准”和和“拒绝绝”按钮钮进行审审批,如如图7-11所所示。图7-111 任任务页面面任务操作页页面又称称为任务务表单,可可以采用用inffopaath开开发,在在7.44.4节节将具体体讲述。用第2个审审批用户户的账号号登录系系统,进进行批准准操作。两两个审批批用户都都批准之之后,返返回到

15、文文档库页页面,可可以看到到文档审审批的状状态已经经变成“已已批准”,如如图7-12所所示。图7-122 文文档库7.2 采用SSharrePoointt Deesiggnerr设计工工作流ShareePoiint Dessignner可可以设计计无代码码的工作作流,对对列表项项或文档档启用处处理逻辑辑。ShhareePoiint Dessignner只只能设计计出简单单的顺序序工作流流,本节节了解一一下具体体的操作作方法。7.2.11 列列表项流流程示例例本节演示一一个员工工请假流流程的设设计:员员工提交交请假单单,由审审批人进进行审批批,审批批人批准准之后,自自动添加加一个日日程到日日历列

16、表表中,如如果不批批准,则则邮件通通知提交交人。具具体的操操作步骤骤如下。Step11 创创建列表表。新建建一个自自定义列列表,名名称为“员员工请假假”,添添加如图图7-113所示示的栏。图7-133 创创建列表表Step22 启启用列表表的内容容审批。通通过“列列表设置置”“版版本控制制设置”,启启用列表表的内容容审批。设设置“仅仅限可批批准项目目的用户户”可以以查看列列表中的的草稿项项目,如如图7-14所所示。图7-144 启启用内容容审批Step33 新新建工作作流。用用ShaarePPoinnt DDesiigneer 打打开站点点,选择择“文件件”“新新建”“工作作流”命命令,如如图

17、7-15所所示。图7-155 新新建工作作流Step44 指指定工作作流名称称和启动动方式。在在定义新新工作流流界面中中,输入入工作流流名称为为“员工工请假流流程”,选选择附加加到“员员工请假假”列表表,再选选择“允允许从项项目中手手工启动动此工作作流”,如如图7-16所所示。图7-166 定定义新工工作流界界面Step55 添添加审批批步骤。将将步骤名名称改为为“经理理审批”,在在操作中中,选择择“从用用户处收收集数据据”,单单击“此此用户”链链接,在在弹出的的对话框框中选择择一个审审批人,如如图7-17和和图7-18所所示。图7-177 添添加审批批步骤图图图7-188 选选择审批批用户S

18、tep66 设设计审批批步骤需需要采集集的数据据。单击击“数据据”链接接,在自自定义任任务向导导中输入入任务名名称为“请请假审批批”,如如图7-19所所示,再再单击“下下一步”按按钮。图7-199 添添加“请请假申请请”添加一个名名称为“审审批意见见”的多多行域,如如图7-20所所示。添添加一个个名称为为“是否否同意”的的选项类类型域,选选项为“批批准和拒拒绝”,如如图7-21所所示。图7-200 添添加“审审批意见见”域 图7-211 添添加“是是否同意意”域以上的操作作实际上上是创建建了一个个任务内内容类型型,并且且创建了了其编辑辑表单,如如图7-22所所示。图7-222 请请假审批批内容

19、类类型Step77 修修改审批批任务IID变量量名。通通过添加加“从用用户处收收集数据据”动作作创建了了一个任任务内容容类型,在在工作流流运行的的时候,会会创建一一个任务务列表项项,这个个列表项项的IDD会被放放到流程程的变量量中,以以便从工工作流中中可以访访问任务务数据。我我们把存存放这个个任务列列表项IID的变变量名修修改为“请请假审批批任务IID”,如如图7-23和和图7-24所所示。图7-233 修修改工作作流变量量名图7-244 重重新选择择任务IID绑定定到的变变量Step88 添添加审批批完成后后的处理理逻辑。再再添加一一个工作作流步骤骤,名称称为“审审批完成成”,如如图7-25

20、所所示。图7-255 添添加审批批完成步步骤Step99 添添加判断断条件。经经理审批批同意时时需要批批准列表表项,并并且将请请假休息息添加进进日程列列表中,首首先需要要添加判判断经理理审批是是否同意意的条件件,查找找到审批批任务列列表项的的是否同同意字段段,进行行判断即即可。从从“条件件”菜单单中选择择“比较较任意数数据源”,如如图7-26和和图7-27所所示。图7-266 添添加比较较任意数数据源条条件图7-277 比比较任意意数据源源比较任意数数据源条条件是“如如果值等等于值”的的形式,第第一个值值可以绑绑定到当当前列表表项的任任意字段段,或者者是其他他列表项项的字段段。这里里我们要要把

21、它绑绑定到任任务列表表的“是是否同意意”字段段。单击“值”,再再单击“绑绑定”图图标,在在定义工工作流查查找窗口口中,选选择数据据源为“任任务”,选选择域为为“是否否同意”,设设置匹配配值为任任务IDD匹配工工作流变变量中的的“请假假审批任任务IDD”,如如图7-28所所示。图7-288 绑绑定到是是否同意意字段设置条件为为任务的的“是否否同意”字字段值等等于“批批准”,如如图7-29所所示。图7-299 设设置判断断条件为为“批准准”Step110 添添加列表表项审批批操作。在在“操作作”中选选择“设设置内容容审批状状态”,并并将内容容审批状状态设置置为“已已批准”,如如图7-30所所示。图

22、7-300 添添加审批批操作Step111 创创建日历历信息。添添加一个个“创建建列表项项”操作作,选择择列表为为“个人人日历”(若若不存在在,则先先创建此此日历列列表),将将日历的的标题设设置为“请请假”,将将开始时时间和结结束时间间绑定到到当前列列表项的的相应字字段,如如图7-31所所示。图7-311 创创建日历历项Step112 添添加批准准未通过过的操作作。添加加一个EElsee Iff条件分分支,添添加设置置内容审审批状态态操作,将将内容审审批状态态设置为为“已拒拒绝”,添添加一个个发送邮邮件操作作,给启启动流程程的用户户发送一一封提醒醒邮件,如如图7-32所所示。图7-322 添添

23、加内容容审批为为“拒绝绝”和发发送邮件件操作ShareePoiint Dessignner设设计的工工作流的的使用和和7.11.3节节描述的的操作方方式基本本是一样样的。不不同的是是,单击击任务链链接首先先进入的的任务查查看页面面,在任任务查看看页面中中单击“编编辑项目目”链接接后才会会转到任任务编辑辑页面,如如图7-33,图图7-334和图图7-335所示示。图7-333 任任务列表表图7-344 任任务查看看页面图7-355 任任务编辑辑7.2.22 SSharrePoointt Deesiggnerr工作流流的迁移移ShareePoiint Dessignner设设计工作作流的功功能是提

24、提供给最最终用户户使用的的,就如如同用SSPD定定制站点点页面一一样,并并没有提提供专门门的流程程迁移工工具。最终用户可可以直接接在生产产环境中中设计流流程。对对开发人人员来说说,如果果在开发发环境中中设计好好了一个个比较复复杂的流流程,需需要迁移移到生产产环境,必必须手工工操作,可可以参考考如下步步骤。Step11 确确保生产产环境已已经建好好了相应应的列表表,并确确保列表表的配置置跟开发发环境完完全一致致,包括括列表名名称、列列表的所所有栏。Step22 用用ShaarePPoinnt DDesiigneer打开开生产环环境的站站点,新新建一个个与开发发环境名名称一样样的流程程,绑定定到同

25、名名称的列列表,直直接保存存。Step33 SSharrePoointt Deesiggnerr打开开开发环境境的站点点,将工工作流的的所有文文件复制制到生产产环境。Step44 打打开所有有工作流流的文件件,将其其中所有有的列表表项IDD替换成成生产环环境相应应的列表表项IDD。7.3 ShaarePPoinnt DDesiigneer工作作流的扩扩展ShareePoiint Dessignner提提供了常常用的很很多条件件和活动动,但是是这些条条件和活活动并不不能满足足所有需需要。本本节就来来讲述SSPD动动作和条条件的扩扩展。7.3.11 动动作的扩扩展SPD工作作流的动动作是一一个普通

26、通的WFF活动类类。WFF活动类类开发好好以后,部部署到GGAC中中,然后后修改SSPD工工作流的的配置文文件,注注册新开开发的活活动。SPD工作作流配置置文件路路径为CC:PProggramm FiilessCoommoon FFileesMMicrrosooft Shaareddweeb sservver exttenssionns112TTEMPPLATTE220522Woorkffloww,20052表表示中文文语言,英英文语言言的配置置文件路路径为CC:PProggramm FiilessCoommoon FFileesMMicrrosooft Shaareddweeb sservv

27、er exttenssionns112TTEMPPLATTE110333 WWorkkfloow,在在这个路路径下,有有个WSSS.AACTIIONSS文件,这这是一个个XMLL文件,这这个文件件里面配配置了所所有系统统自带的的动作和和条件。WSS.AACTIIONSS在Acctioons节节点下声声明了所所有的动动作。SSDP工工作流是是基于规规则来定定义的。在在ACTTIONNS配置置文件中中,将动动作类的的属性与与各种规规则设计计器关联联。以下下是“从从用户处处收集数数据”动动作的声声明。 以下是对配配置文件件中主要要元素的的说明。l CClasssNaame和和Asssembbly分分

28、别是动动作类的的全名和和所在的的程序集集。l AApplliessTo指指定动作作是应用用到文档档库还是是列表,允允许的值值为liist和和alll。l CCreaatessTassk指定定是否需需要创建建任务项项。l PParaametterss节点中中声明了了WF活活动类需需要跟上上下文数数据进行行绑定或或进行设设置的属属性。在Paraametter节节点中,NNamee为WFF活动类类的属性性名,TTypee为属性性的类型型,Diirecctioon声明明属性是是需要赋赋值的还还是对外外提供值值,有33个可选选值:IIn、OOut、OOptiionaal,指指定Inn时必须须给属性性赋值

29、,指指定Ouut时必必须将属属性跟某某个工作作流变量量进行绑绑定,OOptiionaal表示示可选项项,指定定Opttionnal时时可以不不对属性性进行操操作。以以下为33个特殊殊的Paarammeteer。l _Coonteext:当Acctioon类需需要访问问工作流流数据时时,必须须声明此此属性,类类型是MMicrrosooft.ShaarePPoinnt.WWorkkfloowAcctioons.WorrkfllowCConttextt。l _LiistIId:当当需要访访问工作作流关联联的列表表时,需需要指定定此属性性。l _IttemIID:当当需要访访问工作作流关联联的列表表项

30、时,需需要指定定此属性性。以上的3个个属性定定义在AActiion类类中,然然后声明明在配置置文件中中,工作作流运行行时引擎擎会自动动为其赋赋值。RuleDDesiigneer节点点声明了了对Acctioon类属属性的设设计规则则。Seenteencee指定了了设计时时显示的的提示信信息,其其中的占占位符号号与RRuleeDessignner中中的FiielddBinnd的IID属性性配置,FFielldBiind定定义了对对某个属属性的设设计规则则。Fiieldd为属性性的名字字,Teext为为占位位符处显显示的文文本,IID跟占占位符前的数数字对应应。DeesiggnerrTyppe指定定

31、了对属属性应用用的设计计器,系系统支持持如下的的设计器器。l SSurvvey:生成收收集数据据的表单单,表单单对应的的内容类类型IDD和标题题需要分分别映射射到两个个属性中中。l SSingglePPersson:单个用用户或用用户组。l PPersson:多个用用户或用用户组。l PParaametterNNamees:工工作流变变量。l SStriingBBuillderr:生成成可以跟跟当前工工作流数数据混合合的字符符串。l OOperratoor:选选项,用用Opttionn指定可可选值。如如: l ffielldNaamess:列表表栏,采采用此设设计器将将工作流流关联列列表的某某

32、个栏和和Acttionn类的属属性绑定定。l EE-maail:邮件设设计器,设设计邮件件的标题题、内容容和收件件人等,需需要将收收件人、抄抄送人、标标题、内内容4个个属性分分别绑定定,如: 7.3.22 动动作扩展展示例自定定义E-maiil活动动系统默认的的发送邮邮件动作作只能发发送简单单的文本本,很多多时候,用用户希望望审批任任务的提提醒邮件件中带一一个链接接,可以以直接链链接到任任务操作作页面。本本节我开开发一个个可以发发送任务务链接的的E-mmaill活动,这这个E-maiil活动动具有系系统发送送邮件动动作的所所有功能能,可以以动态绑绑定收件件人、指指定主题题等,如如图7-36所所

33、示。唯唯一跟系系统默认认功能的的区别就就是:在在发送出出去的邮邮件内容容中带有有任务操操作链接接。图7-366 发发送邮件件动作Step11 新新建一个个工作流流活动项项目,如如图7-37所所示。将将默认产产生的AActiivitty1类类改名为为“MaailWWithhTasskLiinkAActiivitty”。图7-377 新新建工作作流活动动项目Step22 添添加Miicroosofft.SSharrePoointt.dlll和mmicrrosooft.shaareppoinnt.WWorkkfloowAcctioons.dlll两个程程序集的的引用。这这两个程程序集位位于服务务器上

34、的的C:Proograam FFileesCCommmon FillesMiccrossoftt Shhareedwweb serrverr exxtennsioons12ISAAPI目目录中。Step33 切切换到代代码视图图,将MMaillWitthTaaskLLinkkActtiviity的的基类由由SeqquennceAActiivitty改为为Acttiviity。复核活动可可以从SSequuencceAcctivvityy类继承承,但是是MaiilWiithTTaskkLinnkAcctivvityy并不需需要使用用子活动动(也就就是不是是一个复复核活动动),所所有应该该从基本本的

35、Acctivvityy类继承承。Step44 添添加对SSharrePoointt APPI主要要名称空空间的引引用,代代码如下下所示。usingg Miicroosofft.SSharrePoointt;usingg Miicroosofft.SSharrePoointt.Uttiliitiees;usingg Miicroosofft.SSharrePoointt.Woorkffloww;usingg Miicroosofft.SSharrePoointt.WoorkfflowwActtionns;namesspacce CCodeeArtt.ShhareePoiint.Worrkfllo

36、wAActiionss ppubllic claass MaiilWiithTTaskkLinnkAcctivvityy : Acttiviity pubblicc MaailWWithhTasskLiinkAActiivitty() Step55 希希望MaailWWithhTasskLiinkAActiivitty部署署成ShhareePoiint Dessignner的的动作之之后,依依然具有有系统自自带的发发送邮件件活动的的功能可以动动态绑定定到收件件人、指指定邮件件主题等等,所以以需要给给MaiilWiithTTaskkLinnkAcctivvityy添加相相应的属属性。添添加一个个

37、_CConttextt属性,代代码如下下所示。publiic sstattic DeppenddenccyPrropeertyy _ConntexxtPrropeertyy = DDepeendeencyyProoperrty.Reggistter(_Conntexxt, tyypeoof(WWorkkfloowCoonteext), typeoof(SSenddMaiil); Brrowssablle(ttruee), VallidaatioonOpptioon(VValiidattionnOpttionn.Reequiiredd), DesiggnerrSerriallizaatioonV

38、iisibbiliity(DessignnerSSeriialiizattionnVissibiilitty.Visibble), DDesccripptioon(Conntexxt) pubblicc WoorkfflowwConntexxt _Coonteext geet rretuurn (WoorkfflowwConntexxt)bbasee.GeetVaaluee(_ConntexxtPrropeertyy); seet bbasee.SeetVaaluee(_ConntexxtPrropeertyy, vvaluue); _Conntexxt属性性用来绑绑定到工工作流的的上下文文,

39、以便便获取工工作流运运行环境境的网站站集、网网站等信信息。这这个属性性的名称称是不能能变的,后后面的步步骤会讲讲述如何何在配置置文件中中配置这这个属性性。添加加一个_LiistIId属性性,代码码如下所所示。publiic sstattic DeppenddenccyPrropeertyy _LisstIddProoperrty = DDepeendeencyyProoperrty.Reggistter(_LiistIId, tyypeoof(sstriing), ttypeeof(MaiilWiithTTaskkLinnkAcctivvityy); VaaliddatiionOOptiion

40、(VallidaatioonOpptioon.RRequuireed) pubblicc sttrinng _LiistIId geet rretuurn (sttrinng)bbasee.GeetVaaluee(_LisstIddProoperrty); seet bbasee.SeetVaaluee(_LisstIddProoperrty, vaaluee); _LisstIdd属性用用来绑定定到工作作流的关关联的列列表IDD。添加加一个_LiistIItemm属性,代代码如下下所示。publiic sstattic DeppenddenccyPrropeertyy _LisstIttem

41、PProppertty = DeepenndenncyPProppertty.RRegiisteer(_LiistIItemm, typpeoff(innt), tyypeoof(MMaillWitthTaaskLLinkkActtiviity); VaaliddatiionOOptiion(VallidaatioonOpptioon.RRequuireed) pubblicc innt _LiistIItemm geet rretuurn (innt)bbasee.GeetVaaluee(_LisstIttemPProppertty); seet bbasee.SeetVaaluee(_Li

42、sstIttemPProppertty, vallue); _LisstIttem属属性用来来绑定到到工作流流的关联联的列表表项IDD。添加加一个TTo属性性,代码码如下所所示。publiic sstattic DeppenddenccyPrropeertyy TooProoperrty = DDepeendeencyyProoperrty.Reggistter(Too, typeoof(AArraayLiist), ttypeeof(MaiilWiithTTaskkLinnkAcctivvityy); VaaliddatiionOOptiion(VallidaatioonOpptioon.R

43、Requuireed) pubblicc ArrrayyLisst To geet rretuurn (ArrrayyLisst)bbasee.GeetVaaluee(TooProoperrty); seet bbasee.SeetVaaluee(TooProoperrty, vaaluee); To属性是是一个AArraayLiist类类型的集集合,在在ShaarePPoinnt DDesiigneer进行行设计的的时候可可以直接接绑定到到用户。同同样,添添加邮件件的抄送送(CCC)、暗暗送(BBCC)、主主题(SSubjjectt)、内内容(BBodyy)4个个属性代代码如下下所示。pub

44、liic sstattic DeppenddenccyPrropeertyy CCCProoperrty = DDepeendeencyyProoperrty.Reggistter(CCC, typeoof(AArraayLiist), ttypeeof(MaiilWiithTTaskkLinnkAcctivvityy); /抄抄送 VaaliddatiionOOptiion(VallidaatioonOpptioon.OOptiionaal) pubblicc ArrrayyLisst CCC geet rretuurn (ArrrayyLisst)bbasee.GeetVaaluee(CC

45、CProoperrty); seet bbasee.SeetVaaluee(CCCProoperrty, vaaluee); pubblicc sttatiic DDepeendeencyyProoperrty BCCCProoperrty = DDepeendeencyyProoperrty.Reggistter(BCC, ttypeeof(ArrrayLListt), typpeoff(MaailWWithhTasskLiinkAActiivitty); /暗暗送 VaaliddatiionOOptiion(VallidaatioonOpptioon.OOptiionaal) pubbli

46、cc ArrrayyLisst BBCC geet rretuurn (ArrrayyLisst)bbasee.GeetVaaluee(BCCCPrropeertyy); seet bbasee.SeetVaaluee(BCCCPrropeertyy, vvaluue); pubblicc sttatiic DDepeendeencyyProoperrty SubbjecctPrropeertyy = DeppenddenccyPrropeertyy.Regissterr(SSubjjectt, typpeoff(Sttrinng), tyypeoof(MMaillWitthTaaskLLin

47、kkActtiviity); /主主题 VaaliddatiionOOptiion(VallidaatioonOpptioon.RRequuireed) pubblicc sttrinng SSubjjectt geet rretuurn (sttrinng)bbasee.GeetVaaluee(SuubjeectPProppertty); seet bbasee.SeetVaaluee(SuubjeectPProppertty, vallue); pubblicc sttatiic DDepeendeencyyProoperrty BoddyPrropeertyy = Deppenddenc

48、cyPrropeertyy.Reegissterr(Bodyy, typpeoff(Sttrinng), tyypeoof(MMaillWitthTaaskLLinkkActtiviity); /邮邮件内容容 VaaliddatiionOOptiion(VallidaatioonOpptioon.OOptiionaal) pubblicc sttrinng BBodyy geet rretuurn (sttrinng)bbasee.GeetVaaluee(BoodyPProppertty); seet bbasee.SeetVaaluee(BoodyPProppertty, vallue);

49、Step66 上上一步把把MaiilWiithTTaskkLinnkAcctivvityy需要的的所有属属性都添添加好了了,下面面来添加加发送邮邮件的处处理代码码。重载载Exeecutte方法法,代码码如下所所示。 prootecctedd ovverrridee AcctivvityyExeecuttionnStaatuss Exxecuute(ActivvityyExeecuttionnConntexxt pprovvideer) /获取到到工作流流服务 ISSharrePoointtSerrvicce sservvicee = (ISSharrePoointtSerrvicce)ppro

50、vvideer.GGetSServvicee(typeoof(IIShaarePPoinntSeerviice); iff (sservvicee = nuull) tthroow nnew InvvaliidOpperaatioonExxcepptioon(); trry /获取取到列表表 SSPLiist lisst = _Conntexxt.WWeb.Lisstsneww Guuid(_LListtId); /获取取到列表表项 SSPLiistIItemm ittem = llistt.GeetIttemBByIdd(Coonveert.ToIInt332(_LiistIItemm);

51、/计算算任务查查看URRL sstriing urll = thiis._Coonteext.Webb.Urrl + _laayouuts/coddeArrt/SSPTaaskRRediirecct.aaspxx?LiistIId= + iteem.PPareentLListt.IDD + &IteemIdd= + iitemm.IDD; /发送送邮件参参数 SStriingDDicttionnaryy heeadeers = nnew StrringgDicctioonarry(); hheaddersstto = thiis.PParsseSeendTTo(tthiss.Too); hhe

52、adderssssubjjectt = tthiss.Suubjeect; iif (nulll != tthiss.CCC) heaaderrscc = thhis.ParrseSSenddTo(thiis.CCC); iif (nulll != tthiss.BCCC) heaaderrsbccc = tthiss.PaarseeSenndToo(thhis.BCCC); sstriing boddy = nuull; iif (nulll != tthiss.Boody) Acttiviity parrentt = proovidder.Acttiviity; whiile (paare

53、nnt.PPareent != nulll) paarennt = paarennt.PPareent; /处处理邮件件内容中中的属性性绑定,HHelpper是是系统自自带的类类 boddy = Heelpeer.PProccesssStrringgFieeld(thiis.BBodyy, ppareent, thhis._CConttextt); bbodyy += 点点击此处处查看或或处理任任务; /发送送邮件 sservvicee.SeendEEmaiil(bbasee.WoorkfflowwInsstannceIId, fallse, heeadeers, boody); rretuu

54、rn ActtiviityEExeccutiionSStattus.Cloosedd; caatchh (EExceeptiion ex) /将异异常信息息记录到到日志列列表 sservvicee.LoogTooHisstorryLiist(basse.WWorkkfloowInnstaanceeId, SPWorrkfllowHHisttoryyEveentTTypee.WoorkfflowwErrror, _Conntexxt.WWeb.CurrrenntUsser.ID, TiimeSSpann.MiinVaaluee, MaillWitthTaaskLLinkkActtiviity E

55、rrror, ex.Messsagge + exx.SttackkTraace, ); reeturrn AActiivittyExxecuutioonSttatuus.FFaulltinng; 发送邮件活活动一般般放置在在从用户户处收集集数据活活动之前前,那么么在发送送邮件活活动执行行的时候候审批任任务是没没有创建建的,这这时候无无法获取取任务的的路径或或ID,所所以我们们采用一一个中转转页面(SSPTaaskRRediirecct.aaspxx),将将列表项项的IDD传给这这个页面面,SPPTasskReedirrectt.asspx负负责转向向任务操操作页面面。PaarseeSenndT

56、oo方法用用来将存存放邮件件地址和和账号的的ArrraryyLisst转换换成合法法的收件件人格式式,这个个函数反反编译自自系统自自带的MMaillActtiviity。Step77 编编写SPPTasskReedirrectt.asspx页页面代码码,并将将其复制制到122TEEMPLLATEELAAYOUUTSCoddeArrt目录录下。 void Pagge_LLoadd(obbjecct ssendder , EEvenntArrgs e) /获取取到列表表 SSPLiist lisst = SPPConntexxt.CCurrrentt.Weeb.LListts neww Guuid

57、(Reqquesst.QQuerrySttrinngLisstIdd) ; /获取取到列表表项 SSPLiistIItemm ittem = llistt.GeetIttemBByIdd(Reequeest.QueerySStriingIttemIID) /当前前用户IID iint useeId = SSPCoonteext.Currrennt.WWeb.CurrrenntUsser.ID; MMicrrosooft.ShaarePPoinnt.WWorkkfloow.SSPWoorkfflowwTassk ccurrrenttTassk = nuull; /查找找当前用用户的任任务 ffo

58、reeachh (MMicrrosooft.ShaarePPoinnt.WWorkkfloow.SSPWoorkfflowwTassk ttaskk inn ittem.Tassks) if ( + tasskPerrcenntCoomplletee = 1) coontiinuee; strringg asssiggneddTo = + taaskAsssiggneddTo; if (asssiggneddTo = ) coontiinuee; SPFFielldUsserVValuue uuserr = neww SPPFieeldUUserrVallue(SPCConttextt.Cuu

59、rreent.Webb, assiggneddTo); if (usseIdd = usser.LoookuppId) cuurreentTTaskk = tassk; brreakk; iif (currrenntTaask = nulll) Ressponnse.Wriite(任务务不存在在或已被被删除。); retturnn; /转向向任务编编辑页面面 RRespponsse.RRediirecct(ccurrrenttTassk.CConttenttTyppe.EEdittForrmUrrl + ?Lisst= + curreentTTaskk.PaarenntLiist.ID + &

60、IDD= + ccurrrenttTassk.IID);Step88 将将项目进进行签名名,利用用refflecctorr找到程程序集的的全名,代代码如下下所示。CodeAArt.ShaarePPoinnt.WWorkkfloowAcctioons, Veersiion=1.00.0.0, Cullturre=nneuttrall, PPubllicKKeyTTokeen=88d0ee20447bbbdcccb4ddStep99 创创建一个个XMLL文件,改改名为CCodeeArtt.Acctioons,并并将其复复制到112TTEMPPLATTE220522 WWorkkfloow目录录下。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论