SharePoint 加载项更新过程

如果您要添加功能、修复 Bug 或进行安全更新,则必须更新 SharePoint 外接程序。 外接程序更新部署在 SharePoint 外接程序包中,其部署方式与部署外接程序的第一个版本相同。 SharePoint 外接程序更新过程确保在更新因任何原因失败时保留外接程序的数据。

重要

无法使用更新系统更改加载项类型。 例如,无法通过更新将加载项类型从 SharePoint 托管更改为提供商托管。 若要更改类型,需要从旧加载项迁移到新加载项。 特别是,由于自动托管加载项的预览计划已关闭,因此应注意无法将自动托管加载项更新为提供商托管加载项。 应按照将自动托管 SharePoint 加载项转换为提供商托管加载项中说明操作,转换加载项。

SharePoint 加载项更新过程

对于更新,在外接程序清单中使用原始版本中使用的同一产品 ID。 外接程序清单中的版本号应大于原始外接程序或最新更新的版本号。

将更新上载到组织外接程序目录后的 24 小时内,以及在将其上载到 Office 商店后的一周内,在每个安装了该应用程序的网站的"网站内容"页上,外接程序列表旁将显示更新可用的指示。 用户可单击链接更新外接程序,如图 1 所示。 可用更新还会在租户管理 UI 中显示。

图 1. SharePoint 加载项升级过程

在 UI 上更新应用的步骤

提示

开发更新时,并不希望每次将新版本上传到测试 SharePoint 加载项目录时都要等待 24 小时。 若要了解如何立即更新加载项,请参阅更新加载项无需等待 24 小时

默认情况下,SharePoint 会每 24 小时检查一次已安装加载项是否有更新。场管理员可以使用下面的 SharePoint 命令行管理程序命令(其中,n 是检查间隔小时数),将此频率设置为其他值:

Set-SPInternalAppStateUpdateInterval -AppStateSyncHours n

如果将此值设为 0,则会在每次执行内置计时器作业内部加载项状态更新时进行检查,默认为每小时执行一次。 使用管理中心,场管理员可以更改计时器作业的执行频率,也可以立即运行它。

如果用户安装 SharePoint 加载项更新,SharePoint 会执行以下操作。 这些事件并非一定会完全按照下列顺序发生,其中部分事件可能会并行发生。 此外,如果更新失败,还会执行完全回滚。

  • SharePoint 提示用户批准授予加载项请求的权限。

  • SharePoint 使外接程序对用户暂时不可用。

  • 如果外接程序包含 SharePoint 解决方案包 (.wsp),并且该解决方案包中的内容已通过任何方式更改,则 SharePoint 将执行下列操作:

    • 备份加载项 Web(但在 SharePoint Online 和本地 SharePoint 2016 及更高版本中,只有在更新导致列表架构发生变化时,才需要备份 SharePoint 列表中的实际数据)。

    • 测试对备份的更新。

    • 如果测试成功,更新原始加载项 Web。 请注意,加载项包中的新 .wsp 文件用于更新加载项 Web 中的功能和其他元素(功能架构的更新部分已在 SharePoint 中扩展)。

  • SharePoint 执行 UpgradedEventEndpoint Web 服务(如果已在加载项清单中注册的话)。

    注意

    若为提供商托管加载项,请为加载项的所有非 SharePoint 组件提供更新逻辑。 这些组件多半是与 SharePoint 加载项本身分开更新,就像这些组件是与加载项分开安装一样。 不过,一些更改可能只会在用户更新 SharePoint 加载项时才生效。 此逻辑可纳入 UpgradedEventEndpoint Web 服务或加载项本身的更新后首次运行逻辑。

  • SharePoint 让加载项及其组件再次可用。

注意

若要更改加载项 Web 中任何列表的架构,请将列表与加载项 Web 的其余部分一起备份。 若有大量列表数据,备份可能需要一段时间才能完成。 如果无法在一小时内完成更新过程,将会停止并回滚更新。

从旧加载项迁移到新加载项

在某些情况下,建议生成全新的加载项,从而替换旧加载项,而不是更新原始加载项。 虽然新加载项可以采用与旧加载项一样的易记名称,但必须在加载项清单中为它指定新产品 ID,并且它必须在公共 Office 应用商店和 SharePoint 网站的“添加加载项”页中作为与原始版本不同的项显示。

注意

组织加载项目录中的项是按照加载项包的文件名(而不是按照产品 ID 或加载项名称)进行区分。 如果新加载项采用与旧加载项一样的包文件名,便会在加载项目录中替换旧加载项,并且旧加载项不会再显示在“添加加载项”页上。 如果将加载项包上传到目录时还为它启用了版本控制,那么旧版文件(即旧应用)仍会保留在项历史记录中。 可以下载或还原为旧加载项包,但无法在目录或“添加加载项”页上将新旧加载项作为不同的项同时显示,除非它们的文件名不同。

在某些情况下,您可能需要迁移数据。 例如,新的外接程序可能使用具有不同于旧外接程序的架构的 Microsoft Azure SQL 数据库。 或者新外接程序可能使用不同的数据存储机制;例如,外部数据库而不是 SharePoint 列表。 您必须为数据迁移提供代码。

如果旧数据位于远程事件处理程序可以访问的位置,则可以在新外接程序的 InstalledEventEndpoint Web 服务中实现迁移逻辑。 或者,如果新外接程序可以访问旧数据,则可将迁移逻辑置于用户启动新外接程序时首次运行的代码中。 如果远程处理程序或新外接程序均无法访问旧数据,则可创建旧外接程序的更新,以添加数据导出功能和该功能的 UI。 用户首先更新旧外接程序,然后使用它将数据导出到新外接程序可访问的位置。 在新外接程序中添加功能和 UI 以导入数据。

原则上,您可在新的外接程序中重复使用旧外接程序中使用的外部数据源、计算组件或其他外部组件。 但是,请考虑一下,卸载 SharePoint 外接程序时,SharePoint 基础架构将卸载其安装的所有内容。 因此,SharePoint 外接程序仅依赖于它所安装的组件或者不由 SharePoint 基础架构安装的外部组件通常是很好的做法。

注意

建议如果实现安装组件的 InstalledEventEndpointUpgradedEventEndpoint,也应实现卸载这些相同组件的 UninstallingEventEndpoint。 这样做符合加载项应为独立式且进行干净卸载的设计原则。 不过,不得删除在加载项卸载后对用户仍有用的数据。 加载项创建的网站(而不是加载项 Web)通常应视为数据。

如果旧外接程序和新外接程序均包含一个外接程序 Web,则考虑在安装新外接程序时创建一个新的外接程序 Web。 因此,您不应在 SharePoint Feature 架构中使用与更新相关的 XML 标记。 此类标记不起作用,因为您不会更新现有 SharePoint 组件;而是将旧外接程序更换为新外接程序。

另请参阅