2012-11-16 3 views
2

지금 SharePoint 2010으로 게임하고 있는데 문제가 있습니다. 웹 파트를 담당하는 기능이 있습니다. 범위는 웹입니다. 이미 생성 된 웹 파트의 일부 속성 (예 : title)을 업데이트해야합니다.Sharepoint - webpart 속성을 업그레이드하십시오.

그래서 FeatureUpgrading 이벤트를 재정의하고 기능별 매니페스트에 맞춤 업그레이드 조치를 추가했습니다. 문제는 없습니다. 필자는 필자가 필요한 페이지로 파일을 가져와 체크 아웃하고, 모든 웹 파트를 반복하고, 속성을 변경 한 다음 페이지를 다시 체크인하는 코드를 가질 계획입니다. 문제는 모든 웹 파트가 ErrorWebPart으로 비어있는 제목으로 표시된다는 것입니다.

그런데 FeatureDeactivating 이벤트에서 동일한 코드를 사용하면 모든 것이 잘 작동합니다. featureupgrading HttpContext.Current의 유일한 차이점은 null입니다. 그래서 수동으로 채웠지 만 도움이되지 않았습니다. 인터넷 검색 중 두 가지 조언은 HttpContext를 채우고 webpart가있는 libs가 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. 우선은 webparts 2
그런 다음 새로운 기능을 활성화를 추가하는 기능을 활성화합니다.

패키지로 변경할 수 있습니다. 또는 새로운 기능에 종속성을 추가하는 것이 좋습니다.

+0

업그레이드 프로세스 중에는 활성화/비활성화가 없습니다. 웹 파트가 이미 있습니다. 두 번째 기능은 FeatureUpgrading 핸들러에서 기존 webpart를 업그레이드하는 기능입니다. 웹 파트의 수는 정확하지만 ErrorWebPart로 나타납니다. – sleepwalker

관련 문제