停用 Sharepoint 中的 Web 部件功能

Posted

技术标签:

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

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

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

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

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

谢谢 ;)

【问题讨论】:

【参考方案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  
    

【讨论】:

以上是关于停用 Sharepoint 中的 Web 部件功能的主要内容,如果未能解决你的问题,请参考以下文章

将可视化 Web 部件部署到 SharePoint 2013(激活功能)时出错

如何将Excel Web Access Web部件添加到我的sharepoint库中?

摘要链接 Web 部件与 SharePoint 2007/2010 中的自定义 Web 部件冲突

Sharepoint 2013 中的 Ajax 连接 Web 部件

sharepoint 2010 Visual webpart 中的自动完成功能

Sharepoint - Web 部件编辑上的事件