当我使用“过滤器”对话框生成过滤器时,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" />
如何使过滤器适用于加入项目?
答案 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)有效的优点。