替换沙盒解决方案中的功能接收器
当激活功能或创建网站(如果功能与网站模板或 Web 模板相关联)时,通常使用功能接收器将各种配置或设置应用于 SharePoint 网站。 已在 SharePoint Online 中使用沙盒解决方案部署功能接收器,但由于无法继续使用基于代码的自定义项,所以必须采用替代设计。
在 SharePoint 外接程序模型中处理 SharePoint 中功能接收器的方法与使用完全信任代码或与在编码的沙盒解决方案中略有不同。 必须使用远程 API (CSOM/REST) 重新设计解决方案,以便将所需的配置应用到你的网站。
注意
基于代码的沙盒解决方案在 2014 年被弃用,而 SharePoint Online 开启了完全移除此功能的过程。 基于代码的沙盒解决方案在 SharePoint 2013 和 SharePoint 2016 中也同样被弃用。
用于替换功能接收器的选项
方法 | 设计注意事项和详细信息 |
---|---|
基于 PowerShell 的自定义项 |
|
基于代码的自定义 |
|
注意
如果要提供将所需远程代码作为子网站创建逻辑的一部分应用的自动方式,则必须使用用户自定义操作替代子网站链接。 此选项仅适用于使用经典库和列表模型的网站。
对网站应用自定义项
使用 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 卸载沙盒解决方案,但不会执行功能接收器代码,即使已从网站移出功能。
从网站停用现有沙盒解决方案时,使用声明性选项部署的任何资产或文件都不会被移除。 但是沙盒解决方案中的功能会自动停用,并移除事件接收器。