本章我们学习如何创建顺序工作流。我们模拟Credit审批流程。当用户添加项目到列表时,我们让工作流自动在插入的项目上启动,并通过审查用户的被要求的“Credit line”,并基于用户雇佣和Credit历史审批它。
Getting ready
使用自定义列表模板创建Credit Approval。
下面截图是最终结果:
How to do it…
1. 管理员打开VS。
2. 新建项目(使用.NET Framework 3.5)。
3. 选择顺序工作流。
4. 命名SequentialWF。确定。
5. 默认部署为场解决方案,点击下一步。
6. 选择列表工作流。
7. 点击下一步,在与工作流关联的库或列表选择Credit Approval列表。其余默认。
8. 默认。
9. 完成。VS生成必要文件,默认打开工作流设计界面(包含工作流起始与结束点)。
10. 我们先用LogToHistoryListActivity创建工作流流图。LogToHistoryListActivity是SharePoint特定的活动,可以在工具箱中找到。
11. 在onWorkflowActivate下添加这个活动,在属性窗口更名为logWorkflowStarted。设置HistoryDescription属性为Workflow Started。
12. 拖拽IFElse活动,放在logWorkflowStarted下,命名为CheckEmploymentHistoryActivity。默认添加了两个分支。其一条件为真,另一个条件为假。
A 添加logToHistoryListActivities到两个分支,命名左边GoodEmploymentHistoryBranch,右边BadEmploymentHistoryBranch。
B 改变这些分支下的LogToHistoryListActivities的名称。GoodEmploymentHistoryBranch下为logGoodEmploymentHistory,另一个为logBadEmploymentHistory。
C 设置logGoodEmploymentHistory的HistoryDescription属性为Employment History is good,另一个为Employment History is bad。
13. 分之上的感叹号表明评估条件还没有设置。这对于IfElse活动是必须的。没有这个,IfElse活动不知道执行哪个分支。从分支属性窗口,选择Code Condition,设置Condition属性为CheckEmploymentHistory。
14. 相同的方法,在GoodEmploymentHistoryBranch下,添加另外一个IfElse活动,命名为CheckCreditHistoryActivity,并在每个分支上添加LogToHistoryListActivity。设置代码条件,条件属性为CheckCreditHistory。GoodCreditHistoryBranch下的HistoryDescription是Credit History is good,另外一个是Credit History is bad。
15. 在代码视图中,添加代码判定employment history。因为工作流在插入到列表的项中运行,你可以在工作流中判定项目值。
16. 同样,添加代码判定credit history。
17. 按F5生成并运行项目。在项目创建过程中,工作流已经和列表关联。添加新项目到列表,填写所有域如下:
18. 一旦你保存项目到列表,工作流立刻被初始化,开始一个实例。因为没有用户互动,工作流完结,并显示状态:
19. 点击已完结。这将列出所有工作流流程期间的历史记录。
20. 添加更多项目到列表,使用不同employment history和credit history来判定工作流其他条件。
How it works...
每个SharePoint工作流项目都以onWorkflowActivated活动开始。这个活动是强制的,因此VS自动添加。默认下,这个活动和变量workflowProperties变量(SPWorkflowActivationProperties类型)绑定。workflowProperties变量提供了关于当前工作流上下文、初始化工作流的项目、工作流隶属的列表、启动者以及其他的信息。SharePoint workflow runtime为我们填充这些值供我们使用。
使用workflowProperties,我们能够访问初始化工作流的列表项目,并能够在代码中访问项目信息,创建IfElse活动的条件。代码相当简单,这样它核查输入的值,并作出决策。
logToHistoryListActivity是SharePoint特定的活动,记录信息到历史记录列表。幕后的这个活动从ISharePointService接口调用LogToHistoryList方法,在Microsoft.SharePoint.Workflow.dll程序集中应用。下面代码展示此方法的方法签名
这个方法中,你可以指定工作流启动的事件类型、工作流注释以及其他来将你的注释集中在一个指定的类别。
ISharePointService接口使得活动能够与工作流实例之外交换数据。本例中,写入到历史记录列表。有其他方法如SendEmail、SetState等也是这个接口的一部分。
在VS2010中,所有SharePoint project items,如事件接收器、工作流项目或内容类型,都有类似的结构,如有feature、project item的文件夹等。当我们的工作流项目被创建时,VS添加feature文件夹(含Feature.xml文件)和Workflow1文件夹(含Elements.xml、Workflow1.cs和Workflow1.designer.cs)。最后两个文件组成了工作流的活动,和与这些活动关联的代码。像事件接收器一样,Elements.xml文件提供了关于SharePoint的这个工作流的元数据信息。你可以随意命名此文件。但是VS总是在第一次创建项目时为所有SharePoint模板命名为Elements.xml。这里你设置属性如工作流名称、类文件、包含代码的程序集等。你也可以设置关联表单、初始表单,以及与工作流相关的任务表单。因为我们的工作流没有任何这些资源,我们不作任何改变。所有Elements.xml中属性如下:
在项目创建向导中,我们设置我们的顺序工作流为列表工作流。这个信息可以在Workflow1文件夹的.spdata文件中找到。
为了在项目资源管理器中列出这个文件,点击项目--显示所有文件。.spdata文件时SharePoint项目元数据信息文件。是XML格式。你不应该手动修改这个文件,因为它可能在你修改项目结构如添加和删除项目时,会被VS覆盖。这个文件在打包过程中使用。它包含关于解决方案中SharePoint Project item的信息。你也可以从Workflow1文件夹的属性窗口判定这个属性。在项目创建向导中,我们设置的另一个项目也可以在属性窗口中北判定。你可以查看与工作流相关联的历史记录列表和任务列表。目标列表属性指定了和工作流关联的列表。这只是为了调试目的。你可以总是在创建部署后,关联工作流到不同列表。你通过SharePoint用户界面或者使用Feature接收器的对象模型代码关联目标列表。你也可以关联工作流到内容类型,并部署它。你将在第四章节了解内容类型,以及如何关联工作流。
There's more...
当我们生成并部署工作流到生产环境时,你有几种方法关联工作流和内容类型、列表或站点:
A 手动通过使用SharePoint用户界面。
B 通过feature接收器在feature激活过程。
在第四章节,我们将向你展示如何使用feature接收器关联工作流到内容类型。它和关联工作流到列表的过程相同。这里是手动关联工作流到列表的方法。
1. 列表设置--工作流设置。
2. 点击添加工作流链接,
3. 输入唯一的工作流名称,选择支持的任务列表和历史记录列表。