Я пытаюсь создать отфильтрованный DataView для MOSS 2007 с использованием SharePoint Designer 2007. Следующий упрощенный пример демонстрирует то, что я пытаюсь выполнить.
Предположим, у меня есть два списка: Цвета и Люди.В списке людей есть столбец под названием «Любимый цвет», который позволяет пользователю выбирать из списка цветов.
Я хочу создать DataView, в котором будут отображаться только те цвета, которые никто не выбрал в качестве своего любимого цвета.
Я успешно создал DataView, который показывает каждый цвет и число людей, которые выбрали этот цвет, вставив следующий код XSL:
<xsl:value-of select="count(/dsQueryResponse/People/Rows/Row[@Favorite_x0020_Color = current()/@Title])" />
Я пыталсяприменить к той же логике к запросу DataView, как показано ниже, но это все равно вернуло все строки:
<xsl:variable name="Rows" select="/dsQueryResponse/Colors/Rows/Row[count(/dsQueryResponse/People/Rows/Row[@Favorite_x0020_Color = current()/@Title]) = 0]"/>
Я думаю, что проблема с вышеизложенным состоит в том, что во время выполнения запроса текущая () функция не работает, потому что нет текущей строки.Поэтому я также попытался использовать полную ссылку, которая дала те же результаты:
<xsl:variable name="Rows" select="/dsQueryResponse/Colors/Rows/Row[count(/dsQueryResponse/People/Rows/Row[@Favorite_x0020_Color = dsQueryResponse/Colors/Rows/Row/@Title]) = 0]"/>
Можно ли выполнить запрос, который я хочу, используя XSL?Если так, то где я ошибся?Полный XSL приведен ниже:
<XSL><xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" 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"/>
<xsl:decimal-format NaN=""/>
<xsl:param name="dvt_apos">'</xsl:param>
<xsl:variable name="dvt_1_automode">0</xsl:variable>
<xsl:template match="/">
<xsl:call-template name="dvt_1"/>
</xsl:template>
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">Table</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Colors/Rows/Row[count(/dsQueryResponse/People/Rows/Row[@Favorite_x0020_Color = dsQueryResponse/Colors/Rows/Row/@Title]) = 0]"/>
<table border="0" width="100%" cellpadding="2" cellspacing="0">
<tr valign="top">
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<th class="ms-vh" width="1%" nowrap="nowrap"></th>
</xsl:if>
<th class="ms-vh" nowrap="nowrap">Color</th>
<th class="ms-vh" nowrap="nowrap">Number of People</th>
</tr>
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="dvt_1.body">
<xsl:param name="Rows"/>
<xsl:for-each select="$Rows">
<xsl:call-template name="dvt_1.rowview"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="dvt_1.rowview">
<tr>
<xsl:if test="position() mod 2 = 1">
<xsl:attribute name="class">ms-alternating</xsl:attribute>
</xsl:if>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="nowrap">
<span ddwrt:amkeyfield="" ddwrt:amkeyvalue="string($XPath)" ddwrt:ammode="view"></span>
</td>
</xsl:if>
<td class="ms-vb">
<xsl:value-of select="@Title"/>
</td>
<td class="ms-vb">
<xsl:value-of select="count(/dsQueryResponse/People/Rows/Row[@Favorite_x0020_Color = current()/@Title])" />
</td>
</tr>
</xsl:template>