BorisSchapira.com

Life is too short to be small
  • rss
  • Accueil
  • A propos
  • Contact
  • Wishlist
  • Ressources SharePoint
  • Univers Netvibes
  • Galerie Flickr

[MOSS 2007] 5 étapes pour maitriser le Content Query Web Part

Boris | 29 juin 2007

Le Content Query Web Part est le module Web pour Microsoft Office SharePoint Server 2007 permettant de récupérer une liste quelconque du site courant pour l’afficher dans la page.

Les modalités d’affichage sont de deux types : la sélection et la mise en page.

La sélection consiste à filtrer et grouper les éléments, à partir des propriétés renseignées dans les colonnes de la liste, pour n’afficher que ceux que l’on désire afficher. Dans une liste de « documents publiés dans la Presse », on pourra ainsi choisir d’afficher sur la page dédiée à un magasine uniquement les articles qui y ont été publiés (filtrage sur la source de l’article) ou seulement les articles du mois de mai (filtrage sur la date de parution).

La mise en page définit la façon dont les éléments vont être affichés. Elle se définit principalement dans la feuille de style de votre site et dans le fichier ItemStyle.xsl qui se situe dans <SiteSP>/Style Library/XSL Style Sheets/. Consistant en un template XSL, la mise en page peut profiter de différentes fonctions XML.

Les mises en page définies dans ItemStyle.xsl apparaissent ensuite dans l’attribut Style d’élément (ItemStyle) du Content Query Web Part, dans « Présentation ».

Ce qu’il faut savoir

Le Content Query Web Part ne récupère pas toutes les colonnes de votre liste. En fait, il ne récupère à chaque requête qu’une petite partie des informations. Par défaut, il est ainsi impossible d’afficher dans un Content Query Web Part le contenu d’une page d’article. Pour cela, il va falloir manipuler un peu.

On pourrait le faire en codant à la main un Web Part sous Visual Studio. Mais avouez que ce n’est pas très sport et surtout, ça entraine une charge inutile car il est possible d’utiliser les outils existants pour contourner ce problème.
Ouvrez SharePoint Designer et rendez vous dans <SiteSP>/_catalogs/wp.

Copiez l’actuel ContentQuery.Web Part puis éditez la copie renommée avec un nom qui fait sens. Le code de ce fichier est composé de balises XML. Modifiez ou ajoutez la propriété suivante :

<property name="CommonViewFields" type="string"></property>

Cette propriété concerne les colonnes qui devront exceptionnellement être considérées. Vous devez connaitre le nom en dur de votre colonne et son type puis les entrer sous le modèle « Nom, Type ; ».
Pour connaitre le nom de votre colonne en dur (qui peut être différent du nom affiché), rendez vous en mode interface dans les paramètres de votre liste, puis éditez la colonne qui vous intéresse. Dans la barre d’adresse de votre navigateur, notez ce qui est noté entre « &Field= » (et « & »).

Attention, certains caractères sont traduits par leurs valeurs HTML. Par exemple, la colonne « Type de Publication » deviendra « Type%5Fx0020%5Fde%5Fx0020%5Fpublication ». Evitez donc, au moment de nommer vos colonnes, les espaces et caractères spéciaux.

Sachez également que le nom en dur (celui qu’on retrouve dans la barre d’adresse) ne se changera pas si vous renommez votre colonne.

Exemple de procédure complète

Votre bibliothèque de pages contient des articles référencés (une référence consiste en un numéro à 3 chiffres dans cet exemple) et vous voulez afficher dans un Content Query Web Part l’ensemble des articles dont la référence est supérieurdes à 200 avec pour chaque article la photo Image Report de l’article, le nom de l’auteur, son email, et un aperçu du contenu de son article.

1)      Vérifiez que votre bibliothèque contient bien une colonne « Auteur » et une colonne « Courrier Electronique » (d’origine sur MOSS 2007). Vérifiez la présence de votre colonne personnalisée « Ref » et son renseignement correct pour chacun des articles.

2)      Ouvrez ItemStyle.xsl et ajoutez ce nouveau style à la fin, juste avant la balise </xsl:stylesheet>:

<xsl:template name="customItemStyle" match="Row[@Style=' customItemStyle ']" mode="itemstyle">
   <
xsl:variable name="len" select="150"/>
   <
xsl:variable name="SafeImageUrl">
      <
xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
         <
xsl:with-param name="UrlColumnName" select="'ImageUrl'"/>
      </
xsl:call-template>
   </
xsl:variable>
   <
xsl:variable name="SafeLinkUrl">
      <
xsl:call-template name="OuterTemplate.GetSafeLink">
         <
xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
      </
xsl:call-template>
   </
xsl:variable>
   <
xsl:variable name="DisplayTitle">
      <
xsl:call-template name="OuterTemplate.GetTitle">
         <
xsl:with-param name="Title" select="@Title"/>
         <
xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
      </
xsl:call-template>
   </
xsl:variable>
   <
xsl:variable name="LinkTarget">
      <
xsl:if test="@OpenInNewWindow = 'True'" >_blank</xsl:if>
   </
xsl:variable>
   <
xsl:variable name="JustContent">
      <
xsl:call-template name="removeMarkup">
         <
xsl:with-param name="string" select="@PublishingPageContent" />
      </
xsl:call-template>
   </
xsl:variable>
   <
div id="linkitem" class="item">
      <
table style="width:100%;">
         <
tr>
            <
xsl:if test="string-length($SafeImageUrl) != 0">
               <
td class="image-area-left">
                  <
a href="{$SafeLinkUrl}" target="{$LinkTarget}">
                    <
img class="image-fixed-width" src="{$SafeImageUrl}" alt="{@ImageUrlAltText}"/>
                  </
a>
               </td>
            </xsl:if>
         <
td class="link-item">
            <
xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
               <
a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
                  <
xsl:value-of select="$DisplayTitle"/>
               </a>
               <
div class="description">
                  <
xsl:value-of select="concat(substring($JustContent,0,$len),substring-before(substring($JustContent,$len, $len+30),' '))"/>
                  <
a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="En savoir plus">…</a><br />
             
 Contact : <a href="mailto:{@EMail}"><xsl:value-of select="@_Author"/></a>
               </
div>
            </td>
         </tr>
      </table>
   </div>
</
xsl:template>

Cette mise en page affichera les premiers mots du contenu de l’article (la définition sera composée des mots entamés dans les 150 premières lettres de l’article).

3)      Copiez ContentQuery.Web Part et renommez en customArticleQuery.Web Part.
Ouvrez customArticleQuery.Web Part et ajoutez :

<property name="CommonViewFields" type="string">
  
PublishingPageContent,Note; _Author,Text; EMail, Text; Ref, Integer;
</
property>

Pour que votre Content Query Web Part requête, en plus des champs habituels, le contenu des pages, l’auteur, son email et la référence de la page.

Profitez-en pour redéfinir les propriétés « Title » et « Description » de customArticleQuery.Web Part afin de le rendre facilement trouvable dans votre galerie de Web Parts.

4)      Insérez votre Web Part personnalisé dans votre page. Filtrez sur la colonne de référence pour n’afficher que les éléments dont la référence est supérieure à 200.

5)      Choisissez le style d’élément (Item Style) « customItemStyle ».

Et voilà , vous maitrisez votre Content Query Web Part. A vous la puissance des listes sans avoir ouvert Visual Studio. Elle est pas belle la vie ?

Commentaires
Soyez le premier à commenter !

Tags
Content Query Web Part, Sharepoint, SharePoint Designer

[SharePoint] Récupérer des informations de colonnes personnalisées dans des Librairies SharePoint à travers XSLT

Boris | 23 mai 2007

Lorsque vous utilisez un Content Query Web Part, le comportement associé par défaut pour la présentation des informations est celui contenu dans le fichier XML situé à l'adresse <root>/Style Library/XSL Style Sheet/ItemStyle.xsl, entre les balises <xsl:template name="Default"… et </xsl:template>.

Cette mise en page par défaut a donc cette tête :

<div id="linkitem" class="item">
<xsl:if test="string-length($SafeImageUrl) != 0">
<div class="image-area-left">
<a href="{$SafeLinkUrl}" target="{$LinkTarget}">
<img class="image" src="{$SafeImageUrl}" alt="{@ImageUrlAltText}" />
</a>
</div>
</xsl:if>
<div class="link-item">
<xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
<xsl:value-of select="$DisplayTitle"/>
</a>
<div class="description">
<xsl:value-of select="@Description" />
</div>
</div>
</div>

Ce qui correspond à l’image de publication alignée à gauche, avec un titre/lien vers l’article et sa description.

Lorsque vous ajoutez des colonnes personnalisées, par exemple dans le cadre de la création d’un nouveau type de contenu de mise en page, il peut arriver que vous ne sachiez pas le nom exact donné à vos colonnes par SharePoint dans ses extractions XML (voir même que vous ne connaissiez pas les traductions anglaises des colonnes existantes).

Vous pouvez récupérez le nom de vos colonnes grâce à Microsoft Office SharePoint Designer.

Ouvrez le sous-site dans lequel se trouve la liste concernée. Affichez la barre d’outils Data Source Library. Recherchez à l’intérieur des Librairies SharePoint celle que vous désirez requêter. Cliquez, puis sélectionnez Show Data. Là , choisissez la colonne qui vous intéresse, cliquez-droit et Copy Item XPath.

Votre presse-papier contient désormais le raccourci menant à la colonne que vous désirez requêter.

Commentaires
Soyez le premier à commenter !

Tags
Sharepoint, SharePoint Designer

Page 1 sur 11

Quelques âmes égarées...

Twitter : Boris...

  • @madd0 Vous auriez pu m'y mettre (dans les "has been MSP") 1 hr ago
  • More updates...

Derniers articles publiés

  • Les 10 défis du blogueurs
  • Un été bien chargé (photos from Flickr)
  • A la rentrée…
  • [Rappel] Tenté par un stage en Finance de Marché ?
  • PhotoSynth est désormais ouvert au public

Derniers apports des visiteurs

  • bénédicte: Mouhahaha ! C’est...
  • Cryzou: Bonjour, Sauriez vous me dire...
  • Loïc: Bon apres trois mois de...
  • M2057 - Ceci n’est pas un blog: ...
  • Matt: Ho j’avais pas vu…...
  • Nikope: A la rentrée commençait le...
  • Cédric: Je me souviens du concours...
  • Berious: :eek: C’est pas vrai!...

Globalement, de quoi ça parle ?

Silverlight Insolite Sharepoint Photos Jeu TechEd2006 Windows Vista MSDN MSP Libellule Cinema Facebook Video Bon Plan Concours Imagine Cup Visual Studio .NET Sexy Etudiants Popfly Design Mobile Politique Windows Live Finance GUWIV Web Humour Coding Sécurité Stage Microsoft GeekementCorrect Microsoft Office Musique ESIEE BlogParties Microsoft Wordpress Geek XBox360 Buzz Google Messenger Nexeo Forza Motorsport 2

Consulter les archives

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
Creative Commons License
rss Flux rss des commentaires valid xhtml 1.1 design by jide powered by Wordpress get firefox