2010-09-01 5 views
4

J'ai développé un composant WebPart à l'aide de l'outil wspbuilder (composant WebPart avec fonctionnalité).Désactivation de la fonction de composant WebPart dans le partage

Lors d'un déploiement (dans une collection de sites), vous devez activer la fonctionnalité pour utiliser ce composant WebPart - jusqu'à présent, tout va bien.

Cependant, lors de la désactivation de la fonctionnalité, le composant WebPart reste sur tout site où il a été ajouté et, de plus, il est toujours disponible dans la galerie WebPart?

Est-ce que ce comportement est attendu? N'existe-t-il aucun moyen de supprimer le composant WebPart de tous les sous-sites de la collection de sites et de le supprimer de la galerie de composants WebPart?

Merci;)

Répondre

2

Ceci est un comportement attendu. Vous pouvez l'enlever automatiquement, mais vous devrez écrire un récepteur de fonction pour accomplir cela.

Plus d'informations sur la création d'un récepteur de fonctionnalités pour SharePoint 2007: http://sharepointdevwiki.com/display/public/How+to+add+a+Feature+Receiver+to+a+Feature

+0

Je connais un peu sur les récepteurs de fonction aussi bien, et j'ai essayé bidouiller avec cela aussi. Cependant, je semble complètement incapable de supprimer la partie Web des sites qui l'utilisent. Je n'ai pas encore attaqué la galerie de composants WebPart, car je voulais d'abord la supprimer des sous-sites. – Dynde

+0

Vous devrez peut-être utiliser un WebPartManager pour supprimer des instances de votre composant Webpart des sites avant de pouvoir le supprimer de la galerie WebPart. – Shaneo

+2

Il est parfaitement sûr de supprimer des parties Web de la galerie Web Part pendant qu'elles sont encore utilisées sur des pages. Ce qui se passera, c'est que les instances existantes continueront à fonctionner, mais les utilisateurs sont incapables de créer de nouvelles instances. Vous pouvez faire la même chose via l'interface utilisateur. Comme l'indique Shaneo, vous devez vérifier chaque page de chaque site et supprimer le composant WebPart à l'aide de WebPartManager ou de LimitedWebPartManager. Cela n'a pas d'importance si vous le faites avant ou après avoir supprimé le composant WebPart de la galerie WebPart. –

0

WSPBuilder ajoute automatiquement le récepteur d'événements de suppression de la fonction lorsque vous créez une partie Web. Très pratique.

0

Vous pouvez le faire en utilisant le code suivant:

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