使用 SharePoint 的工作流互操作

提供了对在 Visual Studio 2008 工作流设计器中使用 SharePoint 工作流互操作的讨论。工作流互操作可让您调用 SharePoint 工作流中的 SharePoint 2010 工作流。这是一项重要功能,它使您能够重新使用现有工作流功能,并调用未集成到 SharePoint 中的工作流活动。

备注

自 2020 年 8 月 1 日起,SharePoint 2010 工作流已对新租户停用,并于 2020 年 11 月 1 日从现有租户中删除。 如果你使用的是 SharePoint 2010 工作流,我们建议迁移到 Power Automate 或其他支持的解决方案。 有关详细信息,请参阅 Microsoft Power Automate 和 SharePoint 2010 工作流停用

重要

若要了解如何在 SharePoint Designer 2013 SharePoint工作流互操作功能,请参阅了解 SharePoint Designer 2013 中的协调操作

SharePoint 工作流互操作

这里有一个问题。您想将旧的 SharePoint 2010 工作流在您的 SharePoint 平台上重复使用。或者,更糟糕的是,您正在创建新的 SharePoint 工作流,需要调用仅在 SharePoint 2010 平台中可用的活动。您不知道要如何执行操作。实际上,解决方案非常简单:使用 SharePoint 工作流互操作。

SharePoint 工作流互操作使(基于 Windows Workflow Foundation 3 构建的)SharePoint 2010 工作流可平稳地与 SharePoint 工作流引擎(基于 Windows Workflow Foundation 4)协同工作。虽然新的 Windows Workflow Foundation 4 执行引擎托管在以外部服务形式运行的 工作流管理器 中,但 SharePoint 中仍然包含用于处理 SharePoint 2010 工作流的旧的 SharePoint 工作流主机。SharePoint 工作流互操作在两种执行环境之间进行权衡,如图 1 所示。

图 1. 操作中的 SharePoint 工作流互操作

工作流互操作桥梁

我们来看一下图 1 中描述的过程。使用字母来列出图示中强调的要点:

( A ) SharePoint 工作流的一个实例开始在基于 Windows Workflow Foundation 4 的工作流管理器中运行。请注意,该工作流管理器不在 SharePoint 中,而是作为一个外部服务在运行。

( B ) 您进行到了 SharePoint 工作流中的一个要点(工作流管理器中的第 3 步),此处您想要调用 SharePoint 2010 工作流。在 Visual Studio 2008 工作流设计器中,您通过实现 Start 2010 WF 活动来实现这一目的,如图 2 所示。

图 2. 启动 SharePoint 2010 工作流的各阶段图块。

启动 2010 工作流

从 SharePoint 对象模型的角度来看,这是使用 WorkflowInteropService 类的 StartWorkflow 方法完成的。

( C ) 在这种情况下,SharePoint 2010 工作流在 SharePoint 内部的 Windows Workflow Foundation 3.5 工作流主机中开始执行。但需要考虑一个重要事项。在某些情况下,您可能需要让 2013 工作流等待 2010 工作流完成运行(还可能是返回一些数据),然后再继续执行 2013 工作流。在其他情况下,这可能不是必要的,因为这两个工作流可以以并行方式独立运行。

To control this behavior, the WorkflowInterop class, which controls executing workflows in the Windows Workflow Foundation 3.5 workflow host, provides a Wait property. Setting this Boolean property to " Yes" (in the designer dialog box) or to true in the on the Wait property, causes the 2013 workflow to pause until the 2010 finished executing and returns a completed message.

图 3. 启动“工作流属性”对话框。

对启动工作流活动设置属性

( D ) The practical effect of selecting true or false on the Wait property (or Yes or No in the properties dialog box) is depicted here. If Wait is true, then the 2010 workflow passes a WorkflowCompleted event (and, optionally, returns data as a DynamicValue property). For more information about dynamic values, see Understanding Dynamic Value.

当然,如果将 Wait 设置为 false,2010 工作流将执行,然后正常终止。

( E ) 只有当您对 2010 工作流的调用指定了 Wait=true 时,此步骤才有意义。在这种情况下,您的 2013 工作流接收 WorkflowCompleted 事件并在停止点重新启动 2013 工作流的执行。

( F ) 然后,您的 2013 工作流会正常完成执行并终止。如果是 Wait=false,则您的 2013 工作流将独立于 2010 工作流来执行并终止。

工作流互操作设计

SharePoint 工作流互操作是在 WF 3 和 WF 4 工作流活动之间支持一对一实例映射的消息框架。WF 3 和 WF 4 通过互发一些由 WorkflowInteropService 上的一组 WF 4 活动打包的消息进行互操作。

To support workflow interop, the workflow design surface in SharePoint Designer provides access to a new workflow activity, Start 2010 WF, which is a wrapper on the StartWorkflow method. This activity allows you to start either a list workflow or a site workflow.

活动实际上是在工作流管理器和运行在 SharePoint 中的 SharePoint 2010 工作流主机之间执行的消息顺序。这两者都经过消息处理层的协调,如图 4 所示。该顺序从在 SharePoint 工作流管理器中调用 StartWorkflow 方法时开始。"开始"消息将转到 SharePoint 中的工作流服务,反过来,将启动 SharePoint 2010 工作流主机中的工作流。2010 工作流执行完成后,将触发一个事件,该事件通过事件发布程序将"已完成"消息发送回 2013 工作流管理器。

图 4. SharePoint 工作流互操作消息协议

工作流互操作消息

另请参阅