>CQWP en ItemStyle.xsl, een interessant duo

>

Met de content query webpart (CQWP) kan je items uit verschillende lijsten of sites weergeven in 1 “weergave”.

Enkele voorbeelden:

  • Weergeven van alle nieuwsberichten vanuit de sitecollectie van een bepaald inhoudstype.
  • Weergaven van alle kalenderitems van een bepaald inhoudstype om een algemene kalender weer te geven.
  • Taken vanuit een takenlijst van een bovenliggende site weergeven op een onderliggende vergaderwerkruimte.

Je kan voor deze zaken de CQWP gebruiken. Standaard kan je een aantal soorten van weergaves (stijlen) kiezen (vb. met opsommingsteken, met afbeelding, zonder opsommingsteken, …) maar vaak wil je je eigen stijl maken.

In dit voorbeeld willen we items uit een takenlijst weergeven op een andere manier. Voor elke taak willen we zien aan wie deze is toegekend en wanneer de eventuele einddatum is.

image

Wat moet je hiervoor weten?

De CQWP werkt nauw samen met het ItemStyle.xsl bestand. In dit bestand staan de verschillende stijlen geconfigureerd. Je kan dit bestand vinden in de root site van de site collection:

image

Hoe gaan we te werk?

We voegen een CQWP toe op de pagina waar we hem wensen.

image

In de instellingen van de webpart (bewerken > gedeeld webonderdeel wijzigen) passen we de query aan (welke items willen we weergeven?).

image

We kiezen het juiste lijsttype (Taken) en het juiste inhoudstype (Lijstinhoudstype, Taak). Eventueel kan je nog een aantal filters instellen zoals de verlopen taken niet tonen of de taken die minder dan 20% voltooid zijn niet weergeven, …

We klikken op ok om te bevestigen.

Nu moeten we nog de nieuwe stijl aanmaken door de ItemStyle.xsl te editeren.

Wel checken het bestand ItemStyle.xsl uit en openen het in een xml editor (Visual Studio, …)

Je kan zien dat elke stijl er definieert staat. De makkelijkste manier om een nieuwe stijl toe te voegen is de laatste kopiëren en deze te plakken net voor de </xsl:stylesheet> tag.

We passen de naam van de nieuwe stijl aan:

<xsl:template name="TaskStyle" match="Row[@Style=’TaskStyle‘]" mode="itemstyle">

Je ziet dat er een aantal <xsl:variable> – variabelen worden gedefinieerd. We voegen er 2 toe: een taskOwner en de DueDate.

<xsl:variable name="TaskOwner">
  <xsl:choose>
    <xsl:when test="@AssignedTo=”"> </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="substring-after(@AssignedTo,’#’)" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

<xsl:variable name="DueDate">
  <xsl:value-of select="ddwrt:FormatDateTime(string(@DueDate) ,1033 ,’dd-MM-yyyy’)" />
</xsl:variable>

Na het definieren van de variabelen plaatsen we de html opmaak in het bestand.

<div id="linkitem" class="item">
  <a href="{$DetailPageLink}" title="{@LinkToolTip}">
    <xsl:value-of select="$DisplayTitle"/>
  </a>
  <div class="description">
    <span style="padding-left: 20px; font-size: smaller;">
      <xsl:if test="string-length($TaskOwner) != 0">
        toegekend aan <xsl:value-of select="$TaskOwner" />
      </xsl:if>
      <xsl:if test="string-length($DueDate) != 0">
        (vervaldatum <xsl:value-of select="$DueDate"/>)
      </xsl:if>
    </span>
  </div>

</div>

Je kan hier de variabelen gebruiken die je eerder hebt gedefinieerd. Ik plaats ook een controle om te zien als de velden al of niet zijn ingevuld.

We bewaren nu de wijzigingen in het ItemStyle.xsl bestand en publiceren een nieuwe versie.

Op dit moment kunnen we de nieuwe stijl gebruiken. Wanneer je je net toegevoegde CQWP opnieuw gaat editeren kan je nu deze stijl kiezen in de rubriek “presentatie”

image

Je zal niet dat dit nog niet werkt zoals je verwacht.
We zijn namelijk nog 1 ding vergeten.

Standaard worden de velden “AssignedTo” en “DueDate” niet opgehaald door de CQWP zodat die niet worden weergegeven. Je moet deze manueel toevoegen. Hiervoor exporteren we de webpart.

image

Het exportbestand (.webpart) editeren we mbv een xml editor.

We zoeken de property met de naam CommonViewFields en passen deze aan zodat onze gevraagde velden ook worden weergeven.

<property name="CommonViewFields" type="string">DueDate;AssignedTo</property>

We bewaren deze aanpassingen en we importeren deze webpart opnieuw op de pagina (de vorige webpart die op de pagina stond mag je verwijderen).

Nu worden de velden wel correct weergeven.

De volledige code bestanden kan je hier downloaden.

Posted in UncategorizedTagged