2010-05-28 7 views
5

Sto tentando di modificare il rendering di una colonna di elenco nella pagina di visualizzazione elenco.Rendering xsl personalizzato per il campo di ricerca nella visualizzazione elenco (SharePoint 2010)

Dopo alcuni tutorial e un po 'di tirare i capelli sono riuscito a creare un XSLT per un campo di valuta calcolato e (da 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> 

Poi ho cercato di fare lo stesso per un campo di ricerca, ma semplicemente non funzionerà. Questo è il mio ultimo tentativo (l'ho copiato dal designer di SharePoint). Cosa mi manca?

<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> 

risposta

8

Come risulta, questo è interamente un problema xsl.

Il processore Xsl sceglie il modello da utilizzare in base agli attributi "match" e "mode". Quando due o più modelli corrispondono, quello da utilizzare viene scelto in priorità. Di default ci sono tre livelli di priorità che vengono assegnati in base a quanto specifica è la tua corrispondenza.

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

  • modelli che hanno una classe di nodi, ad esempio *, che corrisponde a tutti elementi, viene assegnato un implicito priorità -0,5

  • Patterns che corrispondere i nodi in base al loro nome, come Carattere, che corrisponde agli elementi, viene assegnata una priorità implicita di 0

  • modelli che hanno nodi a seconda del contesto, come castmember/carattere, che corrisponde elementi la cui madre è un elemento , viene assegnato un implicito priorità di 0,5

Nell'assegnazione priorità basano nei modelli , non importa quanto specifiche informazioni di contesto siano : se si specifica un contesto per un nodo quindi il modello ha una priorità di 0,5. Ad esempio, Descrizione/Link/Carattere ha esattamente la stessa priorità di Descrizione // Carattere.

In SharePoint ci sono due modelli per campi di ricerca

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

e

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

primo ha la priorità 0 (incontro secondo il suo nome), secondo ha priorità 0.5 (partita secondo il contesto).

mio modello personalizzato che dovrebbe eseguire l'override codificato ricerca

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

ha anche priorità di default di 0,5 (ricordate, "... non importa come specifica le informazioni di contesto è ..."), in modo da il processore xsl sceglie l'ultimo definito (*).

Per risolvere questo problema è possibile utilizzare la priorità dell'attributo e impostarlo su valore superiore a rispetto al modello predefinito. Nel mio caso, ho impostato a 1.

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



(*) A quanto pare i carichi di SharePoint modelli personalizzati prima di caricare una propria. Se questa è stata una scelta basata su alcuni criteri tecnici o per garantire che impari xsl, resta un mistero.

+0

Mi piace il tuo (*) nota :) – Kai

Problemi correlati