質問

ルートWebにカスタムマスターページを設定するサイトフィーチャーレシエバーを作成しています。また、ルートに設定されたマスターページをすべてのサブサイトに継承したいと思います。これを確保するための最もエレガントな方法は何ですか(.NETを使用)?

(明らかに、すべてのサブサイトを反復し、手動で設定できました。)

役に立ちましたか?

解決

SharePoint APIを使用してこれを行う簡単な方法があります。

SPWeb web = SPContext.Current.Web;
PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
publishingWeb.CustomMasterUrl = "/_catalogs/masterpage/mycustom.master";
publishingWeb.CustomMasterUrl.SetInherit(true, true);
publishingWeb.Update();

他のヒント

私たちにできる最善のことは、特徴的な方法で以下のようなものだと思います。

foreach (SPWeb site in siteCollection.AllWebs) 
{
  site.MasterUrl = "/_catalogs/masterpage/mycustom.master";
  site.CustomMasterUrl ="/_catalogs/masterpage/mycustom.master";
  site.Update();
  site.Dispose();
}
private void SetMaster(SPWeb web, string masterpagePath, string custommasterpagePath) 
{
    web.CustomMasterUrl = masterpagePath;
    web.MasterUrl = custommasterpagePath;
    web.Update();

    foreach(SPWeb child in web.Webs) 
    {
        try {
            SetMaster(child, masterpage, custommasterpage);
        } 
        finally
        {
            if(child != null) child.Dispose();
        }
    }
}

これを呼び出して、spsite.rootwebを通過し、マスターページへのパスを指定してください。サイトコレクションのルートウェブの下のすべてのサイトで再発します(つまり、それらすべて!)

以下のサイトが使用されているかどうかを考慮する必要があるかもしれないことに注意してください さまざまなマスターページ なので これは問題を引き起こす可能性があります, 、特に会議のワークスペースでは、それ以外の場合はそうです。

また、考慮する必要があるかもしれません プロパティバッグに元のマスターページの詳細を保存する Webの場合は後でそれらを復元できるようにします(例:機能不活性化)

そして、あなたは望むかもしれません テーマがオフになっていることを確認してください そして、あなたの見た目や感触を妨害しないでください。

http://msdn.microsoft.com/en-us/library/gg447066(v=office.14).aspx

これにより、トップレベルのサイトの傑作を取得することにより、イベントレシーバーごとにチャイルドサイトを提供します...

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top