如何从 SharePoint 2013 工作流触发 SharePoint 2010 工作流

原文发布于 2012 年 8 月 18 日(星期六)

 

大家好!

我是 Chong Youn (John) Choe,SharePoint Designer 团队的项目经理。SharePoint 和 SharePoint Designer 2013 Beta 2 现已公布发布,我们产品组的成员很乐意与您分享一些补充性文章。

本文将解释为什么要允许调用旧式工作流以及如何使用它。

背景

首先,此功能预计将大大增强 SPD 工作流的可重复使用性。用户将能够在 SharePoint 网站上建立高度可重复使用的工作流,像利用脚本或函数那样利用工作流。

SharePoint 2013 工作流的功能无法完全取代 SharePoint 2010 操作的所有功能,因为 SharePoint 2013 基于不同的平台并已根据该平台重建。工作流产品团队将精力放在让新功能实现新的、更丰富的最终用户应用场景上,同时根据用户反馈,放弃了一些不常用的功能。

不过,工作流产品团队仍希望覆盖所有现有应用场景。因此,“启动工作流”操作已设计为允许最终用户通过启用从 SharePoint 2013 工作流到 SharePoint 2010 工作流的工作流间调用来合并 SharePoint 2013 和 SharePoint 2010。这是为当前 SPD 用户提供迁移路径的唯一省钱的办法。

工作流可以分为 3 类:列表工作流、可重复使用的工作流以及网站工作流。有关详细信息,请参阅博文。可重复使用的工作流在关联时采用输入参数,可以在列表和列表项上触发,就好像以后它会是个列表工作流。若要启动工作流,SharePoint 2010 工作流应准备好在被调用时运行,这意味着如果它是一个可重复使用的工作流,则必须已经关联。今后,这些工作流受单个操作“启动列表工作流”支持,该操作接收 3 个参数:待触发的 SharePoint 2010 关联工作流、启动窗体参数和关联工作流将在其上运行的目标项目。相反,网站工作流不需要在其上运行的项目,所以依赖另一个操作“启动网站工作流”,该操作接收 2 个参数:待触发的 SharePoint 2010 网站工作流和启动窗体参数。

最后一点同等重要,如果您想知道这背后的秘密,可以从以下位置找到“工作流互操作桥”:https://msdn.microsoft.com/zh-cn/library/sharepoint/jj163181(office.15)(该链接可能指向英文页面)

 

示例应用场景

现在,您已了解了概念,我们接下来谈谈如何以及何时使用这些操作。下面是一个示例应用场景和分步说明。

假定 SharePoint 2010 网站中已使用了一个“预算审批”(Budget Approval) 工作流。IT 管理员决定将 SharePoint 2010 升级到 SharePoint 2013,现有的 SharePoint 2010 工作流随后被迁移到新的网站(注:这并不意味着工作流已升级为 SharePoint 2013 工作流。这些工作流还是 SharePoint 2010 工作流)。“预算审批”(Budget Approval) 工作流用于从财务或人力资源部门请求预算,采用 4 个参数作为输入:“请求的预算”(Budget requested) 为请求的钱数,“说明”(Explanation) 描述需要钱的原因,“请求批准截止日期”(Requested approval due date) 为答复截止日期,“参照”(Reference) 指向任何相关信息。

假设您想使用“预算审批”(Budget Approval) 工作流作为新的工作流的一部分,过去,您必须创建一个新的工作流,在新框架中重写工作流。而如果您想合并 2013 工作流新推出的功能以及“预算审批”(Budget Approval) 工作流,则可能无法将它全写入一个工作流。

在这种情况下,“启动工作流”操作就是一个完美的解决方案。假设“预算审批”(Budget Approval) 工作流是“Contoso 财务”(Contoso finance) 列表下的一个列表工作流,Contoso 的财务流程通过工作流自动执行。

 

设计步骤

 

1. 如果待触发的目标工作流是列表工作流或与列表关联的可重复使用的工作流,则插入“启动列表工作流”(Start a List Workflow) 操作。

clip_image001

 

2. 插入操作后,需要先选择工作流或关联,方法是单击“SharePoint 2010 列表工作流”(SharePoint 2010 list workflow) 链接。

clip_image002

 

3. 查找目标工作流所在的列表,依次选择工作流。

图像

 

4. 单击“确定”(OK) 关闭上面的对话框。接着,单击在“启动列表工作流”操作句子中找到的“参数”(parameters) 链接。然后,SharePoint Designer 2013 将分析工作流,显示启动参数及其预定义的值。

图像

对话框中将显示每个不同参数的额外“类型”(Type) 信息。这是因为,SharePoint 2013 工作流的作者可能与 SharePoint 2010 工作流的作者不同,我们想为 SharePoint 2013 工作流的作者提供足够的信息,以便设置启动窗体参数值而不用查找被调用的工作流。

 

5. 您可以在设计时设置每个参数的值,可以在这里选择查找值,值实际上在运行时设置。这样,可以非常灵活地使用 SharePoint 2013 工作流调用和被调用的 SharePoint 2010 工作流来设计一个集成过程。
对话框中还给出了限制,因此您不需要事先了解参数的信息。

图像

 

6. 当然,您也可以直接在文本编辑器中键入值来设置值。注意对话框和其功能因参数类型而异。

图像

图像

 

7. 当您按“...”时,会弹出填充的参数类型的相应设计器类型,指导您输入值。当单击“Fx”按钮时,将显示标准查找对话框。

图像

图像

 

8. 所有的参数均设置完毕后,关闭“设置启动参数的值”(Set Values for Initiation Parameters) 对话框。参数集的数目将直接显示在操作句子上。

图像

图像

 

9. 接下来,选择目标工作流将在其上运行的项目。通常,需要在“当前项目”上运行此过程,这意味着调用工作流和被调用工作流将执行,并在同一项目上留下日志和结果。为支持一般情况,应为“此项”(this item) 参数选择“当前项目”(Current Item)。

图像

 

大功告成!调用一个 SharePoint 2010 工作流就像添加一个操作句子和设置相应值那么简单。其实,该过程类似于最终用户在 SharePoint 服务器上触发 SharePoint 2010 工作流的行为。选择一个列表、项目和关联的工作流,填写启动窗体。SharePoint 服务器上的最终用户步骤如下。

clip_image021

图像

图像

 

另一大特色是可以在 SharePoint 2013 工作流调用内部使用被调用工作流的变量的值。通过使用查找对话框,这些变量将在 SharePoint 2013 工作流中可用。

我会用一个示例应用场景来进一步解释这一点。

一家公司声明了一项新政策,工作流设计人员需要向预算审批流程的参与者发送通知电子邮件以便审查这一新政策。

 

10. 添加“发送电子邮件”(Send an email) 操作将电子邮件发送给预算审批的参与者。

图像

 

11. 若要查找 SharePoint 2010 工作流的变量,请为“收件人”(To) 控件选择“工作流查找用户”(Workflow Lookup for a User)。

图像

 

12. 插入“启动列表/网站工作流”操作并选择 SharePoint 2010 工作流后,会自动生成新的数据源。数据源的名称中包含静态文本“SharePoint 2010 输出”(SharePoint 2010 Output) 和工作流的名称。

图像

 

13. “预算审批”(Budget Approval) 的每个变量将显示在第 2 个下拉列表中:“来自源的字段”(Field from source)。选择所需变量,按“确定”(OK) 按钮在电子邮件对话框中设置“收件人”(To) 值。

图像

 

14. 用同样的方法填写“抄送”(CC) 部分。注意,变量由创建 SharePoint 2010 工作流的人手动创建。在其余字段中填写所需的值。

图像

图像

 

我希望您现在明白了如何更好地使用来自 SharePoint 2010 工作流的返回值。

前面的示例显示如何使用“启动工作流”操作来调用旧式工作流。然而,可以扩展这一概念,使用同一操作将额外功能添加到 SharePoint 2013 工作流中。例如,有一些操作只能在 SharePoint 2010 工作流中使用(如查找管理器操作),您可以使用“启动工作流”操作触发另一个工作流,以使用这些旧式操作和扩展功能。

一旦您掌握了“启动工作流”操作及其用法,就会发觉 SharePoint 2013 工作流和 SharePoint 2010 工作流没什么两样。

限制

将 SharePoint 2013 和 2010 工作流的优点完全结合起来还存在限制。

有些限制来自新平台的设计变化。例如“启动工作流”中不支持“工作分配阶段”类型参数,因为 SharePoint 2013 工作流不再支持这种参数类型。换句话说,如果必须使用“启动审批过程”,则需要使用 SharePoint 2010 工作流本身。

此外,任何您想要使用“启动工作流”操作链接到的工作流应驻留在一个网站中。但是,所有不同的工作流都在单独的页面上显示它们的工作流状态页面。

最后,关联至不同列表的调用工作流不能在 SharePoint 2013 工作流的当前项目上运行。理应如此,因为两个工作流将针对不同的列表运行。这样,如果在一个不同的列表上运行一个工作流,需要在目标工作流的列表中选择特定的项目来针对该项目运行工作流。

摘要

“启动工作流”操作会在运行时执行 SharePoint 2013 工作流期间触发一个 SharePoint 2010 工作流。根据被调用的工作流类型,有两种操作类型:“启动列表工作流”和“启动网站工作流”。

选择目标工作流并用固定值或动态值设置工作流的启动参数。此外,如果是“启动列表工作流”,还要选择工作流所属的列表和工作流将在其上运行的项目。

可以将这一操作放到 SharePoint 2013 工作流的任意位置,甚至调用多个 SharePoint 2010 工作流。可以重复使用现有 SharePoint 2010 工作流,无需重写其中的操作。将 SharePoint 2013 和 SharePoint 2010 工作流混搭使用是一个非常高效且方便的方法。

此外,通过查找对话框,调用 SharePoint 2013 工作流的逻辑可以使用来自被调用 SharePoint 2010 工作流的返回值。返回值包括所有局部变量,对于在同一个 SharePoint 2013 工作流中调用的任何 SharePoint 2010 工作流,还包括几个条件变量。

希望您能从本文中有所收获!

Chong Youn (John) Choe

这是一篇本地化的博客文章。请访问 How to trigger a SharePoint 2010 workflow from a SharePoint 2013 workflow 以查看原文