Project Server 2007, SharePoint 2007 : Extraire les WebParts et Pages d'un site Project Server 2007
Après une fraiche installation de Project Server 2007 et la création d’un projet, on constate :
- La création d’un espace projet basée sur le modèle de site SiteTemplates\PWS, en tant que sous site du site Project Web Access (SiteTemplates\PWA)
- La richesse des outils sur le site Project Web Access (SiteTemplates\PWA)
Pour plus d’informations sur ces sites, rendez-vous sur le billet suivant :
http://blogs.codes-sources.com/davidrei/archive/2009/03/19/project-server-2007-d-couverte-du-produit-et-installation.aspx
Nous allons donc voir très précisement les outils déployés par le modèle de site PWA.
Présentation du contenu PWA :
L’image ci-dessus montre l’arborescence du modèle de site PWA. On s’aperçoit que celui-ci copie des WebParts (contenu dans le repertoire DWP)
ainsi que des Pages (*.aspx) à la création d’un nouveau site de type PWA.
Une question se pose alors ; comment puis-je bénéficier de l’ensemble de ces fonctionnalités ?
1. Création d’une feature (Project Web Access Feature)
Pour réutiliser les élements du site PWA, j’ai donc tout naturellement encapsuler tous les éléments du modèle de site PWA dans une feature SharePoint.
Je réalise ensuite l’activation de la feature dans une autre collection de site, en dehors de mon espace PWA.
Dés lors, si on essaye d’utiliser une WebPart, il se produit une erreur 401, et si on utilise une page comme
, on obtient l’ecran suivant :
Pourquoi ? .. :(
2. Problème des WebParts
Un coup d’oeil rapide sur le dwp d’une webpart comme , nous permet d’identifier sa classe :
En ouvrant la classe depuis la dll située dans le GAC de notre serveur,
on s’aperçoit dans un premier temps, qu’elle hérite de PWAPart :
Puis, dans un second temps, la présence d’un attribut intéressant : sur la classe
En redéployant ma WebPart mais surtout en spécifiant le PSIUrl comme ci-dessous, .. ma WebPart devient fonctionnelle :)
Il nous reste donc plus que les pages :) ..
3. Problème des Pages
Pour résoudre le problème des Pages, j’ai utilisé le même raisonnement. Tout d’abord un coup d’oeil sur une de nos pages (Project.aspx) :
Mmmhh .. Elle hérite donc de PJBaseWebPartPage … mais encore ?
Notre constructeur de page cherche à récupérer l’identifiant du site PWA associé au contexte du site courant. Et GetPWASiteId ? ça fait quoi ?
GetPWASiteID utilise les propriétés du site SharePoint pour obtenir l’url ! C’est embêtant.. nous n’avons pas cette propriété car nous sommes dans un site standard..
Aucun problème rajoutons là :D :
Cet extrait de code me permet juste de recopier les propriétés de mon site projet PWA\Project dans un autre site. On obtient ensuite le résultat attendu.
En conclusion, il est possible de vous affranchir de la plateforme mise en place, et de construire la votre en vous basant peut être sur un existant. Pour ma part, il ne reste plus qu’à paramétrer toutes ces actions dans une feature un peu plus propre avec une gestion des configurations. Mais le concept est tout à fait réalisable.
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 :