Aujourd'hui, je vais profiter de vous donner quelques informations sur la customization de la content query web part pour vous conter une expérience que j'ai eu récemment chez un client que je pourrais résumer à "Rien ne sert de courir; il faut partir à point" ...
Pendant une mission, mon client me présente une page de web part avec la content query web part ci-dessous
Cette web part récupère toutes les tâches dans les listes de tâche du site et des sous-sites. Jusqu'ici rien de transcendant je vous l'accorde.
La demande en question était relativement simple : Afficher pour chaque tâche son site d'appartenance. (Quelque chose comme ca)
Ayant eu l'occasion de faire de la customization de content query, je me dis "Pas de problème, un peu de custo' XLST et XML fera l'affaire !!" ...
Bref ni une, ni deux, je récupère le petit script pour afficher tout les attributs passés en paramètre à la content query web part
<xsl:template name="myCustomStyle" match="Row[@Style='myCustomStyle']" mode="itemstyle">
<xsl:for-each select="@*">
<b>
<xsl:value-of select="name()"/>
</b> = <xsl:value-of select="."/><br/>
</xsl:for-each>
</xsl:template>
J'édite le fichier ItemStyle.xsl dans la librairie de style, pour placer ce template à la fin du fichier avec SharePoint Designer
Je sauvegarde et rafraichis la page, histoire de mettre tout celà à jour et j'ai un nouveau style qui apparait dans ma liste de configuration de ma web part.
Je sélectionne le nouveau style que je viens de créer et ma webpart qui m'affichait
m'affiche ceci :
Le tout étant comme prévu sous la forme Nom de l'attribut = Valeur de l'attribut.
On retrouve ici, certaines valeurs utilisées pour la génération du lien "Hello World" notamment le Title et le LinkUrl mais aussi tout plein d'autre infos qui peuvent être intéressantes comme la date de publication par exemple.
Sur le coup, si mon client avait voulu rajouter une des informations présentes dans la liste des attributs, il m'aurait suffit d'exporter la webpart, éditer le fichier .webpart ci-dessous.
Il me suffirait alors de rajouter les champs en question (comme PubDate) dans la propriété CommonViewFields en précisant leur type sous cette forme <property name="CommonViewFields" type="string">Field1,Text;Field2,Datetime;</property>"
Le premier élément correspond au nom du champs que vous voulez afficher, le deuxième à son type. Vous avez le choix entre :
Text
Note
Number
Currency
Integer
Boolean
DateTime
Threading
Lookup
Choice
URL
Counter
DisplayOnly
RichHTML
Image
Pour savoir quel champs est associé à quel type, il y a deux façons simples :
- Choisir au hasard parmi la liste ci-dessus :)
- Faire comme Miss Solomon, récupérer directement les informations dans les fichiers XML (SCHEMA.XML) associés au champs
Pour finir sur cet apparté, il est à noter qu'il est possible d'hériter de la content query webpart et donc de rajouter des fonctionnalités comme par exemple pouvoir modifier la réquête dynamiquement, de rajouter la gestion des langues ou du paging. En effet, pour rajouter de nouveaux paramètres à la web part, Il suffit d'overrider le comportement de la méthode ModifyXlstArgumentList et de rajouter des paramètres comme le LCID courant, , etc... (Exemple non fonctionnel ci-dessous)
Attention si vous rajoutez un paramètre, il faudra aussi penser à le rajouter dans le fichier ContentQueryMain.xsl pour pouvoir l'utiliser :
Bref, je pense que vous avez compris l'idée générale sur "Comment s'y prendre si on devait customizer la content query web part"...
Mais le problème dans mon cas concernant la demande de mon client, c'est qu'au final la fonctionnalité demandée était présente en standard dans la content query web part !!
Il me suffisait de spécifier un simple regroupement par site...
Pour obtenir ce rendu.
Il est alors possible de modifier le rendu de "Portail Intranet" avec les styles liés au groupe (pour l'avoir plus petit, centré, créer un style custom...)
A noter les différences dans les attributs affichés quand on fait un regroupement par titre
Bref, au final pas mal de possibilités sont fournies en standard dans la content query web part, alors ne faites pas la même erreur que moi et regardez à deux fois avant de vouloir tout customizer :)
Pour finir, voilà quelques liens pour pousser plus loin la personnalisation de cette web part avec notamment la fameuse Enhanced Content Query Web Part qui rajoute entre autres choses, un menu contextuel à chaque élément ainsi que la barre d'outils.
<Philippe/>