Pergunta

Estou trabalhando com o SharePoint 2007.Tento modificar o DVWP com o XSLT.

A web part extrai os dados da lista, o que eu quero fazer é apenas classificar os dados e mostrar os resultados.- Não consigo ordenar os dados diretamente porque preciso ordenar/agrupar pelo campo que é um campo de escolha, então não consigo.

A única solução viável para mim foi modificar o XSLT.Tudo correu bem até que me deparei com um problema e esse problema é meio estranho.

Quando uso sort, ele não mostra o primeiro valor da tabela!Quando removo a classificação, tenho 4 valores (únicos) que deveria ter, mas eles não estão ordenados, assim que obtenho a classificação dentro de obtenho 3 valores únicos, o que perde o primeiro.E eu não entendo totalmente como isso é possível.

Fornecerei a você pedaços de XSLT que uso, pois pode ser uma vantagem para me ajudar a entender o que estou fazendo de errado.

Para distinguir os valores únicos, eu uso isto:

<xsl:key name="ByCategory" match="/dsQueryResponse/Rows/Row" use="@Category" />

Neste subgrupo (submodelo), recebo este comportamento estranho:

<xsl:call-template name="dvt_2.body">
<xsl:with-param name="Rows" select="$Rows" />
</xsl:call-template>


 <xsl:template name="dvt_2.body">
 <xsl:param name="Rows" />
     <td>
   <xsl:for-each select="$Rows[generate-id()=generate-id(key('ByCategory',@Category)[1])]"> 
           <xsl:sort select="@Category"/>
                     <xsl:call-template name="dvt_2.rowview">
           </xsl:call-template>
           </xsl:for-each>
 </td>
</xsl:template>

Como eu disse antes, se eu remover a classificação, tudo ficará bem, mas não será classificado, mas preciso classificar.

Qualquer ideia?

desde já, obrigado

PS:se o código XSLT completo for necessário, eu fornecerei.

Foi útil?

Solução

Encontrei a solução e quero compartilhar com os demais, talvez isso os ajude no futuro ou com aqueles que possam se deparar com o mesmo problema.

Portanto, o problema real estava em um teste if que não deixou o primeiro nó passar:

<xsl:template name="dvt_2.rowview"> 
    <xsl:if test="(position()=1)or(@Category!= (preceding-sibling::*[1]/@Category))">   
    //xslt
    </xsl:if>   
</xsl:template>

Então, toda vez que eu ligava, a especificação da segunda categoria da lista classificada (ou da primeira categoria da lista não classificada) não passava no if e é por isso que não consegui imprimi-la.

Remover este teste resolveu o problema.

Espero que isso seja útil para outros

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top