打包列表、网站和可重复使用工作流以及如何部署程序包
原文发布于 2012 年 8 月 30 日(星期四)
大家好,我是 JongHwa Lim,SharePoint Designer(亦称 SPD)团队的一名项目经理。
今天我想介绍一种功能,该功能自 SharePoint Designer 2010 和 SharePoint Server 2010 之后得到了很大的增强。它就是工作流打包功能。在 SharePoint Designer 2010 中,用户使用此功能的一个非常常见的应用场景就是,在开发环境中开发了一个工作流,然后将其部署到生产环境。然而,坏消息是 SharePoint Designer 2010 中仅可重复使用工作流类型才支持这种操作。
在 SharePoint Designer 2013 中,配合 SharePoint Server 2013 和 Azure 工作流服务,我们现在支持所有三种工作流类型 – 列表工作流、网站工作流和可重复使用工作流。这是一项重要的改进。意味着您不必仅局限于可重复使用工作流,过去出于此目的需要将列表工作流转换为可重复使用工作流的历史已经一去不复返了。
举个例子将有助于您对于本文的理解。我将构建一个示例工作流并演示如何在目标网站中对其进行重复使用。
示例:Vacation Request 列表工作流
假定您打算在开发环境中创建一个列表工作流。该工作流具有两个列表 – Vacation 列表和 Vacation Request 列表。Vacation 列表保存所有员工剩余假期的天数,而 Vacation Request 列表是请求者创建请求项目以请求批准假期的地方。
创建所需列表(开发环境)
正如前面所说的,我们需要两个列表,所以我创建了下面两个列表。请注意,我们为“Task List”和“History List”使用默认设置。
在 Vacation Request 列表上创建列表工作流
既然您已准备好了所需的列表,请使用 SPD 连接到服务器,单击“列表工作流”,然后选择“Vacation Request”列表。您将会看到下面的对话框,确保在键入工作流名称后选择“SharePoint 2013 工作流”(SharePoint 2013 Workflow) 类型。
填写逻辑并发布工作流
在 SPD 画布中,可以选择基于文本的设计器,或者如果安装了 Visio Professional,可以选择可视设计器编写工作流。在本文中,我将使用基于文本的设计器,但是如果您有兴趣使用可视设计器,请参阅另一篇很快就会发布的有关可视设计器的博客文章。
请添加以下逻辑。总的来说,此过程非常简单,只有少许几个地方可能有些难度。它包括五个阶段。每个阶段的标题都表明了其用途,但为进行详细阐述,我在下面一一介绍它们:
- “检查剩余假期是否存在”阶段 – 获取申请者剩余假期天数并将其与请求的假期天数比较
- “批准过程”阶段 – 请求假期天数的请求批准
- “已批准”阶段 – 批准后,使用新的计算值更新 Vacation 列表
- “已拒绝”阶段 – 发送拒绝邮件
- “假期不足”阶段 – 发送剩余假期天数不足的邮件
有难度的部分是这些查询 UI 从 Vacation 列表获取剩余假期天数或更新 Vacation 列表。
如果需要,可以选择打开“项目创建时自动启动”选项。
发布工作流时会创建工作流关联,并隐藏状态列。
将列表打包成 STP 程序包
有多种方法可以确保目标服务器具有必需的列表和架构,但是利用 STP 程序包是一个不错的做法。所以让我们将 Vacation 列表和 Vacation Request 列表打包成 STP 程序包。
您可以通过服务器 UI 或 SPD UI 执行此过程,如下所示。
然后,您将看到下面的屏幕,其中可以键入名称,另外还可以选择打包内容。
请注意,不管是否选择“包括内容”(Include Content),都不会一起打包 SharePoint 2013 列表工作流。
如果成功,它会将您指引到一个可以下载该程序包的位置。
单击链接并下载该程序包以供日后使用。
如果成功,您现在一定有两个 STP 程序包了,一个程序包用于 Vacation Request 列表而另外一个用于 Vacations 列表(包含剩余假期天数的列表)。
将工作流打包成 WSP 程序包
若要打包列表工作流,请转至工作流摘要页面并单击功能区中的“另存为模板”(Save as Template) 按钮。
随即显示下面的对话框。
您可以在导航窗格中找到“网站资产”(Site Assets) 库,并可以在其中找到列表工作流程序包。(可能需要刷新页面才能看到程序包。)
使用“导出文件”(Export File) 功能区按钮将其保存至本地计算机。
部署 STP 程序包
在浏览器中打开目标网站(或生产环境),然后转至“网站设置”。您可以在“Web 设计器库”(Web Designer Galleries) 组下找到“列表模板”(List templates) 菜单。
使用“文件”(Files) 菜单下的“上载文档”,上载两个 STP 程序包。
使用部署的列表模板创建列表
您可以从部署的列表模板创建两个列表。在服务器的导航菜单中转至“网站内容”,单击“添加应用程序”。您应该能够找到“Vacation”和“Vacation Request”图标。
使用那些菜单创建“Vacation”和“Vacation Request”列表。
部署 WSP 程序包并激活程序包
部署 WSP 程序包与部署 STP 列表模板略有不同。必须将其上载至“网站设置”的“Web 设计器库”(Web Designer Galleries) 组下的“解决方案”(Solutions) 库。
然后,您将会看到一个对话框,需要在其中激活程序包(解决方案)。
激活功能
激活解决方案后,您将看到“网站设置”的“网站操作”(Site Actions) 下,“管理网站功能”(Manage site features) 中出现新的网站功能。
就是这个。您可以按打包时使用的名称找到此工作流。单击“激活”(Activate) 按钮并等待按钮变为“停用”或显示“激活”图标,这意味着该功能已激活。
(可选)从 SPD 打开工作流
有时您可能想要更新目标网站的工作流。没问题,这与开发环境完全一样。您可以发现已部署的工作流正确显示在 SPD 中。
并且打开它时,不会出现任何问题。您可以看到摘要页面中的值保持不变。当然,同时也保留了逻辑。
(可选)运行工作流
从服务器运行工作流后,您可能会发现有两列的名称相同(工作流状态列)。这是一个已知问题。一列来自源服务器(在 STP 中打包)而另一列则在目标网站创建。请更新列表视图以隐藏较旧的一列。
使用 STP 程序包的替代方法是什么?
只要目标网站具有必需的列表,就能正确部署该解决方案 – 工作流逻辑中使用的列表,以及工作流任务和工作流历史记录列表。但是最好使用相同的列表模板和相同的字段类型创建工作流中引用的列表和列表列。如果存在类型不匹配,那么可能会出现程序包在功能激活期间失败,或者工作流在运行时失败。
如果将工作流程序包部署到不存在“Vacation”或“Vacation Request”列表的网站,会发生什么情况?
网站功能激活将失败。
该错误消息不是非常详细,但是如果查看 ULS 日志,可以找到诸如以下的信息:
“工作流 XAML 验证失败,原因如下:无法从文本 '$ListId:Lists/Vacation; 创建‘ListId’”
但是功能激活失败后,即使在创建必需的列表后,重新激活功能也可能再次失败。这是因为工作流定义部署不完整。需要执行以下操作:
- 打开 SPD 并删除功能激活期间失败的工作流定义
- 停用解决方案并删除解决方案
- 上载解决方案并激活解决方案
- 激活网站功能
这应该能解决问题。
已知问题
工作流程序包存在一些已知问题。
- 您需要确保相关的列表 url(例如“Lists/Vacation”)相同。即使使用指定的名称创建列表,随后又将其更改为其他名称,列表 url 也不会发生改变,这是因为它由原始显示名称决定。因此,即使根据列表更新的名称打包工作流,工作流也依然在目标网站上根据以前的名称查找列表 url。因此,在目标网站中重新创建列表时,必须确保最初赋予列表原始名称,而非更新的名称。这样将保留列表 url。创建列表后,可以将列表的名称更改为更新的名称。
- 采用 Unicode 或 DBCS 名称的工作流将打包成 wsp 文件,并采用默认的硬编码名称“WorkflowSolution.wsp”
- 转至“网站资产”(Site Assets) 以查看更新的解决方案列表后,需要手动刷新页面。
- 如果目标服务器不具有工作流任务列表和工作流历史记录列表,那么从“工作流设置”(Workflow Settings) 页面单击工作流时会显示下面的错误。当将工作流部署到从未创建过工作流的目标服务器时会发生这种情况。要解决此问题,可以从 SPD 创建并发布一个虚拟工作流以创建工作流任务列表和工作流历史记录列表。然后可以从 SPD 打开部署的工作流,调整工作流任务列表和工作流历史记录列表设置,然后重新发布工作流。
- 项目工作流会像常规网站工作流那样打包。但是为了保证其正常运行,则还需要打包诸如 EPT、阶段、自定义列等项目实体。请参阅项目团队提供的项目工作流指导方针。
谢谢!
JongHwa
这是一篇本地化的博客文章。请访问 Packaging List, Site, and Reusable Workflow and How to Deploy the Package 以查看原文