SharePoint 2007 : Déploiement de WebPart et Utilisation de SPFeatureReceiver

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) :

webpart_code

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

  • Feature.xml

    feature_xml_1
     
  • Elements.xml

    element_xml

  • [nomdewebpart].webpart

    fichier_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) :

feature_xml_full

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 :

Public method FeatureActivated Appelée après activation de la feature
Public method FeatureDeactivating Appelée lors de la désactivation de la feature
Public method FeatureInstalled Appelée après installation de la feature
Public method FeatureUninstalling Appelée lors de la désinstallation de la feature

Il ne vous restera plus qu'à overrider les méthodes qui vous intéressent (activation, désactivation, etc...) :

feature_deactivating

Le mécanisme est relativement simple :

  1. 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)
  2. Récupération du catalogue de Webpart sous la forme d'une SPList
  3. Récupération du fichier descriptif de la Webpart (CleanWebpart.webpart) via la fonction GetWebPartFileName
  4. Suppression de la WebPart

Voyons ensemble la fonction DeleteWebPartViaCAML :

delete_webpart

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.

feature_activated   

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/>

Publié lundi 17 mars 2008 08:30 par phil
Classé sous , , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: SharePoint 2007 : Déploiement de WebPart et Utilisation de SPFeatureReceiver @ mardi 18 mars 2008 15:02

Ca j'adore comme post !!!

Nickel, dommage que tu ne fournisse pas un lien de download, ca aiderais bien du monde

Crois moi

++

themit

About phil

Leader Technique SharePoint chez Winwise, je m'occupe de missions d'expertise autour de WSS 3.0 et MOSS 2007, tout en me tenant au courant de ce qui se fait autour de Asp.net, Silverlight et des technologies Web by Microsoft en général.

Les 10 derniers blogs postés

- Sortie de Silverlight 2 et de Flash player 10 par Nix's Blog le il y a 8 heures et 55 minutes

- TCB : Que faire en salle blanche ? par The Mit's Blog le il y a 10 heures et 16 minutes

- Debug : Make Object ID - Comment connaitre l'état d'une variable lorsque celle-ci n'est pas accessible dans le scope courant par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 23 heures et 12 minutes

- IIS7 : Configuration des handlers pour l'upload de fichier - interdire certains fichiers de s'exécuter | accéder à des fichiers .cs, .aspx par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-14-2008, 19:49

- Microsoft annonce le nom commercial de Windows 7 par Code is poetry le 10-14-2008, 12:07

- [Silverlight] Téléchargez la version finale (et les outils associés) dès maintenant ! par Thomas Lebrun le 10-14-2008, 10:37

- Vilain bug avec IQueryable et la syntaxe yield : System.BadImageFormatException "An attempt was made to load a program with an incorrect format. (Exce... par Matthieu MEZIL le 10-14-2008, 07:48

- SQL Server 2008 : Un livre en cours de préparation ! par SQL Server vu par Christian Robert le 10-13-2008, 22:56

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-13-2008, 21:59

- PDC 2008 - J-14 ! par Nix's Blog le 10-13-2008, 20:14