SharePoint : ajouter un webpart depuis une feature ?

Pour un de mes clients, j’ai été confronté à la difficulté suivante : comment, depuis une feature, instancier un web part sur la page d’accueil ?

En effet, un de mes features fournit web part spécifique, et je souhaite, à l’activation de la feature, qu’un exemplaire de ce dernier soit disponible sur la page d’accueil.

Tout aurait été simple si je déployait un nouvelle page. En effet, lorsque vous déployez une page, vous le faite via un module. Et dans un module, vous définissez un fichier à déployer :

Ici le noeud “AllUsersWebPart” permet d’ajouter un webpart à un page que vous êtes entrain de déployer. Comment faire alors pour une page existante, comme par exemple le fichier default.aspx ?

Le seul moyen que j’ai trouvé est de passer par un FeatureReceiver. En gros, on capture l’activation de la feature pour aller, en code, chercher la page visée et lui ajouter le web part :

Ce bout de code permet de récupérer les objets essentiels de SharePoint, en respectant la “disposition” de ces objets.

Pour implémenter la méthode OnActivated, il faudra :

  1. Récupérer notre page :
  2. Obtenir l’instance du gestionnaire de webpart
  3. Créer le webpart. Ici j’utilise un fichier .webpart qui contient le webpart au format xml. Vous pouvez assez facilement le générer en exportant un fichier .webpart depuis l’interface utilisateur de SharePoint
  4. L’ajouter à la page
  5. Sauvegarder la page

Ou en mettant tout bout à bout :

Je trouve un peu dommage d’avoir à implémenter cet ajout en code, mais le code reste léger donc cela répondra à la problématique !

Rating 3.50 out of 5
[?]