【问题标题】:Deactivating web part feature in sharepoint停用 Sharepoint 中的 Web 部件功能
【发布时间】:2011-04-06 16:46:30
【问题描述】:

我使用 wspbuilder 工具(具有功能的 Web 部件)开发了一个 Web 部件。

部署(到网站集)时,您必须激活该功能才能使用此 Web 部件 - 到目前为止一切顺利。

但是,当停用该功能时,Web 部件仍保留在添加它的任何站点上,而且,它仍可在 Web 部件库中使用吗?

这是预期的行为吗?有没有办法从网站集中的所有子网站中删除 Web 部件,同时也将其从 Web 部件库中删除?

谢谢 ;)

【问题讨论】:

    标签: c# sharepoint sharepoint-2007 moss web-parts


    【解决方案1】:

    这是预期的行为。您可以自动删除它,但您必须编写一个功能接收器来完成它。

    有关为 SharePoint 2007 创建功能接收器的更多信息: http://sharepointdevwiki.com/display/public/How+to+add+a+Feature+Receiver+to+a+Feature

    【讨论】:

    • 我对特征接收器也有一些了解,我也尝试过摆弄这个。但是,我似乎完全无法从使用它的站点中删除 Web 部件。我还没有攻击 web 部件库,因为我想先从子站点中删除它
    • 您可能必须先使用 WebPartManager 从网站中删除 Web 部件的实例,然后才能将其从 Web 部件库中删除。
    • 当 Web 部件仍在页面上使用时,从 Web 部件库中删除它们是非常安全的。将会发生的是现有实例将继续工作,但用户无法创建新实例。您可以通过用户界面执行相同的操作。正如 Shaneo 所说,您必须检查每个站点的每个页面并使用 WebPartManager 或 LimitedWebPartManager 删除 Web 部件。在从 Web 部件库中删除 Web 部件之前或之后执行此操作都没有关系。
    • 好的...所以我绝对应该能够使用 LimitedWebPartManager 删除 Web 部件?因为这就是我想要做的。我有一个 SPWeb.SPLimitedWebPartManager.WebParts 中所有 webpart 的循环。在这个循环中,我打印所有 webpart 标题,并(尝试)使用 SPLWPM().DeleteWebPart(myWebPart); 删除我的特定 webpart;但绝对没有任何反应:/
    • 你应该。删除 web 部件后不要忘记调用 SPLWPM.Web.Update()。此外,请务必将 LimitedWebPartManager 放在 using 块中(它实现 IDisposable)并在退出块之前调用 SPLWPM.Web.Dispose()。这可以防止由对象模型中的错误导致的内存泄漏。
    【解决方案2】:

    当您创建 Web 部件时,WSPBuilder 会自动将删除事件接收器添加到功能。很方便。

    【讨论】:

      【解决方案3】:

      您可以使用以下代码来完成:

      public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
      {
          SPSite site = properties.Feature.Parent as SPSite;
      
          if (site != null)
          {
              try
              {
                  SPList wpGallery = site.GetCatalog(SPListTemplateType.WebPartCatalog);
                  SPQuery query = new SPQuery();
                  query.Query = “<Where><Eq><FieldRef Name=’FileLeafRef’ /><Value Type=’Text’>webpartname.webpart</Value></Eq></Where>”;
                  SPListItemCollection items = wpGallery.GetItems(query);
      
                  if (items.Count > 0)
                  {
                      items[0].Delete();
                  }
              }
              catch { }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 1970-01-01
        • 2011-04-15
        • 2011-06-16
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2015-03-07
        相关资源
        最近更新 更多