現在 SharePoint 2010 を使用していますが、問題があります。Web パーツを担当する機能があります。その範囲は Web です。タイトルなど、既に作成されている Web パーツの一部のプロパティを更新する必要があります。
そこで、FeatureUpgrading イベントをオーバーライドし、カスタム アップグレード アクションを機能マニフェストに追加しました。ここでは問題ありません。そのフィーチャー レシーバーでは、必要なページを含むファイルを取得し、チェックアウトし、そのファイル上のすべての Web パーツを反復処理し、プロパティを変更して、ページをチェックインするコードを用意する予定です。問題は、すべての Webパーツが空のタイトルのErrorWebPartとして表示されることです。
ちなみに、FeatureDeactivating イベントで同じコードを使用すると、すべてうまくいきます。私が気付いた唯一の違いは、機能のアップグレードで HttpContext.Current が null だったことです。そのため、手動で入力しましたが、役に立ちませんでした。グーグル中の唯一のアドバイスは、HttpContext を設定し、Web パーツを含むライブラリが GAC にあることを確認することでした。私の状況では両方の条件が満たされています。
FeatureUpgrading のサンプル コードは適切です。
SPUtility.ValidateFormDigest();
web.AllowUnsafeUpdates = true;
var request = new HttpRequest("", web.Url, "");
HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter()));
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
var fileUrl = web.Url + "/pages/sample.aspx";
var file = web.GetFile(fileUrl);
if (file.CheckOutType == SPFile.SPCheckOutType.None)
{
file.CheckOut();
}
using (var webPartsManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
foreach (WebPart webPart in webPartsManager.WebParts)
{
Console.WriteLine(webPart.GetType().ToString());
}
}
file.CheckIn("System update");
助けていただければ幸いです。たぶん、私が欠けているものがあるか、説明されたタスクを達成するための別のバリアントがありますか?
よろしく。