SharePoint マスタページ差し替え サンプルコード

こんにちは、奥田です。

 

SharePoint サイトの UI を大幅に変更する場合は、オリジナルのマスタページを作成し適用させますが、1つ1つのサイトに対して手作業で default.master からオリジナルマスタページに変更する作業を行うのではなく、自動化したいと考えることがあると思います。

そのためにはサイト定義やフィーチャなどを開発し、その中でマスタページを差し替えるためのコーディングを行います。

今日はそんなときに使えるマスタページを差し替えるためのコーディングについてご紹介します。

 

マスタページを差し替えるためには SPWeb MasterUrl プロパティと CustomMasterUrl プロパティに差し替えたいマスタページの参照パスをセットすればいいのですが、その際にはちょっと注意が必要です。

 

currentWeb.MasterUrl =/_catalogs/masterpage/original.master;

currentWeb.CustomMasterUrl = "/_catalogs/masterpage/default.master";

currentWeb.Update();

 

上記のコードでマスタページをマスタページギャラリー内の original.master に差し替えることが可能ですが、環境によってはこれでは動作しません。

http://サーバー名/ のように Web アプリケーションのルートの場所に作成していないサイト コレクション上では動作しないのです。

(http://サーバー名/sites/top がトップ レベル サイトのサイトコレクションなど)

 

理由は、以下の通りトップ レベル サイトの場所が Web アプリケーションのルートかそうでないかによってマスタページギャラリーへの参照パスが変わってしまうからです。

http://サーバー名/ がトップ レベル サイトの場合
/_catalogs/masterpage/original.master

http://サーバー名/sites/top がトップ レベル サイトの場合
/sites/top/_catalogs/masterpage/original.master

 

ということは、複数の SharePoint サイトのマスタをまとめて差し替える機能を開発する際には、上記サンプル コードは使えません。

 

以下のようにサイト コレクションの 「/sites/●●」のパスを取得して、SPWeb MasterUrl プロパティと CustomMasterUrl プロパティに文字列連結してセットすれば

どのサイト コレクション上でも動作可能になります。

 

SPSite site = SPContext.Current.Site;

string path = site.ServerRelativeUrl;

currentWeb.MasterUrl = path + "/_catalogs/masterpage/original.master";

currentWeb.CustomMasterUrl = path + "/_catalogs/masterpage/original.master";

currentWeb.Update();

 

SPSite を取得するのはちょっと面倒・・というときには以下のようなコードでもいいかもしれませんね。

 

string defaultMasterUrl = currentweb.MasterUrl;

currentWeb.MasterUrl = defaultMasterUrl.Replace("default", "original");

currentWeb.CustomMasterUrl = defaultMasterUrl.Replace("default", " original ");

currentWeb.Update();

 

ということで、マスタページを自動的に差し替える際のサンプルコードご紹介でした。

 

奥田理恵

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中