【问题标题】:SharePoint 2007 deploy MasterPage as Feature delete files on deactivationSharePoint 2007 在停用时将 MasterPage 部署为功能删除文件
【发布时间】:2011-05-16 19:47:44
【问题描述】:

我有一个要部署到 SharePoint 2007 服务器的 MasterPage。我正在使用一个特性和一个 wsp 来进行部署。部署后,我的新母版页无法为我的站点选择和使用。然后,如果我激活我的功能,我就可以选择我的母版页。但是,当我停用我的功能(或者甚至收回解决方案并将其从 SharePoint 中删除)时,母版页仍然可供选择,并且我的功能/解决方案中的所有其他文件仍然在 SharePoint 上。那么,当我的功能被停用时,是否有任何方法可以将母版页从可用状态中删除,然后如果它再次被激活,它是否再次可用?

希望这是有道理的,谢谢。

【问题讨论】:

  • 我知道这很旧,但如果您愿意,请查看下面的代码答案...我先将其移至另一个文件夹。

标签: sharepoint deployment sharepoint-2007 master-pages


【解决方案1】:

默认情况下,SharePoint 不会清理作为功能激活的一部分部署的文件。

为了删除母版页和其他相关文件,您需要为您的功能编写一个功能接收器,实现 FeatureDeactivating 方法,并使用对象模型代码而不是 CAML 来删除您的文件。特征接收器的MSDN文档是here,还有写特征接收器代码的博客例子all over the web

请记住,要删除母版页,您首先需要确保将网站集中所有网站的母版页重置为默认/另一个可用母版页。您还需要注意不要删除母版页或页面布局之间共享的资源文件(CSS、图像等)。

【讨论】:

  • 谢谢,我想我可能必须这样做,但我担心的是当我重新激活该功能时会发生什么。如果我重新激活该功能,文件会被放回吗?
  • 是的,每次您激活该功能时,都会再次配置文件(除非它们已经存在)。但请记住,如果您使用 featureReceiver 删除文件,那么任何修改(使用 SharePoint Designer 完成)都会丢失
  • 感谢各位的帮助。也许我可以使用上次修改的日期戳来帮助我决定是否应该使用 FeatureReceiver 删除文件。
【解决方案2】:

首先确保您在停用功能时不再使用母版页。然后你可以删除它。

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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2010-10-04
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多