如何过滤到数据视图中的“已连接项目”列?

时间:2016-11-09 20:57:50

标签: xslt sharepoint-2013 dataview

当我使用“过滤器”对话框生成过滤器时,SPD会生成以下行过滤器...

<xsl:variable name="Rows" select="/dsQueryResponse/Benefits/Rows/Row[normalize-space(@Benefit_x0020_Type) = $pBenefit and normalize-space(@Level) = $pLevel]"/>

@ Benefit_x0020_Type的过滤器工作正常(这只是一个常规的,非链接的项目),但@Level的过滤器不起作用。 @Level是一个Joined Item,声明​​如下......

<xsl:value-of disable-output-escaping="yes" select="../../../Projects/Rows/Row[@ID=current()/@Project_x003a_ID]/@Level" />

如何使过滤器适用于加入项目?

1 个答案:

答案 0 :(得分:0)

我找到的解决方案是编辑$ Rows节点集以包含连接字段,然后再由SharePoint呈现...

<xsl:variable name="Rows" select="/dsQueryResponse/Benefits/Rows/Row"/>

<xsl:variable name="myRowsFractured">
  <xsl:for-each select="$Rows">
    <xsl:variable name="projectID" select="@Project_x003a_ID"/>
    <xsl:variable name="level" select="/dsQueryResponse/Projects/Rows/Row[@ID=$projectID]/@Level"/>
    <xsl:if test="$level = $pLevel">
      <xsl:copy>
        <xsl:copy-of select="@*|node()"/>
        <xsl:attribute name="Level">
          <xsl:value-of select="$level"/>
        </xsl:attribute>
        <xsl:attribute name="Title">
          <xsl:value-of select="/dsQueryResponse/Projects/Rows/Row[@ID=$projectID]/@Title"/>
        </xsl:attribute>
      </xsl:copy>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

<xsl:variable name="myRows" select="msxsl:node-set($myRowsFractured)/*"/>

(从查询字符串中获取$ pLevel)

然后我将$ Rows的任何后续引用替换为$ myRows。该技术具有任何计算(例如dvt_RowCount)有效的优点。