他の人が正しいアプローチは、プログラムでこれを実現するのではなく、編集することであると述べてきたように:
あなたのサイトにWebパーツにアクセスするためのAPIを使用することができますが、ここでの作業を開始すべきいくつかのコードですあなたのインストールをサポートできなくするコンテンツデータベース。私は定期的にコンソールアプリケーションを使用して、サイトテンプレートから作成されたサイトで構成されるサイトコレクションでこれを行います。
ここでは、ListViewWebPartのTitleプロパティを変更する例を示します。再帰的ループのコードを含むように更新されました。私はこれをテストしていないが、うまくいくはずです。
private static void ProcessSiteCollection(string url)
{
using (SPSite siteCollection = new SPSite(url))
{
SPWeb rootWeb = siteCollection.RootWeb;
ProcessWebs(rootWeb);
}
}
private static void ProcessWebs(SPWeb parentWeb)
{
foreach (SPWeb web in parentWeb.Webs)
{
try
{
UpdateWebPart(web); // Set web part properties
ProcessWebs(web); // Recursively loop through children
}
finally
{
web.Dispose();
}
}
}
private static void UpdateWebPart(SPWeb web)
{
using (SPLimitedWebPartManager webPartManager =
web.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared))
{
try
{
foreach (WebPart webPart in webPartManager.WebParts)
{
if (webPart.Title == "My Web Part")
{
ListViewWebPart listViewWebPart = (ListViewWebPart)webPart;
listViewWebPart.Title = "Updated Web Part";
webPartManager.SaveChanges(listViewWebPart);
web.Update();
break;
}
}
}
finally
{
webPartManager.Web.Dispose();
}
}
}
これは、今追加したシナリオでは機能しますか。すべてのウェブサイトは、tamplateから作成されました。 SharepointにはこれらのWebサイトを列挙し、各Webサイトのwebpartインスタンスを取得する方法がありますか? – epitka
私の答えの最初のバージョンで述べたように、はいこれを行うことができますが、私はそれを省略するために省略しました。私は完全なコードサンプルで答えを更新しました。 –
WebパーツマネージャーでWebを処分する必要がありますか? – Evgeny