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

Philippe Sentenac est Consultant SharePoint à Wygwam en région Parisienne. Il intervient essentiellement sur des missions liées à SharePoint (2007 et 2010 ) mais aussi autour du Web 2.0. Plus généralement, il s'intéresse à l'ASP.Net (MVC) , à Silverlight, et à tout ce qui est orienté Web en rapport avec les nouvelles technologies, qu'il pratique depuis 2006. Féru de développement, il est passionné par les problématiques de méthodologies et d'industrialisation du développement.

Les 10 derniers blogs postés

- [SharePoint] Roadshow Microsoft SharePoint Solutions par Le petit blog de Pierre / Pierre's little blog le il y a 3 heures et 5 minutes

- Les actualités de c2i.fr : 28 Mai - 3 Juin par Richard Clark le il y a 22 heures et 2 minutes

- [Office 365] Utiliser le modèle objet client SharePoint en PowerShell vers SharePoint Online par Blog de SPBrouillet (Pierrick BROUILLET) le 06-03-2012, 19:07

- Roslyn fluent APIs: RoslynHelper NuGet package par Matthieu MEZIL le 05-31-2012, 01:24

- Pour rappel ! Les spécifications des protocoles Office et SharePoint sont disponibles sur MSDN par Julien Chable le 05-29-2012, 12:33

- Joyeux anniversaire Nix par The diary of EBArtSoft le 05-29-2012, 01:00

- Imagine Cup 2012, Make a Sign en finale par Le Blog (Vert) d'Arnaud JUND le 05-23-2012, 12:57

- Kinect 1.5 is out ! par Cyril Sansus le 05-21-2012, 17:47

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le 05-21-2012, 08:50

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le 05-20-2012, 23:45