2010-07-02 5 views
1

SharePoint 2007 서버에 배포 할 마스터 페이지가 있습니다. 배포를 수행 할 기능과 wsp를 사용하고 있습니다. 배포 후에 내 새 마스터 페이지를 선택하여 내 사이트에 사용할 수 없습니다. 그런 다음 내 기능을 활성화하면 마스터 페이지를 선택할 수 있습니다. 그러나 내 기능을 비활성화하거나 솔루션을 SharePoint에서 삭제하면 마스터 페이지를 계속 선택할 수 있으며 내 기능/솔루션에 포함 된 다른 모든 파일은 여전히 ​​SharePoint에 남아 있습니다. 그렇다면 내 기능이 비활성화되었을 때 사용할 수있는 마스터 페이지를 제거하는 방법이 있습니까? 그런 다음 다시 활성화하면 다시 사용할 수 있습니까?SharePoint 2007에서 비활성화시 기능 삭제 파일로 MasterPage를 배포하십시오.

희망적입니다. 감사합니다.

+0

나는 이것이 오래된 것을 알고 있지만 당신이 원한다면 코드에 대한 내 대답을 참조하십시오 ... 나는 다른 폴더로 먼저 이동합니다. – trgraglia

답변

3

SharePoint는 기본적으로 기능 활성화의 일부로 배포 된 파일을 정리하지 않습니다.

마스터 페이지 및 기타 관련 파일을 제거하려면 기능에 대한 기능 수신자를 작성해야하며 FeatureDeactivating 메소드를 구현하고 CAML 대신 오브젝트 모델 코드를 사용하여 파일을 제거하십시오. 피처 수신자에 대한 MSDN 문서는 here이고 피처 수신자 코드 all over the web을 작성하는 블로그 예가 있습니다.

마스터 페이지를 제거하려면 먼저 사이트 모음의 모든 사이트에 대한 마스터 페이지를 기본/사용 가능한 다른 마스터 페이지로 다시 설정해야합니다. 또한 마스터 페이지 또는 페이지 레이아웃간에 공유되는 리소스 파일 (CSS, 이미지 등)을 제거하지 않도록주의해야합니다.

+0

고마워, 내가 그 일을해야 할지도 모른다고 생각했지만 내 관심사는 내가 그 피쳐를 다시 활성화 할 때 일어날 일이었다. 기능을 다시 활성화하면 파일이 다시 저장됩니까? – TehOne

+1

예,이 기능을 활성화 할 때마다 파일이 다시 제공됩니다 (이미 존재하지 않는 한). 그러나 featureReceiver를 사용하여 파일을 삭제하면 SharePoint Designer를 사용하여 수정 한 모든 수정 내용이 손실됩니다. –

+0

도움 주셔서 감사합니다. 필자는 FeatureReceiver를 사용하여 파일을 삭제해야할지 결정하는 데 사용할 수있는 마지막 수정 날짜 스탬프가있을 수 있습니다. – TehOne

1

먼저 기능 비활성화에서 마스터 페이지를 더 이상 사용하고 있지 않은지 확인하십시오. 그런 다음 제거 할 수 있습니다.

SPWeb web = (SPWeb)properties.Feature.Parent; 

string customMasterUrl = (new Uri(web.Url + "/_catalogs/masterpage/Sample.master")).AbsolutePath; 

if (web.MasterUrl != customMasterUrl) 
{ 
    try 
    { 
    SPFile file = web.GetFile(customMasterUrl); 
    SPFolder masterPageGallery = file.ParentFolder; 

    SPFolder temp = masterPageGallery.SubFolders.Add("Temp"); 
    file.MoveTo(temp.Url + "/" + file.Name); 
    temp.Delete(); 
    } 
    catch (ArgumentException) 
    { 
    return; 
    } 
} 
관련 문제