我现在正在使用 SharePoint 2010,但遇到了问题。有一个功能负责 webparts - 它的范围是 web。需要更新已创建的 Web 部件的某些属性,例如 - 标题。
所以我已经覆盖了 FeatureUpgrading 事件并将自定义升级操作添加到功能清单中 - 这里没有问题。在该功能接收器中,我计划编写一个代码,该代码应该获取带有所需页面的文件,检查它,遍历其上的所有 Web 部件,更改属性,然后返回页面。问题是我所有的 webpart 都显示为ErrorWebPart,标题为空。
顺便说一句,如果我在 FeatureDeactivating 事件中使用相同的代码 - 一切正常。我注意到的唯一区别 - 在功能升级 HttpContext.Current 中为空。所以我手动填充了它,但它没有帮助。在谷歌搜索时,仅有的两个建议是:填充 HttpContext 并确保带有 webparts 的库在 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");
将不胜感激任何帮助。也许我缺少一些东西,或者有另一个变体来完成所描述的任务?
问候。