替换沙盒解决方案中的功能接收器

当激活功能或创建网站(如果功能与网站模板或 Web 模板相关联)时,通常使用功能接收器将各种配置或设置应用于 SharePoint 网站。 已在 SharePoint Online 中使用沙盒解决方案部署功能接收器,但由于无法继续使用基于代码的自定义项,所以必须采用替代设计。

在 SharePoint 外接程序模型中处理 SharePoint 中功能接收器的方法与使用完全信任代码或与在编码的沙盒解决方案中略有不同。 必须使用远程 API (CSOM/REST) 重新设计解决方案,以便将所需的配置应用到你的网站。

注意

基于代码的沙盒解决方案在 2014 年被弃用,而 SharePoint Online 开启了完全移除此功能的过程。 基于代码的沙盒解决方案在 SharePoint 2013 和 SharePoint 2016 中也同样被弃用。

用于替换功能接收器的选项

方法 设计注意事项和详细信息
基于 PowerShell 的自定义项
  • 使用 PowerShell 脚本预配新的网站集(和潜在子网站),在这些网站集(和潜在子网站)中使用远程 API 应用所需自定义项。 此操作的方法通常是在 PowerShell 脚本中直接使用 CSOM/REST 或使用 PnP PowerShell 命令,借此轻松地远程修改网站和内容。
  • 如果你的网站配置模型基于管理操作,则适用。
  • 需要执行脚本以将所需自定义项应用于创建的网站。
  • 如果按管理操作执行,可与网站创建流程相结合。
  • 不需要托管基础结构。
  • 无法自动合并为子网站创建流程的一部分。
基于代码的自定义
  • 结合使用托管代码和远程 API 来应用所需自定义项。 这意味着你可以在创建网站时将自定义项作为管理操作的一部分应用,也可以将自定义项应用于 SharePoint,从而挂钩到代码成为 UI 元素的一部分。
  • 如果与最终用户操作相结合,可能需要托管基础结构。
  • 可以将托管代码(可使用 CSOM/REST API 在任意位置执行此代码)用于所需操作。
  • 通过替代子网站链接可用于集成到 SharePoint。
  • 可以使用远程 API 自动化网站集和子网站预配。

注意

如果要提供将所需远程代码作为子网站创建逻辑的一部分应用的自动方式,则必须使用用户自定义操作替代子网站链接。 此选项仅适用于使用经典库和列表模型的网站。

对网站应用自定义项

使用 PowerShell

下面是一个简单的脚本,它使用 PnP PowerShell 将主题颜色文件从计算机上载到 SharePoint Online 并在 SharePoint 网站中激活该文件。

此示例使用 PnP PowerShell,它提供了 150 多个针对网站配置和资产管理的额外 PowerShell cmdlet。

Connect-SPOnline –Url https://yoursite.sharepoint.com/ –Credentials (Get-Credential)
Add-SPOFile -Path c:\temp\company.spcolor -Folder /_catalogs/theme/15/
Set-SPOTheme -ColorPaletteUrl /_catalogs/theme/15/company.spcolor

注意

PnP PowerShell 是一种开放源代码解决方案,其中包含为其提供支持的活动社区。 没有用于 Microsoft 开放源代码工具支持的 SLA。

适用代码

下面是一个简单的代码示例,通过首先将资产上载到 SharePoint 网站,然后激活主题,使用 SharePoint Online CSOM 激活自定义主题。

此示例使用 PnP CSOM 核心组件,它通过引入另外一组常见操作的扩展方法来扩展本机现成的操作。 可以通过使用本机 CSOM 来执行类似的操作,但是代码将复杂得多。


// Upload assets to theme folder.
clientContext.Site.RootWeb.UploadThemeFile(
        HostingEnvironment.MapPath(string.Format("~/{0}", "Resources/Themes/SPC/SPCTheme.spcolor")));
clientContext.Site.RootWeb.UploadThemeFile(
        HostingEnvironment.MapPath(string.Format("~/{0}", "Resources/Themes/SPC/SPCbg.jpg")));

Web web = clientContext.Web;
// Loading RootWeb.ServerRelativeUrl property.
clientContext.Load(clientContext.Site, w => w.RootWeb.ServerRelativeUrl); 
clientContext.ExecuteQuery();
// Let's first upload the contoso theme to host web, if it does not exist there.
web.CreateComposedLookByUrl("Contoso",
                clientContext.Site.RootWeb.ServerRelativeUrl + "/_catalogs/theme/15/SPCTheme.spcolor",
                null,
                clientContext.Site.RootWeb.ServerRelativeUrl + "/_catalogs/theme/15/SPCbg.jpg",
                string.Empty);

// Setting the Contoos theme to host web.
web.SetComposedLookByUrl("Green");

提示

如果使用的是基于代码的方法,我们建议使用 PnP 预配引擎进行模板管理,这将大大简化开发工作。

从网站中删除包含功能接收器代码的沙盒解决方案

如果沙盒解决方案包含进行功能停用的功能接收器逻辑,请务必执行这些操作,你应该确保在从 SharePoint Online 禁用基于代码的支持之前先停用此类功能。

禁用基于代码的支持后,可以从 SharePoint Online 卸载沙盒解决方案,但不会执行功能接收器代码,即使已从网站移出功能。

从网站停用现有沙盒解决方案时,使用声明性选项部署的任何资产或文件都不会被移除。 但是沙盒解决方案中的功能会自动停用,并移除事件接收器。

另请参阅