SharePoint 2007 : Customization de la Content Query Web Part et Déploiement

Sans aller jusqu'a dire que la customization de la content query web part requiert un doctorat en manipulation de fichiers XSLT et XML, il y toujours quelques trucs et astuces à connaitre si l'on veut arrivé à ses fins à ce sujet, comme par exemple ce petit template pour vérifier les informations passées à votre web part dont je vous parlais dans le précédent billet.

<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>

Si vous avez lu les derniers billets de Gribouillon et moi-même, vous avez bien compris le "Comment" de la customization de votre CQWP (Content Query Web Part) mais nos billets respectifs étaient un peu flous sur une étape cruciale de la customization : le Déploiement !

En effet, la plupart des "steps by steps" concernant la content query web part se basent sur la customization de deux fichiers "standard" de SharePoint : ContentQueryMain.xsl et ItemStyle.xsl via SharePoint Designer.

Alors bien sur, dans un petit environnement de production ou dans un environnement de développement, ce n'est pas un problème... Mais si on veut faire les choses proprement, comment peut-on faire pour déployer les modifications apportées à votre content query web part ? Voyons cela ensemble...

Au départ, Supposons que nous ayons 4 web parts basées sur la Content Query Web Part:

cqwp

  • La première récupère les évènements non débutés et affiche leur date de début et de fin en les regroupant par site
  • La deuxième récupère les documents que j'ai modifiés en affichant la date de modification et en regroupant par site
  • la troisième récupère toute les taches que j'ai affectées à une personne en précisisant son nom et prénom avec sa "due date"
  • la dernière récupère toutes les taches qui m'ont été assignées en précisant la "due date" et une icone indiquant si la tache est commencé ou pas.

Bref quelque chose dans ce style.

exemple 

Je vous passe les customizations nécessaires pour arriver à ce résultat, nous les avons déjà vu auparavant. Sachez simplement que pour obtenir ce résultat, j'ai du :

  • Modifier le fichier ContentQueryMain.xsl (pour créer des nouveau templates permettant de reformatter la date et le nom dans un format plus lisible)
  • Modifier le fichier ItemStyle.xsl (pour créer mes nouveaux styles liés à chaque web part)
  • Uploader deux images (la croix rouge et l'onglet vert)
  • Exporter et modifier le fichier .webpart de 4 web part basées sur la content query web part (on verra ces modifications dans la suite de ce billet)

Le tout ayant été fait dans mon environnement de développement via SharePoint Designer ou via l'interface de SharePoint.

Maintenant que tout est fonctionnel, je voudrais déployer tout cela proprement, ce qui signifie passer par le système de features et de solution.

Tout d'abord, j'effectue une copie des fichiers XSLT "customizés", puis je reset les fichiers XSL initialement modifiés. Je me retrouve grosso modo avec cette arborescense :

arbo1

Je publie les deux nouveaux fichiers XSL sur mon disque et je peux commencer à créer ma feature et solution.

publishfile

Voila l'aborescence de mon projet VisualStudio.

arborescence projet

La création de la feature en elle-même n'a rien de compliqué, on va utiliser l'élément module pour uploader tout les fichiers dont nous avons besoin :

Edit : Vous avez sans doute remarqué que je fais reference à des fichiers myContentQueryMain.xsl et myItemStyle.xsl alors que les images ci-dessus font reference à des fichiers ContentQueryMainXXXXX.xsl. Il s'agit bien sur des mêmes fichiers, j'ai simplement renommer les fichiers entre mes différents screenshots.
Merci à TheMit de m'avoir permis de corriger cet aspect qui pouvait préter à confusion.

Feature.xml

<Feature xmlns="http://schemas.microsoft.com/sharepoint/"

        Id="846DF70F-5F35-41D8-9FC3-B647442E1039"

        Title="my Custom Content Query Web Part"

        Description="Upload Four Custom Web Parts with XSL and Images"

        Scope="Site"

        Hidden="False"

        Version="1.0.0.0">

 

  <ElementManifests>

    <ElementManifest Location="elements.xml" />

  </ElementManifests>

</Feature> 

Element.xml

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <Module Url="_catalogs/wp"

      Path="Webparts"

      RootWebOnly="TRUE">

    <File Url="myDocuments.webpart"

        Type="GhostableInLibrary">

      <Property Name="Group" Value="my" />

      <Property Name="Title" Value="Recent Documents" />

    </File>

    <File Url="myEvents.webpart"

        Type="GhostableInLibrary">

      <Property Name="Group" Value="my" />

      <Property Name="Title" Value="Next Five Upcoming Events" />

    </File>

    <File Url="myRequests.webpart"

      Type="GhostableInLibrary">

      <Property Name="Group" Value="my" />

      <Property Name="Title" Value="My Requests" />

    </File>

    <File Url="myTasks.webpart"

      Type="GhostableInLibrary">

      <Property Name="Group" Value="my" />

      <Property Name="Title" Value="My Tasks" />

    </File>

  </Module>

  <Module Url="Style Library/XSL Style Sheets"

            Path="XSL"

            RootWebOnly="TRUE">

    <File Url="myContentQueryMain.xsl"

        Name="myContentQueryMain.xsl"

        Type="GhostableInLibrary">

    </File>

    <File Url="myItemStyle.xsl"

      Name="myItemStyle.xsl"

      Type="GhostableInLibrary">

    </File>

  </Module>

  <Module Url="Style Library/Images"

      Path="Images"

      RootWebOnly="TRUE">

    <File Url="bad.png"

        Name="bad.png"

        Type="GhostableInLibrary">

    </File>

    <File Url="good.png"

      Name="good.png"

      Type="GhostableInLibrary">

    </File>

  </Module>

</Elements>

Il nous faut maintenant faire deux modifications dans chaque fichier .webpart pour lui indiquer quel fichier .xsl il doit récupérer pour afficher nos styles spéciaux.

 fichier webpart

Lors du dernier billets nous avions vu l'utilité de la propriété "CommonViewFields", maintenant nous allons changer la valeur de MainXslLink et ItemXslLink par la valeur de l'url des nouveaux fichiers XSL que nous avons uploadé dans la librairie de Style de la collection de Site.

Normalement, tout est fin prêt ! Il ne reste plus qu'a crée le fichier wsp.

Ceux d'entre vous qui connaissent déjà WSPbuilder l'auront compris à la vue de l'arborescence de mon projet, j'utilise cet utilitaire pour générer le fichier wsp automatiquement (bien plus simple que de l'écrire à la main). La particularité de cet outil est qu'il se base sur une arborescence qui mimique celle du répertoire 12 afin de créer la solution.

arborescence projet

J'utilise ensuite un fichier bat pour générer la solution (mySolution) et deux fichiers pour mettre à jour la solution (CQWP_Custom_Delete_Add et Update) et l'activer sur mon site de test.

fichiers

scripts

Evidemment, ce n'est pas encore la solution parfaite, je reste persuadé qu'il y a encore de nombreuses optimisations à faire pour avoir un déploiement encore plus "propre", n'hésitez pas à m'en faire part via vos commentaires.

<Philippe/>

Publié lundi 29 octobre 2007 08:00 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 : Customization de la Content Query Web Part et Deploiement @ mardi 30 octobre 2007 15:44

Approche nickel

Cependant, pour 8 fichiers dans 3 adresses, l'ecriture du Manifest et du makecab n'est pas une sinécure

Faut pas toutjours faire confiance à l'outil, de plus on peut se permettre bien des libertés grace à son propre manifest de deploy

Allez, un poil de courage

PS : le WSPBuilder.config contient plein de paramétres qu'il est bon de changer sinon c'est un WSP un poil verbeux ;)

themit

# re: SharePoint 2007 : Customization de la Content Query Web Part et Deploiement @ mercredi 31 octobre 2007 11:45

Haha !

Je n'ai jamais aimé écrire les fichiers Manifest et DDF même pour le déploiement d'un seul fichier, je suis une faineasse pour ce genre de tâches :). Si un outil peut le faire pour moi (et bien en plus), j'ai clairement tendance à l'utiliser.

J'ai eu une seule fois un problème de déploiement avec le WSP généré mais effectivement Gat m'avait parlé des possibilités de le configurer/améliorer.

Je suppose que tu nous parleras de tout ça en détails pendant le prochaine mercredi du dev :)

phil

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

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01