次の方法で共有


サンドボックス ソリューションのフィーチャー レシーバーを置き換える

フィーチャー レシーバーは、通常、機能がアクティブになったとき、または (機能がサイト テンプレートまたは 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 コマンドレットがあります。

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 からサンドボックス ソリューションをアンインストールできますが、サイトから機能を移動させても、フィーチャー レシーバー コードは実行されません。

既存のサンドボックス ソリューションをサイトから非アクティブにしても、宣言オプションを使って展開されたアセットやファイルはいずれも削除されません。 ただし、サンドボックス ソリューションの機能が自動的に非アクティブ化されて、イベント レシーバーが削除されます。

関連項目