サンドボックス ソリューションのフィーチャー レシーバーを置き換える
フィーチャー レシーバーは、通常、機能がアクティブになったとき、または (機能がサイト テンプレートまたは 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 コマンドレットがあります。
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 Online CSOM を使用してカスタム テーマをアクティブ化する単純なコード サンプルを記載します。このサンプルは、まず SharePoint サイトにアセットをアップロードし、それからカスタム テーマをアクティブにします。
このサンプルで使用する 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 からサンドボックス ソリューションをアンインストールできますが、サイトから機能を移動させても、フィーチャー レシーバー コードは実行されません。
既存のサンドボックス ソリューションをサイトから非アクティブにしても、宣言オプションを使って展開されたアセットやファイルはいずれも削除されません。 ただし、サンドボックス ソリューションの機能が自動的に非アクティブ化されて、イベント レシーバーが削除されます。