65.9K
CodeProject 正在变化。 阅读更多。
Home

MOSS for Developers - 第 4 部分:开发人员工作流

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009 年 8 月 18 日

Ms-PL

18分钟阅读

viewsIcon

25063

从开发人员的角度提供了 SharePoint 工作流的概述。此内容是来自 www.myrampup.com 的 MOSS 内容的第 4 部分。

引言

Microsoft Windows SharePoint Services 为用户提供了一个强大、可自定义的工作环境,用于创建、协作和存储宝贵的业务信息。现在,通过 Microsoft Windows SharePoint Services 3.0 和 Microsoft Office SharePoint Server 2007,您可以将自定义业务流程附加到这些文档或列表项。

您可以使用工作流来表示这些自定义业务流程。工作流是组织和运行一组工作单元或活动以形成工作流程可执行表示形式的自然方式。此流程可以控制 Windows SharePoint Services 中几乎任何方面的内容,包括该内容的生命周期。工作流足够灵活,可以同时模拟系统功能和完成工作流所需的人工操作。

您可以创建满足业务流程需求的工作流,无论其简单程度如何。您可以创建由用户启动的工作流,或者由 Windows SharePoint Services 根据某个事件(例如,创建或修改项时)自动启动的工作流。

假设您需要创建一个简单的流程,将文档路由给一系列用户进行审批或评论。此流程将包括系统需要执行的操作,以及提供用户以规定方式与流程交互的界面。例如,当文档准备好审阅时,Windows SharePoint Services 将向选定的用户发送电子邮件。然后,这些用户需要能够通知 Windows SharePoint Services 他们已完成审阅,并可选择输入任何评论。Windows SharePoint Services 3.0 中包含的工作流框架(在 SharePoint Server 2007 中得到扩展)使您能够模拟此类复杂的工作流程,并以易于理解、不打扰的方式将其呈现给最终用户,引导他们完成流程的每一步。

本文档提供了关于 Windows SharePoint Services 中实现的工作流以及 SharePoint Server 中扩展的工作流的高层概述。它包括对可用于在这两个环境中创建工作流的开发人员工具的讨论,以及这些工具各自的功能和优点。

工作流持久性

Windows SharePoint Services 为 WF 工作流引擎提供的一项最重要的服务是持久性。包含人工交互的工作流本质上是长期运行的;即使在理想情况下,与机器相比,人类完成工作也需要相对较长的时间。在许多 Microsoft Office 场景中,工作流通常需要几天甚至更长时间。以文档审批工作流为例。审批者可能需要几天时间才能审阅文档。

显然,让每个正在运行的工作流在整个执行过程中都驻留在内存中是不可行的;很快,累积的长期运行的工作流所需的资源就会导致系统瘫痪。

取而代之的是,在工作流实例达到等待用户输入的点之后,Windows SharePoint Services 会将该工作流实例从内存中卸载并持久化其数据。然后,当适当的事件(例如,用户输入)需要再次启动工作流实例时,Windows SharePoint Services 会使用持久化的数据重新创建工作流实例,以便工作流实例可以按需接收和处理该事件。

尽管任何给定时间可能运行许多工作流实例,但只有一小部分工作流可能驻留在内存中并使用系统资源。

工作流组合

前面,我们将工作流定义为一种组织和运行一组工作单元或活动以形成工作流程可执行表示形式的方式。因此,每个 WF 工作流都由一组相关的活动组成。活动是 Windows Workflow Foundation 中建模、可编程性、可重用性和执行的基本单元。活动可以由系统执行,也可以由用户执行。例如,系统可以向某人发送电子邮件作为警报;或者一个人可以批准文档以供分发。

活动还可以代表逻辑控制结构,这些结构定义范围并指导工作流的执行流,就像代码逻辑控制(如 If ThenDo While 循环)控制代码中的程序流一样。

活动可以具有属性、方法和事件。简单的活动执行单个工作单元,例如“延迟 1 天”或“调用 Web 服务”。复合活动包含其他活动;例如,带有两个分支的条件。您还可以将处理程序(如错误处理程序或补偿处理程序)附加到活动。这对于复合活动尤其可取。

本质上,工作流本身就是一个复合活动,它包含该工作流中的所有其他活动。

因此,工作流可以看作是一组以模型形式存储的活动,该模型描述了一个真实世界的过程。工作从开始到结束通过模型流动,活动可能由人员或系统功能执行。工作流提供了一种描述执行顺序以及短期或长期工作单元之间的依赖关系的方式。

Windows Workflow Foundation 包含许多预定义的活动,您可以在工作流中使用它们,也可以创建自己的自定义活动。Windows SharePoint Services 工作流项目模板包包含许多专为 Windows SharePoint Services 环境设计的活动。此模板包还包含以编程方式操作 Windows SharePoint Services 对象模型所需的引用。同样,SharePoint Server 项目模板包已针对 SharePoint Server 环境进行了定制。

Windows SharePoint Services 和 SharePoint Server 2007 中的工作流

到目前为止,我们已经讨论了适用于实现 Windows Workflow Foundation 的任何应用程序的工作流属性。现在,让我们更仔细地看看工作流在 Windows SharePoint Services 中的具体实现,并讨论该实现的重要方面。

工作流模板和实例

在 Windows SharePoint Services 中,站点或列表上可用的工作流称为工作流模板;在特定 SharePoint 项上实际运行的工作流称为工作流实例。因此,在给定列表上,同一工作流模板的多个实例可能同时运行,每个实例针对不同的 SharePoint 项。一个 SharePoint 项上可能同时运行多个工作流。

用户与工作流交互的点

让我们更仔细地看看用户在 Windows SharePoint Services 和 SharePoint Server 中与工作流交互的各种阶段。

关联

关联发生在站点管理员将工作流模板可用到特定文档库、列表或内容类型时。在此阶段,站点管理员通过指定以下参数信息来为该特定文档库、列表或内容类型自定义工作流

  • 工作流的唯一名称
  • 工作流如何应用于给定项:是在创建或修改项时自动应用,还是手动应用;以及哪些角色(如管理员或贡献者)可以启动工作流
  • 任务列表,工作流可以在其中创建任务
  • 历史记录列表,工作流可以在其中存储由工作流定义历史事件

此外,工作流开发人员可以通过设置特定于某个工作流的参数信息来使站点管理员能够进一步自定义工作流。管理员可能需要为工作流指定参数、默认值以及其他信息,以便将其应用于管理员正在关联的列表、库或内容类型上的项。

工作流的关联实际上发生在工作流本身之外;在关联期间实际上不会启动任何工作流实例。相反,Windows SharePoint Services 将关联信息存储在一个特殊的内部工作流关联表中。然后,当工作流实例实际启动时,Windows SharePoint Services 使用关联数据(以及任何初始化数据)来设置新工作流实例的参数。


初始化

关联处理的是工作流如何应用于特定列表、库或内容类型,而初始化处理的是工作流如何应用于特定的 SharePoint 项。

当用户在特定项上实际启动工作流实例时,就会发生初始化。用户根据需要为该特定项上的特定工作流提供自定义信息,然后启动工作流。

工作流开发人员可以使用初始化来允许用户覆盖或追加管理员设置的关联参数,或指定有关工作流如何应用于给定 SharePoint 项的其他参数或信息。并非所有工作流都需要初始化。事实上,设置为自动启动的工作流无法拥有初始化参数。

用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器的 Windows SharePoint Services 工作流项目包含一个活动,该活动在工作流初始化时充当事件处理程序。此活动是任何 Windows SharePoint Services 工作流中的第一个活动。

修改

修改允许用户在工作流实例运行时更改其参数或流。作为开发人员,您可能希望在工作流的某些点允许用户在工作流在项上运行时更改工作流。例如,您可能希望允许用户将任务分配给另一个人,甚至向工作流添加特定任务。您向用户呈现的用于在工作流在项上运行时更改工作流的选项称为修改

用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器的 Windows SharePoint Services 工作流项目包含一个用于启用工作流修改的活动,以及一个在工作流修改启用时充当事件处理程序的活动。

Tasks(任务)

由人员执行的工作流活动在 Windows SharePoint Services 工作流中表示为任务。

作为工作流作者,您可以指定任务架构。例如,任务列表可能包含以下内容

  • 任务标题
  • 分配任务的人员姓名
  • 任务状态
  • 任务优先级
  • 任务到期日期
  • 指向相关项的链接

然后,用户可以根据需要编辑任务。工作流实例会收到工作流任务更改的通知,并可以选择按照工作流中的规定进行响应。

用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器的 Windows SharePoint Services 工作流项目包含创建、删除和更新任务的活动,以及在任务创建、更新或删除时充当事件处理程序的活动。

在 Visual Studio 2008 中编写 SharePoint 工作流

用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器是 Visual Studio 2008 的一个加载项。它利用开发人员对 Visual Studio 开发环境的了解,通过图形界面提供了一种快速开发工作流的方法。

用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器是一个工具,可用于快速创建工作流,这种方式与封装业务流程的代码开发集成在一起。为此,用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器提供了一个带有直观控件的图形界面,托管在熟悉的 Visual Studio 开发环境中。其功能包括:

  • 一个拖放设计器,允许您通过拖动工具箱中的预定义工作流活动来组装自定义工作流
  • 一个允许您使用直观图形工具处理工作流标记的界面
  • 与属性窗口集成,因此开发人员可以通过图形界面或直接在代码隐藏文件中配置工作流活动的属性,并始终保持两者同步
  • 通过附加到 Windows SharePoint Services 进程来调试工作流,包括在工作流中设置断点
  • 能够将错误、补偿和事件处理程序附加到活动,并以图形方式“注释掉”活动

为了进一步协助您的工作流开发,Microsoft 提供了两个 Visual Studio 项目模板包供用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器使用:一个针对 Windows SharePoint Services 工作流进行了定制,另一个针对创建 SharePoint Server 工作流进行了定制。

Windows SharePoint Services 工作流项目模板包含对 Windows SharePoint 命名空间的引用,并包含专为 Windows SharePoint Services 环境设计的自定义工作流活动。这些自定义活动使您能够执行 Windows SharePoint Services 环境中常见的功能,例如创建、更新、完成和删除 SharePoint 任务,发送电子邮件,以及启用工作流修改。

SharePoint Server 工作流项目包含 Windows SharePoint Services 工作流项目模板的所有内容,以及对 SharePoint Server 命名空间的引用,以及用于管理 SharePoint Server 工作环境中的工作流任务的其他功能。

Visual Studio 中的工作流开发流程

通常,当您使用用于 Windows Workflow Foundation 的 Visual Studio 2008 设计器为 Windows SharePoint Services 或 Office SharePoint Server 开发工作流时,您会遵循以下基本步骤:

  1. 在 Visual Studio 2008 Designer for Windows Workflow Foundation 中编写您的工作流,包括代码隐藏文件(如果需要)。
  2. 设计并发布您想与工作流一起使用的任何表单。
  3. 编写功能定义和工作流模板定义文件,其中包含有关工作流程序集的信息,并将表单绑定到工作流程序集。
  4. 将工作流文件编译为 .NET 程序集。
  5. 使用 Windows SharePoint Services 中的功能功能打包工作流程序集和工作流定义,并进行部署。
  6. 使用 Visual Studio 2008 Designer for Windows Workflow Foundation 调试实时工作流程序集。
  7. 根据需要重新编译和部署工作流程序集以修复发现的任何错误。

以下各节将概述这些开发步骤的每个步骤。

使用 Visual Studio 2008 Designer for Windows Workflow Foundation 创建工作流

当您选择新的 Windows SharePoint Services 或 Office SharePoint Server 工作流项目时,Visual Studio 会显示 Visual Studio 2008 Designer for Windows Workflow Foundation 设计器(图 1)。此设计器提供了一个图形界面,您可以在其中通过从工具箱拖放各种活动来组装工作流。

图 1. Visual Studio 2008 Designer for Windows Workflow Foundation 界面

当您将特定活动拖到工作流中时,Visual Studio 2008 Designer for Windows Workflow Foundation 会显示该活动在工作流中的有效位置。您不能将活动放置在无效位置。例如,您不能将 Send 活动作为 Listen 活动分支中的第一个活动。如图 2 所示,Visual Studio 2008 Designer for Windows Workflow Foundation 会显示绿色的加号图标来表示特定活动的有效位置。

图 2. 工作流活动的有效位置

当您以图形方式设计工作流时,Visual Studio 2008 Designer for Windows Workflow Foundation 实际上会生成相应的标记。

此外,如果您使用代码分离,您的工作流项目将包含一个代码隐藏文件,您可以在其中编写工作流的业务逻辑。您可以随时在工作流设计器和代码隐藏文件之间切换。

设置工作流属性

在将活动添加到工作流后,您必须设置活动的属性才能使其在工作流中有效。您可以使用标准的 Visual Studio 属性窗口来设置这些属性。您可以指定的数据类型取决于属性本身接受的数据类型:字面值、变量或方法名。

如果要为属性指定变量,您可以在属性窗口中输入变量名,这样 Visual Studio 2008 Designer for Windows Workflow Foundation 就会自动在代码隐藏文件中声明该变量;或者在代码隐藏文件中声明变量,然后在属性窗口中选择它。

某些活动属性本质上是对代码隐藏文件中符合特定签名的引用的方法。与变量名一样,您可以在属性窗口中输入方法名,让 Visual Studio 2008 Designer for Windows Workflow Foundation 将方法签名添加到代码隐藏文件中;或者您可以在代码隐藏文件中创建方法,然后在属性窗口中选择该方法。

您还可以将属性绑定到另一个活动的属性。

处理程序活动

工作流可能存在几个潜在的故障点。跟踪工作流的状态并报告发生的错误很重要,这样您就可以以最小的努力准确地解决问题。同样重要的是,工作流应维护一组密切相关的操作的完整性,以便如果一个操作的一部分发生而另一部分未发生,则整个操作都可以回滚。您可以使用 FaultHandlerActivityTransactionScopeActivityCompensationHandlerActivityCancellationHandlersActivity 活动来处理错误、维护工作流状态以及在问题发生时修复它们。

您可以将 FaultHandlersActivity 活动视为 C 语言的 try 块,您可以将一组有序的 FaultHandlerActivity 活动附加到它,这些活动充当异常处理程序。这些异常处理程序可以被认为是 C 语言的 catch 块。如果在复合活动执行期间抛出异常,WF 运行时引擎会将异常与 FaultHandlerActivity 活动处理的异常类型进行匹配。如果运行时引擎找不到匹配的异常处理程序,它会将异常传递给上一级复合活动,在此重复该过程,依此类推,直到找到合适的处理程序。

您还可以使用 EventHandlersActivity 活动通过向 EventHandlerScopeActivity 活动添加事件处理程序来响应事件。从概念上讲,这些事件处理程序与 C 或 Visual Basic .NET 语言中的事件处理程序非常相似。要创建事件处理程序,您必须使用 EventDrivenActivity 活动。

CompensationHandlerActivity 活动包含用于补偿或回滚复合活动操作的代码,以防其未能成功执行。

Windows SharePoint Services 工作流中的 ASP.NET 表单

如前所述,您可以使用 ASP.NET 来创建 Windows SharePoint Services 工作流使用的表单。这些表单然后在 Windows SharePoint Services 用户界面中显示,并在工作流的适当阶段。

工作流表单通过您在工作流模板定义 XML 文件中提供的信息进行晚期绑定到工作流程序集。工作流模板定义架构包含用于指定您可以在 Windows SharePoint Services 工作流中使用的数据的各种表单的 URL 的元素。这提供了创建表单元素的能力,用于任何自定义工作流修改,以及用于工作流中使用的各种 SharePoint 任务的表单。

在大多数情况下,工作流程序集本身不包含有关工作流表单的信息或链接。开发人员可以通过编辑工作流定义 XML 来更改要使用的工作流表单,而无需重新编译工作流程序集本身。唯一的例外是工作流修改;每个启用工作流修改的活动都必须包含该工作流修改的表单的 GUID。

部署工作流

完成工作流指定后,您可以选择将工作流编译为工作流或活动。

编译工作流后,您可以使用 SharePoint 功能来打包和部署工作流程序集和任何必需的支持文件。

功能打包是一种封装 Windows SharePoint Services 解决方案和功能以方便部署的方式。它提供了一种机制,开发人员可以通过该机制打包解决方案所需的文件(例如工作流、Web 部件、列表和站点定义),以便于分发和部署。开发人员将所需文件打包到一个 .wsp 文件中,该文件本质上是一个 .cab 文件,其中包含一个列出其内容的清单。有关 SharePoint 功能的更多信息,请参阅 Microsoft Windows SharePoint Services 3.0 SDK。

您部署的每个工作流模板都必须包含一个工作流模板定义文件。工作流模板定义是一个 XML 文件,其中包含 Windows SharePoint Services 运行和实例化工作流所需的信息,例如:

  • 工作流模板的名称、GUID 和描述
  • 程序集
  • 此工作流模板使用的任何自定义表单的 URL(或 IP 表单的 URN)
  • 可选地,运行工作流时要使用的工作流、工作流引擎和宿主服务程序集的名称
  • 可选地,要调用的那些程序集中的正确类

工作流程序集本身必须部署到全局程序集缓存。

部署到站点后,工作流将作为工作流模板可用,SharePoint 管理员可以将其与该站点上的文档库和列表关联。

调试工作流

部署工作流程序集后,您可以通过打开工作流项目并附加到 Windows SharePoint Service w3wp 进程来调试工作流。

由于 Visual Studio 2008 Designer for Windows Workflow Foundation 托管在 Visual Studio 中,因此您可以充分利用 Visual Studio 的调试功能。您可以在代码隐藏文件中编写的代码以及设计器中的工作流活动上设置断点。

Visual Studio 2008 Designer for Windows Workflow Foundation 不仅支持断点和调用堆栈窗口等标准的 Visual Studio 调试功能,还提供了一系列可视化指示器,可在调试过程中提供信息。您还可以在调试程序集时将断点添加到工作流活动。

您可以执行单步进入、单步跳出和单步跳过操作来遍历工作流代码。


其他资源和参考

面向 Windows SharePoint Services 3.0 和 SharePoint Server 2007 的工作流开发人员入门

© . All rights reserved.