views:

1634

answers:

1

I would like to change database column names of a BDC list webpart using an XSL file.

My SQL query is "Select BATCH_ID...", I want to change that column name "BATCH_ID" to "ID" using XSL. I also want to know how $ColName_0 is getting populated with the value 'BATCH_ID'?

Inside the dvt.headerfield template it is sorting and adding sort menu. But $ColName_0 is populated before that template is called. XSLT code is following:

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
  xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:SharePoint="Microsoft.Sharepoint.WebControls"
  exclude-result-prefixes="xsl msxsl ddwrt"
>
  <xsl:output method="xml" indent="yes"/>
  <xsl:param name="dvt_partguid" />
  <xsl:param name="ColName_0"></xsl:param>

  <xsl:template name="dvt.headerfield">
    <xsl:param name="fieldname" />
    <xsl:param name="fieldtitle" />
    <xsl:param name="displayname" />
    <xsl:param name="fieldtype">0</xsl:param>

    <table CtxNum="1" cellspacing="0" class="ms-unselectedtitle" onmouseover="OnMouseOverAdHocFilter(this, '{concat($displayname,$fieldname, $fieldtype, $dvt_partguid)}')">
      <tr>
        <td width="100%" class="ms-vb" nowrap="">
          <a>
            <xsl:attribute name="href">javascript: <xsl:value-of select="ddwrt:GenFireServerEvent(('dvt_sortfield;dvt_sortdir'))" />;</xsl:attribute>
            <xsl:value-of select="$fieldtitle"/>
          </a>                  
        </td>
        <td>
          <img src="/_layouts/images/blank.gif" width="13" style="visibility: hidden" alt="" />
        </td>
      </tr>
    </table>
  </xsl:template>

  <xsl:template match="/">
    <xsl:call-template name="dvt_1" />
  </xsl:template>

  <xsl:template name="dvt_1">
    <xsl:variable name="dvt_StyleName">Table</xsl:variable>

    <table id="BdwpRows" border="0" width="100%" cellpadding="2" cellspacing="0">
      <tr valign="top">
        <th class="ms-vh" width="1" />
        <th class="ms-vh" align="left">
          <xsl:call-template name="dvt.headerfield" ddwrt:atomic="1">
            <xsl:with-param name="fieldname">@BATCH_ID</xsl:with-param>
            <xsl:with-param name="fieldtitle">
              <xsl:value-of select="$ColName_0" />
            </xsl:with-param>
            <xsl:with-param name="displayname">
              <xsl:value-of select="$ColName_0" />
            </xsl:with-param>
            <xsl:with-param name="fieldtype">text</xsl:with-param>
          </xsl:call-template>
        </th>
      </tr>         
    </table>
  </xsl:template>
</xsl:stylesheet>
A: 

Not sure it's the best way, but here's how I did it:

Change:

<xsl:with-param name="fieldname">@BATCH_ID</xsl:with-param> 
    <xsl:with-param name="fieldtitle"> 
        <xsl:value-of select="$ColName_0" /> 
    </xsl:with-param> 
    <xsl:with-param name="displayname"> 
        <xsl:value-of select="$ColName_0" /> 
    </xsl:with-param> 
<xsl:with-param name="fieldtype">text</xsl:with-param> 

To:

<xsl:with-param name="fieldname">@BATCH_ID</xsl:with-param> 
    <xsl:with-param name="fieldtitle"> 
        ID 
    </xsl:with-param> 
    <xsl:with-param name="displayname"> 
        <xsl:value-of select="$ColName_0" /> 
    </xsl:with-param> 
<xsl:with-param name="fieldtype">text</xsl:with-param> 
stealth