2010-09-01 35 views
4

我使用wspbuilder工具(具有功能的Web部件)開發了一個Web部件。在共享點中取消Web部件功能

當部署到網站集時,您必須激活該功能才能使用此Web部件 - 目前爲止這麼好。

但是,當停用該功能時,Web部件會保留在已添加的任何網站上,此外,它仍可在Web部件庫中使用?

這是預期的行爲?有沒有辦法從網站集中的所有子網站中刪除Web部件,並將其從Web部件庫中刪除?

謝謝;)

回答

2

這是預期的行爲。你可以自動刪除它,但你必須編寫一個功能接收器來完成。

有關SharePoint 2007的創建功能接收更多信息:當您創建一個Web部件 http://sharepointdevwiki.com/display/public/How+to+add+a+Feature+Receiver+to+a+Feature

+0

我知道一點有關功能的接收器,以及,我已經試過這種擺弄周圍也是如此。不過,我似乎完全無法從使用它的網站中刪除網頁部分。我還沒有攻擊Web部件庫,因爲我想先將它從子站點中刪除。 – Dynde 2010-09-01 09:24:48

+0

您可能必須使用WebPartManager從網站中刪除Web部件的實例,然後才能將其從Web部件庫中刪除。 – Shaneo 2010-09-01 09:29:02

+2

在Web部件庫仍在頁面上使用時,從Web部件庫中刪除Web部件是完全安全的。會發生什麼情況是現有實例將繼續工作,但用戶無法創建新實例。你可以通過用戶界面做同樣的事情。正如Shaneo所述,您必須從每個站點檢查每個頁面,並使用WebPartManager或LimitedWebPartManager刪除Web部件。如果在從Web部件庫中除去Web部件之前或之後執行此操作,則無關緊要。 – 2010-09-01 09:51:40

0

WSPBuilder自動添加刪除事件接收器的功能。很方便。

0

您可以通過下面的代碼做到這一點:

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