2012-11-16 68 views
2

我正在使用SharePoint 2010,并且遇到问题。 有一个功能负责webparts - 它的范围是web。需要更新已经创建的webparts的一些属性,例如 - title。Sharepoint - 升级webpart属性

因此,我重写了FeatureUpgrading事件并将自定义升级操作添加到功能清单中 - 这里没有问题。 在这个功能接收器中,我计划有一个代码,用于获取需要的页面的文件,检查它,遍历它上的所有Web部件,更改属性,然后返回页面。 问题是,我的所有Web部件都显示为ErrorWebPart带空标题。顺便说一句,如果我在FeatureDeactivating事件中使用相同的代码 - 一切正常。 我注意到的唯一区别 - 在featureupgrading HttpContext.Current中为null。所以我手动填充它,但它没有帮助。 当用谷歌搜索时,唯一的两个建议是:填充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"); 

希望得到任何帮助。也许有一些我错过了或有另一种变种来完成描述的任务?

问候。

+0

如果您尝试从Visual Studio中收回项目,重建并重新部署,会发生什么情况? – user1211929

+0

以前我试过干净的安装在同一台机器上,结果和升级一样。 – sleepwalker

回答

0

由于它在Deactivating()上工作,我认为功能被激活的顺序是问题。
您可能必须保证以下:
1.首先激活添加的webpart
2.然后激活新的功能要素。

您可以在包中更改它。或者更好地为您的新功能添加依赖项。

+0

当它是升级过程 - 没有激活/停用。 Webparts已经存在。第二个功能是负责升级FeatureUpgrading处理程序中的这些现有Web部件。 Web部件的数量是正确的,但它们确实显示为ErrorWebPart。 – sleepwalker