如何:在沙盒解决方案中创建和部署声明性工作流

本主题介绍如何在沙盒解决方案中部署声明性工作流,有时也称为"无代码"工作流。

上次修改时间: 2011年4月13日

适用范围: SharePoint Foundation 2010

在 SharePoint Online 中提供

声明性工作流是在 Microsoft SharePoint Designer 中创建的,并保存为一个或多个 XOML 文件而不是编译的 C# 或 Microsoft Visual Basic 代码。然后,该工作流会以 SharePoint 解决方案包(.wsp 文件)的形式保存到网站的"网站资产"库中,可以下载该解决方案包,然后将其作为沙盒解决方案安装到任何网站集中。运行时,会将 XOML 标记转换为代码,并对其进行编译和执行。对于声明性工作流,请考虑以下几点:

  • 在 SharePoint Designer 中只能创建顺序工作流,不能创建状态机工作流。

  • 在 SharePoint Designer 中,只有可重用工作流可以另存为沙盒解决方案,列表工作流或网站工作流则不可以。

  • 不能将在 SharePoint Designer 使用 SharePoint Server 2010 场中的网站时创建的声明性工作流部署到 SharePoint Foundation 场中的网站集。

  • 发布为全局可重用工作流的工作流不能在 SharePoint Designer 中直接另存为沙盒解决方案。但是,可将其复制为非全局工作流,然后将其另存为沙盒解决方案。有关详细信息,请参阅以下各节。

  • 可将从"网站资产"库下载的声明性工作流导入 Microsoft Visual Studio,并在将此工作流安装为沙盒解决方案之前对其进行修改;但是该过程有些细微差别。有关详细信息,请参阅以下各节。

在 SharePoint Designer 中创建声明性工作流

  1. 在您的开发环境中,确保有一个包含所有实体的网站,这些实体的存在性由工作流(例如列表和内容类型)预先假设。

  2. 在浏览器中导航到网站,在"网站操作"菜单上选择"在 SharePoint Designer 中编辑"。SharePoint Designer 将启动。

  3. 在导航窗格中,单击"工作流"。

  4. 在功能区中单击"可重用工作流"。在打开的对话框中,为其指定合适的名称和说明,然后单击"确定"。

  5. 如同只在当前网站中使用一样创建工作流。将其打包为可部署到其他网站集的沙盒解决方案这一事实不会影响工作流的创建方式。

  6. 建议:完成工作流后,保存此工作流,然后单击功能区上的"发布"(不是"全局发布")。在网站上测试此工作流并根据需要对其进行重新编辑。

将工作流打包为 SharePoint 解决方案

  1. 当工作流完成时,在 SharePoint Designer 中打开它的"工作流设置"视图。(如果您处于编辑模式,请单击功能区上的"工作流设置"。)

  2. 在功能区上,单击"另存为模板"。工作流将作为 SharePoint 解决方案包(.wsp 文件)保存到网站的"网站资产"库中。

    备注

    如果要打包已在 SharePoint Designer 中全局发布的工作流,"另存为模板"按钮将被禁用。若要打包工作流,必须先复制此工作流。

    1. 在 SharePoint Designer 的导航窗格的"全局可重用工作流"节点中,右键单击工作流,然后选择"复制并修改"。

    2. 在打开的对话框中,为工作流指定合适的名称,然后单击"确定"。

    3. 在功能区上单击"保存"。新工作流将自动创建为可另存为模板的非全局工作流。

在 Visual Studio 中修改工作流(可选)

  1. 从"网站资产"库中下载工作流的解决方案包。

  2. 在 Visual Studio 中,使用"导入 SharePoint 解决方案包"模板启动项目。请勿使用"导入可重用工作流"模板。此模板会自动将声明性工作流转换为编码工作流,并且不能将其部署为沙盒解决方案。

    备注

    对于How to: Import and Package a Declarative Workflow in Visual Studio中所述的此过程的其余步骤,可以使用替代执行方法。该替代方法的优点是:当项目中的功能设置为"网站"范围时,在网站集的功能库中激活该功能将使其可供网站集中的每个网站使用,而不需要在要使用该功能的每个网站中分别激活它。该替代方法的缺点是:只能将生成的解决方案包(.wsp 文件)安装到 Microsoft SharePoint Server 网站集中,而不能安装到 SharePoint Foundation 网站集中。本过程的步骤会生成一个可以部署到任何 SharePoint 网站集的包,但必须在要使用功能的每个网站中分别激活此功能。

  3. 在"SharePoint 自定义向导"中,指定用于调试的任何本地网站。它不一定是创建工作流时 SharePoint Designer 所使用的网站。

  4. 选择"沙盒"解决方案,然后单击"下一步"。

  5. 在下一个向导页上,输入您在步骤 1 中下载的解决方案包的路径,然后单击"下一步"。

  6. 在下一个向导页上,保留选中所有项目(默认设置),然后单击"完成"。当在 Visual Studio 中打开项目时,您会看到没有 C# 或 Visual Basic 代码文件。而是用 .xoml 文件定义了工作流。您还会看到,Visual Studio 已为项目创建了一项功能。

  7. 在"解决方案资源管理器"中,双击 *.feature 文件以打开"功能设计器",并将功能的范围设置为"Web"。

    备注

    唯一可能的其他范围是"网站"。但如果选择"网站",则只能在网站集的根网站中激活工作流功能,这样,将无法在任何子网站中使用工作流。范围"Web"使得该功能可在网站集中每个网站的功能库中使用,包括根网站。必须在要使用该功能的每个网站中分别激活它。

  8. 添加要与工作流一起打包和部署的元素。(确保只包括可在沙盒解决方案中部署的元素。)例如,如果工作流假定存在某一自定义内容类型,并且您要向其中部署该工作流的网站集不具有该内容类型,则应考虑在 Visual Studio 项目中添加该内容类型。

  9. 在"解决方案资源管理器"中,打开 *.oxml.wfconfig.xml 文件。

  10. 验证 Template 元素的 Visibility 属性的值是否为"Public"。如果不是,请将其值更改为"Public"。

    备注

    SharePoint Designer 必须始终使用某些特定网站,即使您使用它创建计划部署到其他网站的可重用工作流时也是如此。在 SharePoint Designer 中开发工作流期间,如果您在任何时候单击了"发布"按钮(如同您执行上面的在 SharePoint Designer 中创建声明性工作流过程中推荐的步骤 6 一样),Template 元素的 Visibility 属性将获取值"Public"。但是,如果您在将工作流保存为模板之前 发布它,Template 元素的 Visibility 属性会获取值"DraftPublic"。必须将此值更改为"Public",然后才能在 Visual Studio 中重新打包解决方案。

  11. 在"解决方案资源管理器"中,打开"PropertyBags"文件夹中的 elements.xml 文件。

  12. 滚动到其 Url 属性指向 .xoml.config.xml 文件的 PropertyBags 元素,然后验证 NoCodeVisibility 属性的值是否为"Public"。如果不是,请将其更改为"Public"。

  13. 您可以选择编辑 .xoml 文件,但务必注意以下几点:

    • 如果在"解决方案资源管理器"中双击 .xoml 文件,将会打开 Visual Studio"工作流设计器"。*您不能使用此设计器。*SharePoint Designer 与 Visual Studio"工作流设计器"之间有些不兼容。(实际上,如果在"工作流设计器"中打开此文件,您可能会在设计界面的元素中看到错误符号,即红色圆圈中有一个白色感叹号。)必须右键单击 .xoml 文件并在"打开方式"对话框中选择 XML 编辑器或文本编辑器。

    • 编辑 .xoml 文件是一个容易出错的过程。仅当要进行 SharePoint Designer 中无法进行的更改时,才应这么做。

  14. 当项目完成时,请在"生成"菜单上单击"部署",并测试解决方案。

将工作流部署到网站集

  1. 当您准备分发解决方案时,请为网站集管理员提供最终的解决方案包(.wsp 文件)。

    备注

    如果工作流认为存在未随解决方案本身部署的实体(例如内容类型、列表类型和列表实例),则必须使网站集管理员知道这些实体。

  2. 沙盒解决方案由网站集管理员安装和部署,网站集管理员会将该解决方案安装到网站集的解决方案库中。此过程包括以下两个步骤:

    1. 网站集管理员将解决方案包上载到库中。

    2. 网站集管理员部署此包,此过程对沙盒解决方案而言称为"激活"。此步骤自动激活包中的所有功能。如果向网站集注册了任何解决方案验证程序,则还会在激活(部署)阶段执行这些验证程序。

    如果解决方案通过验证并且未被服务器场管理员阻止,则可随时在网站集中使用它。

请参阅

概念

可以在沙盒解决方案中实现哪些内容

沙盒解决方案的限制

沙盒解决方案体系结构