コミュニティ サイトのコンテンツ展開における制限事項 (サイト テンプレート、エクスポート)

こんにちは SharePoint サポートの森 健吾 (kenmori) です。

今回の投稿では、SharePoint Online および SharePoint Server 2013 において、コミュニティ サイトのコンテンツ展開における制限事項を記載いたします。

コミュニティ サイトは、SharePoint 環境にフォーラム機能を提供するサイトのテンプレートです。この機能を部署ごとに作成し、大規模に横展開したいと要望する方もいらっしゃるかもしれません。

タイトル : SharePoint Server 2013 のコミュニティの概要
アドレス : https://technet.microsoft.com/ja-jp/library/jj219805.aspx

しかし、コミュニティ サイトおよびコミュニティ サイト機能を有効化したサイトをテンプレート化して横展開することはできません。また、同サイトをエクスポート・インポートで展開することもできません。

コンテンツ展開は、リリース直前に本番環境を構築する際に行うことになります。この事実を知らない状況で、サイトの展開プロジェクトを進めた場合、サイト テンプレートを作成後・展開直前に気づくと大変ですので、このような情報をお伝えするに至りました。

 

コミュニティ サイト機能がテンプレートに対応していない理由

コミュニティ サイト機能は、機能の実現のために特殊な実装を行っております。例えば、ユーザーが画面上では設定できない CAML 構文などを使用しています。また、コミュニティ サイト機能によって展開される標準のディスカッション掲示板には、ユーザーが [アプリの追加] で追加できる標準のディスカッション掲示板にはない特殊な設定があります。

これらの特殊な実装が、ユーザー コンテンツを標準的に出力するよう実装している "テンプレートとして保存" 処理や、"エクスポート・インポート" 処理に対応していません。そのため、サイト テンプレートからサイトを作成した際や、エクスポート・インポート でサイトを作成した際に、テンプレート内のデータがサイトに応じて置き換わらないことで、適切にコンテンツを再生成することができず、下記に記載するようなエラーが発生し、一部の機能が使用できません。

 

サイト テンプレートの場合

1) サイドリンク バーの [カテゴリ] をクリックし、カテゴリを選択して絞り込んで標準のディスカッションを表示しようとすると、掲示板を表示できません。

補足
後でこの問題に気づいた場合、下記の手順で該当ページを復旧できることを確認しました。ただし、すべての問題が解消できることを保証するものではありません。

1. 作成後のサイトにて [サイト コンテンツ] より、[サイトのページ] に遷移します。
2. "カテゴリ" ページを選択して、[削除] します。
3. SharePoint 管理シェルにて下記コマンドを実行します。
 Enable-SPFeature CommunitySite -Url https://sharepont/sites/site -Force

※SPO においては代替案 1) - 2) のサンプル コードを使用して下記の様に実行します。

.\EnableSPOFeature.ps1 -siteUrl https://tenant.sharepoint.com -feature "961d6a9c-4388-4cf2-9733-38ee8c89afd4" -force $true -username user@tenant.onmicrosoft.com -password pwd

エクスポート・インポートの場合 (オンプレミスのみ)

2) "コミュニティ ツール" Web パーツより、[ディスカッションの管理] をクリックして、コミュニティ機能が持つ標準のディスカッション掲示板に投稿すると、下記のエラーが発生して投稿できません。

補足
後でこの問題に気づいた場合、下記の手順で該当ページを復旧できることを確認しました。ただし、すべての問題が解消できることを保証するものではありません。

1. SharePoint 管理シェルにて下記コマンドを実行します。
 Enable-SPFeature CommunitySite -Url https://sharepont/sites/site -Force

一般的な代替案

コミュニティ機能を保持した状態で移行することは不可能となります。そのため、下記の 2 つのいずれかが現実的な代替案となります。

1) PowerShell を使用してコミュニティ サイトを作成する。または既存サイトにコミュニティ サイト機能をアクティブ化する。

下記に対処のためのサンプル スクリプトを記載します。

SharePoint Online の場合

# 1) サブサイトとしてコミュニティ サイトを作成する

param (
  $siteUrl,
  $newweburl,
  $langid,
  $template,
  $username,
  $password
)

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$pwd = convertto-securestring $password -AsPlainText -Force
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $pwd)
$context.Credentials = $credentials
$rootweb = $context.Web
$context.Load($rootweb)
$context.ExecuteQuery()

$context.Load($rootweb.Webs)
$context.ExecuteQuery()

$webcreateinfo = new-object Microsoft.SharePoint.Client.WebCreationInformation
$webcreateinfo.Url = $newweburl
$webcreateinfo.Title = $newweburl
$webcreateinfo.Language = $langid
$webcreateinfo.WebTemplate = $template
$newweb = $rootweb.Webs.Add($webcreateinfo)
$context.Load($newweb)
$context.ExecuteQuery()

$context.Load($rootweb.Webs)
$context.ExecuteQuery()

$webcreateinfo = new-object Microsoft.SharePoint.Client.WebCreationInformation
$webcreateinfo.Url = $newweburl
$webcreateinfo.Title = $newweburl
$webcreateinfo.Language = $langid
$webcreateinfo.WebTemplate = $template
$newweb = $rootweb.Webs.Add($webcreateinfo)
$context.Load($newweb)
$context.ExecuteQuery()

上記のスクリプトを NewSPOWeb.ps1 として保存し、下記の様に実行します。

.\NewSPOWeb.ps1 -siteUrl https://tenant.sharepoint.com -langid 1041 -template "COMMUNITY#0" -newweburl commweb -username user@tenant.onmicrosoft.com -password pwd

# 2) 既存サイトにコミュニティ機能をアクティブ化する。

param (
  $siteUrl,
  $feature,
  $force,
  $username,
  $password
)

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$pwd = convertto-securestring $password -AsPlainText -Force
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $pwd)
$context.Credentials = $credentials
$rootweb = $context.Web
$context.Load($rootweb)
$context.ExecuteQuery()
$context.Load($rootweb.Webs)
$context.ExecuteQuery()

$context.Load($rootweb.Features)
$context.ExecuteQuery()

$commsiteguid = new-object system.guid($feature)
$feature = $rootweb.Features.Add($commsiteguid, $force,

[Microsoft.SharePoint.Client.FeatureDefinitionScope]::None)
$context.Load($feature)
$context.ExecuteQuery()

上記のスクリプトを EnableSPOFeature.ps1 として保存し、下記の様に実行します。

.\EnableSPOFeature.ps1 -siteUrl https://tenant.sharepoint.com -feature "961d6a9c-4388-4cf2-9733-38ee8c89afd4" -force $false -username user@tenant.onmicrosoft.com -password pwd

 

SharePoint オンプレミスの場合

# 1) サブサイトとしてコミュニティ サイトを作成する

New-SPWeb https://sharepoint/sites/site1/subsite2 -Language 1041 -Template COMMUNITY#0 -Name subsite2

# 2) 既存サイトにコミュニティ機能をアクティブ化する。

Enable-SPFeature CommunitySite -Url https://sharepoint/sites/site1/subsite3

タイトル : New-SPWeb
アドレス : https://technet.microsoft.com/ja-jp/library/ff607579.aspx

タイトル : Enable-SPFeature
アドレス : https://technet.microsoft.com/ja-jp/library/ff607803.aspx

 

2) チーム サイトにディスカッション掲示板を配置して、機能縮小版として使用する。

 

その他、参考情報

発行インフラストラクチャおよび発行機能をアクティブ化したサイトについても、テンプレート化はサポートされておりません。下記もあわせてご参考にしていただけますと幸いです。

タイトル : 発行機能とサイトテンプレートについて
アドレス : https://blogs.technet.com/b/sharepoint_support/archive/2014/05/24/3631323.aspx

その他、ブログ サイト、管理されたメタデータ機能の使用なども、テンプレートとして保存を実施すると問題が生じることが確認されています。

このように、サイト コンテンツ展開計画において、サイト テンプレートでサイトを生成する場合は、実際に対応しているか否かを事前に確認をとることが必要となります。何卒、ご了承くださいますようお願いいたします。