Que faire lorsque vous avez enfin fini de développer votre WebPart ? La déployer !
Comment ? Plusieurs méthodes existes mais me connaissant, vous devez savoir que je vais parler de feature, de solution et de WSPBuilder et des VseWss.
Regardons ensemble la base de la feature pour déployer la webpart suivante (code simple car ce n'est pas le sujet de ce post) :

Pour déployer cette webpart vous allez utiliser une feature composé de 3 fichiers dont voici un exemple :
- Feature.xml

- Elements.xml

- [nomdewebpart].webpart

Pour plus d'informations concernant les attributs et sections composant chacun de ces fichiers, je vous renvoie au SDK WSS 3.0 (Oui, je sais c'est facile ^^)
Au final, cette feature uploadera le fichier CleanWebpart.webpart dans la galerie de webpart de votre collection de site via la section Module compris dans le fichier elements.xml.
La problématique avec cette section Module est qu'elle uploade bien les fichiers mais ne les supprime pas lors de la désactivation de la feature. Dans certain cas, c'est le comportement souhaitable mais il peut y avoir des cas où vous souhaiteriez avoir l'effet inverse.
Pour ce faire, vous allez compléter le fichier feature.xml comme suit (Ajout de l'attribut ReceiverAssembly et ReceiverClass) :
Rajouter un nouveau fichier de type "class" (ici, nommé CleanWebpartReceiver) et le faire hériter de SPFeatureReceiver. Cette classe a 4 méthodes intéressantes :
Il ne vous restera plus qu'à overrider les méthodes qui vous intéressent (activation, désactivation, etc...) :

Le mécanisme est relativement simple :
- Récupération de la collection de site via les propriétés de la feature (properties.feature.parent est un SPSite car la feature a été inscrite en SCOPE = SITE)
- Récupération du catalogue de Webpart sous la forme d'une SPList
- Récupération du fichier descriptif de la Webpart (CleanWebpart.webpart) via la fonction GetWebPartFileName
- Suppression de la WebPart
Voyons ensemble la fonction DeleteWebPartViaCAML :

Les amateurs reconnaîtront l'utilisation de l'outil CAMLViewer.
Ici on récupère, via une requête CAML, tout les éléments du catalogue de webpart qui sont liée à CleanWebpart.webpart, puis on les supprime.
Quel en est l'effet ? Dorénavant, un utilisateur ne pourra plus rajouter cette webpart dans la collection de site concernée.
Néanmoins, toute les webparts ajoutées antérieurement continuerons de fonctionner normalement (tant que la DLL sera dans le GAC).
Pour finir, il est intéressant de noter que l'on pourrait pousser le vice jusqu'à ajouter automatiquement la webpart sur la homePage (par exemple) du site WSS via l'utilisation du SPLimitedWebPartManager. Ce manager permet (entre autres choses) de manipuler (Ajout, Suppresion, Modification, Connection, etc...) les webparts sur une page de webpart.
Bien sur, tout ceci aurait pu être fait différemment et de manière plus complète (gestion d'erreurs, commentaires ^^) mais je suis sur que vous avez saisi l'idée.
<Philippe/>