[XSL/SPS2010] Sortierproblem beim Gruppieren

kickerxy123

Erfahrenes Mitglied
Guten Tag,

ich habe ein Problem beim Gruppieren/Sortieren einer SharePoint-Liste per XSL.

Wenn ich nach etwas sortiere und gleichzeitig nach etwas gruppiere, so ist er Output schematisch:
GROUP1: A B C D
GROUP2: E F G
GROUP1: H
GROUP2: I J
....

d.h. er priorisiert das Sortieren über das Gruppieren. Ich hätte es gern genau anders herum.

Deshalb hatte ich mehrere Ansätze:

HTML:
							<xsl:call-template name="dvt_1.body">
								<xsl:with-param name="Rows" select="$Rows[position() &gt;= $FirstRow and position() &lt;= $LastRow]" />
								<xsl:with-param name="FirstRow" select="1" />
								<xsl:with-param name="LastRow" select="$LastRow - $FirstRow + 1" />
							</xsl:call-template>
In dem CodeSegment wird das Template aufgerufen, dass alle Reihen der Liste rendert. Mein Ansatz war es, den Parameter "Rows" bereits richtig sortiert zu übergeben. Kann ich das irgendwie realisieren?

oder: Innerhalb des Templates geschieht folgendes:
HTML:
	<xsl:template name="dvt_1.body">
				<xsl:param name="Rows"/>
				<xsl:param name="FirstRow" />
				<xsl:param name="LastRow" />
				<xsl:for-each select="$Rows">
<!--...jetzt kommen alle Spalten, Formatierungen etc -->
</xsl:for-each>

Jetzt hätte ich gedacht, dass ich ein xsl:sort in die FOR-Schleife einbaue und dann mein Problem gelöst ist. Leider nicht.

Generell war mein Ansatz:
-Sortiere nach dem, nach dem er gruppieren soll
-Sortiere danach nach dem, nach dem er sortieren soll

Ich denke, dass mein Ansatz realisierbar ist (Zwei einfache xsl:sort hintereinander bewirken dies ja normalerweise auch so).


Ich hoffe, dass ihr mir helfen könnt. Falls ihr noch weitere Angaben braucht, zögert nicht zu fragen. Ich wollte allerdings nicht alle 3000 Zeilen anhängen ;)


Danke und Gruß,
kickerxy
 

deepthroat

Erfahrenes Mitglied
Hi.

Was genau meinst du mit gruppieren?

Welche XSL Version setzt du denn ein?

Und kannst du mal ein einfaches Beispiel machen, ausgehend von Eingabewerten bis zum Ziel was du dann als Ergebnis haben möchtest?

Wenn du .NET einsetzt, könntest du auch selbst Funktionen definieren.

Gruß
 

kickerxy123

Erfahrenes Mitglied
Hallo deepthroat,

danke für die Antwort.

Ich habe inzwischen herausgefunden, warum mein xsl:sort innerhalb von xsl:for-each nicht funktioniert hat:

HTML:
<!--Falsch: --> <xsl:sort select="$dvt_groupfield" />
<!--Richtig: --> <xsl:sort select="@*[name()=$dvt_groupfield]" />

Denjenigen, die mit XSL oft arbeiten, wäre es vermutlich nicht passiert/direkt aufgefallen. Aber da ich erst vor kurzem mit XSL angefangen habe, kam ich nicht darauf, dass ich den zu übergebenen String noch in ein XSL-Pfad matchen muss.

Auf jeden Fall sortiert und gruppiert er mir jetzt alles genauso, wie ich es haben wollte. Ich habe zwar noch ein kleines anderes Problem, werde dazu aber dann ggf. einen neuen Thread starten.

Danke soweit und Gruß,
kickerxy
 

kickerxy123

Erfahrenes Mitglied
Hi,

danke für den Hinweis. Meine jetzige Gruppierlösung ist nicht so schick, wie mir die Muenchian Methode erscheint. Eventuell werde ich das noch ändern. XSLT 2.0 kann ich leider nicht benutzen.

Da es aber ersteinmal produktiv so läuft, wie es soll, belasse ich das vorerst so.

Viele Grüße
k.