Spring til indholdet

Gruppering efter dato i SharePoint med CQWP i 4 enkle trin

Content Query WebPart kan ikke gruppere efter dato ud af boksen. Tricket er at gruppere efter en beregnet tekstkolonne og vise datoen fra en anden, med en ny header-stil i Header.xsl.

SharePoint 2010 3 min. læsning

Hvis man nogensinde har rodet med XSL-itemstyles til CQWP i SharePoint, ved man, hvor værdifulde de kan være. Og også, hvor frustrerende de kan være fra tid til anden.

Det er ikke så svært, som det måske lyder. Ud af boksen understøtter Content Query WebPart (CQWP) ikke gruppering efter dato. Det, man skal forstå, er, hvordan Header.xsl virker, når man grupperer. Tricket er at gruppere efter en simpel tekstkolonne, men vise datokolonnen.

Jeg er ved at lave en logbog, der af en eller anden grund skal bruge “Group by date” med CQWP. Hey … jeg havde brug for en case til det her, så hvorfor ikke?

De 4 trin#

  1. Opret en liste med en beregnet kolonne til datoen
  2. Opret en ny header-stil i header.xsl
  3. Tilføj en Content Query WebPart
  4. Ret beskrivelsen (valgfrit)

Trin 1: Opret en liste med en beregnet kolonne til datoen#

Opret en liste med følgende kolonner:

  • Title (Single line of text)
  • Description (Multiple lines of text)
  • ModifiedGroup (Calculated)
  • ModifiedDisplay (Calculated)

I kolonnen ModifiedCreate formaterer man kolonnen Created (eller en hvilken som helst anden datokolonne, man roder med), så den ser sådan ud:

Formlen for ModifiedGroup: =TEXT(Modified,“yyyymmdd”).

For at få en pænt formateret dato til min gruppering har jeg lavet kolonnen ModifiedDisplay. Den viser datoen i dansk format. Den beregnede kolonne ser sådan ud:

Formlen for ModifiedDisplay: =TEXT(Modified,“d. mmmm - yyyy”).

Trin 2: Opret en ny header-stil i header.xsl#

Åbn SharePoint Designer, og gå til “/Style Library/XSL Style Sheets/Header.xsl”. Redigér filen i avanceret tilstand.

Kopiér XSL-koden nedenfor ind.

1<xsl:template name="Logbook" match="*[@GroupStyle='Logbook']" mode="header">
2<div class="groupheader item medium">
3<xsl:value-of select="@ModifiedDisplay" />
4</div>
5</xsl:template>

Trin 3: Tilføj en Content Query WebPart#

Find den side, man bruger til at vise sin logbog, eller hvad man nu arbejder på. Min forespørgsel ser sådan ud:

Afsnittet Query i CQWP: elementerne hentes fra listen LogBook.

Min præsentation ser sådan ud. Det vigtige er at vælge at sortere efter ModifiedDisplay. Ellers får man ikke den pæne titel.

Afsnittet Presentation: gruppering efter ModifiedGroup, sortering efter ModifiedDisplay og gruppestilen Logbook.

Slutresultatet skulle gerne ligne dette:

Resultatet med “4. April - 2013” som overskrift, men beskrivelserne viser stadig div-tags.

Trin 4: Ret beskrivelsen#

Den kloge læser har allerede bemærket, at der er noget galt med outputtet fra beskrivelsesfeltet. For at rette det skal man gå til “/Style Library/XSL Style Sheets/ItemStyle.xsl”. Redigér filen i avanceret tilstand.

Opret en ny skabelon til brug med logbogen. Redigér aldrig nogen af standardskabelonerne. Det er bare god praksis ikke at rode for meget med Microsofts kode. Det er bedre at tilføje mere end at erstatte det eksisterende.

Kopiér gerne min udgave, som ligger meget tæt på originalen, men læg mærke til linjen for @Description. Den lyder nu:

1 <xsl:value-of select="@Description" disable-output-escaping="yes" />

Det er disable-output-escaping=”yes”, der gør hele forskellen.

Husk at redigere CQWP, så den bruger itemstilen “Logbook”.

Styles: både Group style og Item style er sat til Logbook.

Her er min XSL-kode, der giver den rigtige visning:

 1<xsl:template name="Logbook" match="Row[@Style='Logbook']" mode="itemstyle">
 2<xsl:variable name="SafeLinkUrl">
 3<xsl:call-template name="OuterTemplate.GetSafeLink">
 4<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
 5</xsl:call-template>
 6</xsl:variable>
 7<xsl:variable name="DisplayTitle">
 8<xsl:call-template name="OuterTemplate.GetTitle">
 9<xsl:with-param name="Title" select="@Title"/>
10<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
11</xsl:call-template>
12</xsl:variable>
13<div class="item">
14<div class="link-item">
15<xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
16<a href="{$SafeLinkUrl}" title="{@LinkToolTip}">
17<xsl:if test="$ItemsHaveStreams = 'True'">
18<xsl:attribute name="onclick">
19<xsl:value-of select="@OnClickForWebRendering"/>
20</xsl:attribute>
21</xsl:if>
22<xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
23<xsl:attribute name="onclick">
24<xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
25</xsl:attribute>
26</xsl:if>
27<xsl:value-of select="$DisplayTitle"/>
28</a>
29<div class="description">
30<xsl:value-of select="@Description" disable-output-escaping="yes" />
31</div>
32</div>
33</div>
34</xsl:template>

Det giver mig denne visning:

Det endelige resultat: datoen som overskrift og beskrivelserne uden div-tags.

Ikke flere trin.

Tweet det#

  • Lær at redigere XSL-itemstyles for at “gruppere efter dato” i SharePoint 2010 – Klik for at tweete
  • Gruppering efter dato i SharePoint med CQWP i 4 enkle trin Klik for at tweete

Sidst opdateret

Del

Relaterede

Tags