La Content Query Web Part è una delle web part di default di SharePoint (versione Enterprise), che ci permette di selezionare uno o più contenuti (anche da siti e/o liste diversi dal sito corrente) e di presentarli all'interno di una pagina SharePoint secondo una grafica di default o tramite una personalizzazione XSLT.
Solitamte non la uso quasi mai, perchè comunque preferisco scrivermi qualcosa di custom al posto di star dietro alla sintassi XSLT, ma questi sono più che altro punti di vista :)
Siccome però la visualizzazione di default, al 99%, non rispecchia mai la visualizzazione che vogliamo invece per il nostro sito SharePoint, sia in termini grafici che in termini di dati che vengono renderizzati, è necessario scrivere un pò di codice XSLT per modificare questo rendering ed adattarlo al resto del layout.
Quando si procede con la creazione di questo XSLT bisogna sapere bene che la Content Query Web Part espone i dati che preleva da liste o document library SharePoint in formato XML e che questo XML è strutturato, chiaramente, in base al numero e alla tiplogia dei campi di ogni contenuto.
Ecco quindi il problema: non è sempre immediato sapere quali campi abbiamo a disposizione per il rendering nel nostro file XSLT. Questo perchè la web part non ha modo di dircelo all'interno delle sue configurazioni, ma solo quando stiamo per stampare a video i risultati.
Per capire quali sono questi campi, dobbiamo fare una modifica ad uno dei file XSLT di default su cui si basa il rendering (sempre di default) della Content Query Web Part: il file ItemStyle.xsl, che troviamo all'interno della "Style Library" una volta che abilitiamo le feature enterprise di SharePoint.
Nel dettaglio, è necessario aggiungere a quel file XSLT, il seguente codice:
<xsl:template name="ShowFields" match="Row[@Style='ShowFields']" mode="itemstyle">
<xsl:variable name="SafeLinkUrl">
<xsl:call-template name="OuterTemplate.GetSafeLink">
<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
</xsl:call-template>
</xsl:variable>
<a href="{@LinkUrl}"><xsl:value-of select="@Title" /></a>
<ul>
<xsl:for-each select="@*">
<xsl:sort select="name()"/>
<li>
<xsl:value-of select="name()" />
<xsl:text disable-output-escaping="yes"> </xsl:text>
<xsl:value-of select="." />
</li>
</xsl:for-each>
</ul>
</xsl:template>
Fatto questo, non ci resta che selezionare il template "ShowFields" tra le proprietà della Content Query Web Part posta nella pagina e visualizzare il risultato.
Vi assicuro che questo estratto di codice è davvero utile. Potete così visualizzare tutti i campi di ogni elemento ritornato dalla query sui contenuti di SharePoint, con il relativo internal name da utilizzare poi all'interno dei vostri template XSLT personalizzati.