停用 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 部件