lundi 27 août 2007

La webpart de requête de contenu MOSS ne fonctionne pas...

J'ai remarqué au cours de mes différentes navigations sur des sites MOSS, que la Content Query Webpart était potentiellement très utile pour récupérer du contenu dynamique à partir d'une requête, et le mettre en forme via XSL.

>> Je décide donc de me lancer avec une petite maquette, afin de voir jusqu'ou on peut aller dans cette personnalisation ...

Après avoir créé une collection de sites MOSS, je cherche à ajouter et à faire fonctionner la webpart de requête de contenu (également connu sous le nom Content Query WebPart, ou encore CQWP). (Environnement : 1 server MOSS FR avec un serveur SQL2005 pour le repository. Connexion avec le compte administrateur système de la collection de sites.)

1. Premier problème : la webpart n'est pas disponible dans la liste de webpart.
Solution : l'ajouter au site via la page d'administration 'Galerie de composants WebPart', en sélectionnant 'Nouveau', puis en cochant 'ContentByQueryWebPart' puis 'compléter la galerie'.

Ensuite, on ajoute la webpart sur notre page ASPX : on passe en mode édition, 'ajouter une webpart', puis ajout de 'ContentByQueryWebPart' à notre page.

2. Deuxième problème : la webpart est bien importée sur la page, mais affiche le message suivant :



"Impossible d'afficher ce composant WebPart. Pour résoudre le problème, ouvrez
cette page Web dans un éditeur HTML compatible avec Windows SharePoint Services
tel que Microsoft Office SharePoint Designer. Si le problème persiste, contactez
l'administrateur de votre serveur Web."


Si on essaye de "modifier le composant webpart partagé" par le menu contextuel de la webpart, on a alors un autre message d'erreur :




"Impossible de charger le fichier XSL. Le fichier spécifié est introuvable.

(Exception de HRESULT : 0x80070002)Page de maintenance des composants
WebPart : Si vous y êtes autorisé, vous pouvez utiliser cette page pour fermer
temporairement des composants WebPart ou supprimer des paramètres personnels.
Pour plus d'informations, contactez l'administrateur de votre site.

Résoudre les problèmes liés à Windows SharePoint Services. "

Solution : activer un feature responsable de la publication de la bibliothèque de feuilles de style...
Dans la page "Paramètres du site", cliquer sur le lien "Fonctionnalités de la collection de sites", puis activer la fonctionnalité "Infrastructure de publication Office SharePoint Server" en bas de page, qui dans mon cas, était désactivé par défaut.
(en version US, ce feature s'appelle "Office SharePoint Server Publishing Infrastructure")

Cela permet notamment de créé la bibliothèque de styles (accessible via l'URL http:///sites/Style Library/), dans laquelle la webpart va piocher sa feuille de style XSL.

A ce moment là, si l'on revient sur notre page d'accueil sur laquelle se trouve la webpart en erreur, celle ci affiche desormais plus rien (blanc), mais plus d'erreur. Il est alors possible de cliquer sur "modifier le composant webpart partagé" et ainsi de modifier les propriétés de la webpart.

Il est normalement possible de modifier la feuille de style utilisée par la webpart : ItemStyle.xsl.

3. Troisième problème : une modification de la feuille de style ItemStyle.xsl n'impact pas notre webpart : la liaison entre la feuille XSL et la webpart ne se fait pas bien.

Explication : en fait, au moment où l'on a activé la fonctionnalité MOSS (feature), une webpart "Composant WebPart de requête de contenu" (en version US : "Content Query Web Part") a été ajoutée et activée sur la bibliothèque de webpart de notre collection de site. C'est donc cette webpart qu'il faut utiliser, et non 'ContentByQueryWebPart' pour bénéficier de la liaison XSL. On supprime et on ajoute la nouvelle webpart.


(suite de la personnalisation dans un prochain post)

NOTE : la webpart de flux RSS fonctionne sur le même principe, et avec les mêmes sources : il faut donc que ce feature "Infrastructure de publication Office SharePoint Server" soit activé pour la faire fonctionner.


vendredi 24 août 2007

"Vous essayez d'utiliser un objet SPWeb qui n'est plus disponible..."

Vous êtes en plein développement de webpart pour MOSS, vous vous efforcez de suivre les bonnes pratiques de développement en libérant les ojets après utilisation (via "using" par exemple), et vous tombez sur cette erreur:
"Vous essayez d'utiliser un objet SPWeb qui n'est plus disponible..."

Voilà le genre de code que vous avez écrit, et pourtant, qu'il ne faut pas faire lorsque lon manipule des objet Sharepoint comme les SPWeb :

using (SPWeb web = SPContext.Current.Web)
{
...
}

En fait, il s'agit d'une référence vers un objet existant, et pas de la création d'un nouvel objet... la fin du paragraphe détruit donc l'objet SPS (qui n'était pas le votre) et tout nouvel appel à ce SPWeb provoque le message d'erreur...

La solution consiste donc à ne pas libérer/détruire cet objet, et laisser Sharepoint le gérer... (plus de 'using' dans notre cas)

Pour les best practices Microsoft, c'est ici que ca se passe (US) :
http://msdn2.microsoft.com/en-us/library/ms778813.aspx