随笔 - 170  文章 - 1 评论 - 2374 trackbacks - 136

适用场景:

三个列表进行Join,然后试图上显示ProjectedField,而ProjectedField不支持设置DisplayName.默认只能显示英文名。

join caml如下:

<View>
<Query>
    <OrderBy>
      <FieldRef Name="ID" />
    </OrderBy>
  </Query>
  <ViewFields>
    <FieldRef Name="Attachments" />
    <FieldRef Name="LinkTitle" />
    <FieldRef Name="FirstName" />
    <FieldRef Name="Company" />
    <FieldRef Name="WorkPhone" />
    <FieldRef Name="HomePhone" />
    <FieldRef Name="Email" />
    <FieldRef Name="TuMuLookup" />
    <FieldRef Name="ZhuanYe" />
  </ViewFields>
  <Joins>
    <Join Type="LEFT" ListAlias="TuMu">
      <Eq>
        <FieldRef Name="TuMuLookup" RefType="ID" />
        <FieldRef List="TuMu" Name="ID" />
      </Eq>
    </Join>
    <Join Type="LEFT" ListAlias="ZhuanYe">
      <Eq>
        <FieldRef List="TuMu" Name="ZhuanYeLookup" RefType="Id" />
        <FieldRef List="ZhuanYe" Name="ID" />
      </Eq>
    </Join>
  </Joins>
  <ProjectedFields>
    <Field List="ZhuanYe" Type="Lookup" Name="ZhuanYe" ShowField="Title" />
  </ProjectedFields>
  <XslLink Default="TRUE">main.xsl</XslLink>
  <RowLimit Paged="TRUE">30</RowLimit>
  <Toolbar Type="Standard" />
</View>

解决方法:

采用自定义xsl来解决。

1)在layouts/xsl下增加一个xsl文件:xsl_zhuanye.xsl

<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" 
                xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
                xmlns:SharePoint="Microsoft.SharePoint.WebControls"   xmlns:ddwrt2="urn:frontpage:internal">
  <xsl:output method="html" indent="no" encoding="uft-8" />
  <xsl:include href="/_layouts/xsl/main.xsl" />
  <xsl:include href="/_layouts/xsl/internal.xsl" />
  <xsl:decimal-format NaN="" />
  <xsl:template match="/">  
    <xsl:apply-templates mode="RootTemplate" select="$XmlDefinition" />        
    <hr/>
  </xsl:template>
  <xsl:template name="FieldRef_header.ZhuanYe" match="FieldRef[@Name='ZhuanYe']" mode="header">
    <th nowrap="" scope="col" onmouseover="OnChildColumn(this)" class="ms-vh2">
      <div class="ms-vh-div">   
        专业
      </div>
    </th>
  </xsl:template>
</xsl:stylesheet>

备注:<xsl:template match="/"> 模板可以删掉

2)修改列表webpart属性,这是其Xsl链接为/_layouts/xsl/xsl_zhuanye.xsl

3)iisreset清除视图xsl缓存。

posted on 2014-06-13 14:31 jianyi 阅读(...) 评论(...) 编辑 收藏