2010-05-28 25 views
5

Estoy intentando cambiar la representación de una columna de lista en la página de vista de lista.Representación xsl personalizada para el campo de búsqueda en la vista de lista (SharePoint 2010)

Después de unos tutoriales y tirando logré crear un XSLT para un campo de moneda calculado y un poco de pelo (de fldtypes_XXXXXX.xsl):

<xsl:template match ="FieldRef[@Name='MarkCalc']" mode="Text_body"> 
    <xsl:param name="thisNode" select="."/> 
    <xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping ="yes"/> 
</xsl:template> 

<xsl:template match="FieldRef[@Name='CurrencyTest']" mode="Number_body"> 
    <xsl:param name="thisNode" select="."/> 
    <b><xsl:value-of disable-output-escaping="yes" select="$thisNode/@*[name()=current()/@Name]" /></b> 
</xsl:template> 

Luego trató de hacer lo mismo para un campo de búsqueda, pero simplemente no funcionará. Este es mi último intento (lo copié del diseñador de SharePoint). ¿Qué me estoy perdiendo?

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body"> 
    <xsl:param name="thisNode" select="."/> 
    <b><xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes" /></b> 
</xsl:template> 

Respuesta

8

Como resultado, esto es un problema totalmente xsl.

El procesador Xsl elige la plantilla para usar en función de los atributos "coincidencia" y "modo". Cuando dos o más plantillas coinciden, la que se utiliza se elige según la prioridad. De manera predeterminada, hay tres niveles de prioridades que se asignan en función de qué tan específica es su coincidencia.

De http://www.codetoad.com/xml/xslt8.asp:

  • patrones que responden a una clase de nodos, como *, lo que coincide con todos los elementos , se les asigna una prioridad implícita -0,5

  • Los patrones que los nodos de coincidencia según su nombre, como Carácter, que coincide con los elementos, tienen asignada una prioridad implícita de 0

  • patrones que coincidan con los nodos de acuerdo con su contexto, tales como castmember/carácter, que coincide con elementos cuya matriz es un elemento , se les asigna un prioridad implícita de 0,5

Al asignar prioridades basan en patrones , no importa cómo específica la información de contexto es: si especifica cualquier contexto para un nodo entonces la plantilla tiene una prioridad de 0.5. Por ejemplo, Descripción/Enlace/Carácter tiene exactamente la misma prioridad que Descripción // Carácter.

En SharePoint hay dos plantillas para campos de búsqueda

<xsl:template name="FieldRef_Lookup_body" match="FieldRef" mode="Lookup_body" ddwrt:dvt_mode="body">... 

y

<xsl:template match="FieldRef[@Encoded]" mode="Lookup_body" ddwrt:dvt_mode="body"> 

primera tiene prioridad 0 (partido de acuerdo con su nombre), segundo tiene prioridad 0.5 (partido según el contexto).

Mi plantilla personalizada que debe pasar por encima codificada de búsqueda

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">... 

también tiene la prioridad por defecto de 0,5 (recuerda, "... no importa qué tan específico de la información de contexto es ..."), por lo El procesador xsl elige el último definido (*).

Para solucionar esto, puede usar la prioridad de atributo y establecerlo en valor más alto que la plantilla predeterminada. En mi caso, me puse a 1.

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" priority="1" mode="Lookup_body">... 



(*) Al parecer cargas SharePoint plantillas personalizadas antes de cargar su propio. Si esto fue una elección basada en algunos criterios técnicos o para garantizar que aprendo xsl, sigue siendo un misterio.

+0

Me gusta su (*) nota :) – Kai

0

Tuve un problema similar, pero estaba usando Sharepoint 2013. En Sharepoint 2013 esto se hace usando la representación clienteide, por lo que este método NO funcionará. Insted echa un vistazo a http://www.sharepointnutsandbolts.com/2013/01/using-jslink-to-change-ui-of-sharepoint_20.html, o utiliza este método (http://social.msdn.microsoft.com/Forums/sqlserver/en-US/9425e392-26ec-466b-a086-6581e035258f/sharepoint-2013-fldtypesxsl) para forzar el procesamiento del servidor.

Cuestiones relacionadas