如何限制SharePoint XSL查询中的结果

时间:2010-12-29 08:46:24

标签: sharepoint xslt xpath

我正在创建一个SharePoint网站,我们将用它来报告我们业务中使用的卡车的问题。链接到我创建的列表将是一个页面,将显示卡车的概述,一个小卡车图标将显示卡车当前状态。绿色和卡车没问题(没有未解决的问题),红色和卡车有一个状态为“Undrivable”的开放式问题,橙色并且有两个问题打开,要求用户在使用之前进一步查看卡车,最后是灰色卡车,当有一个新问题被创建时没有被查看(不确定它是否可以驱动)。

我设法创建了“仪表板”并且我的限制XSL / XPATH知识能够添加卡车并复制上面的描述但是...在我的测试中我创建了4个问题,例如,如果其中三个更改为状态已关闭,一个左侧为Undrivable我将在页面上显示四个图标,三个用绿色卡车,最后一个用红色。所以从理论上说它有效,但我显然只想看最后一辆卡车,一辆卡车。我对看到其他人不感兴趣。

<xsl:template name="dvt_1.rowview">
 <xsl:variable name="CountReport" select="count(/dsQueryResponse/Rows/Row[@Highloader='GGEU12' and @Status!='Closed'])" />
 <xsl:variable name="MoreThan" select="$CountReport &gt; 1" />
 <xsl:variable name="NoReports" select="$CountReport = 0" />
 <xsl:variable name="Closed" select=" @Highloader='GGEU12' and @Status='Closed'" />
<xsl:choose>
<xsl:when test="$MoreThan">
<div class="ms-vb"><img title='More than one report exist!' border='0' alt='In Progress' src='highloader/Library/hl-orange.png' /></div>
</xsl:when>
<xsl:otherwise>
   <div class="ms-vb"><xsl:value-of disable-output-escaping="yes" select="@Icon" /></div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

我希望有更多知识的人能为我找到最后一块拼图! 感谢您阅读并提出问题以填补我上面留下的任何空白。

大卫

1 个答案:

答案 0 :(得分:0)

谢谢大家的意见。请在下面找到“仪表板”的简化版本,其工作原理与我想要的完全相同。您可以更改上次状态:无法更改为“已关闭”,以查看页面仅显示状态为“可驱动”的第一个问题。

issues.xml:          

<catalog>
<issue>
    <title>Crack on the window</title>
    <truck>GGEU12</truck>
    <status>Drivable</status>
</issue>
<issue>
    <title>Need new smelling tree</title>
    <truck>GGEU12</truck>
    <status>Closed</status>
</issue>
<issue>
    <title>Topping up cooling</title>
    <truck>GGEU12</truck>
    <status>Closed</status>
</issue>
<issue>
    <title>Flat tire</title>
    <truck>GGEU12</truck>
    <status>Undrivable</status>
</issue>
</catalog>

status.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:variable name="CountIssues" select="count(catalog/issue[(truck)='GGEU12' and (status)!='Closed'])" />
<xsl:variable name="MoreThan" select="$CountIssues &gt; 1" />

<html>
<body>
<h2>Truck Status Dashboard</h2>
<table border="1">
  <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Truck</th>
  </tr>

<xsl:choose>
<xsl:when test="$MoreThan">

  <tr>
    <td>Orange truck icon</td>
    <td>Orange truck icon</td>
  </tr>

</xsl:when>
<xsl:otherwise>

  <xsl:for-each select="catalog/issue[(truck)='GGEU12' and (status)!='Closed']">

  <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="truck"/></td>
  </tr>

  </xsl:for-each>
</xsl:otherwise>
</xsl:choose>

</table>

</body>
</html>

</xsl:template>
</xsl:stylesheet>

所以我遇到的问题是SharePoint。我试图在页面上包含我所拥有的所有内容,但我怀疑你们必须重现我的设置以查看问题。下面的例子将产生一个如上所述的四个问题的列表和一个选择值,它显示计数变量得到的数量,即2,并显示四次(存在的项目数量):

<WebPartPages:WebPartZone runat="server" Title="loc:Row1" ID="Row1" FrameType="TitleBarOnly" Orientation="Horizontal"><ZoneTemplate>
<WebPartPages:DataFormWebPart runat="server" IsIncluded="True" NoDefaultStyle="TRUE" ViewFlag="0" Title="Service Requests" __markuptype="vsattributemarkup" partorder="1" __WebPartId="{F711505C-6DEC-414D-9742-9327B43A6EB4}" id="g_f711505c_6dec_414d_9742_9327b43a6eb4">
<DataSources><SharePoint:SPDataSource runat="server" DataSourceMode="List" UseInternalName="true" selectcommand="&lt;View&gt;&lt;/View&gt;" id="dataformwebpart2"><SelectParameters><WebPartPages:DataFormParameter Name="ListID" ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{EDBDB620-5543-464F-801A-891B15105E59}"/></SelectParameters><DeleteParameters><WebPartPages:DataFormParameter Name="ListID" ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{EDBDB620-5543-464F-801A-891B15105E59}"/></DeleteParameters><UpdateParameters><WebPartPages:DataFormParameter Name="ListID" ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{EDBDB620-5543-464F-801A-891B15105E59}"/></UpdateParameters><InsertParameters><WebPartPages:DataFormParameter Name="ListID" ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{EDBDB620-5543-464F-801A-891B15105E59}"/></InsertParameters></SharePoint:SPDataSource></DataSources>

<datafields>@Title,Titel;@Status,Status;@truck,truck;</datafields>
<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"/>
<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/Rows/Row"/>
    <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">Truck</th>
            <th class="ms-vh" nowrap="nowrap">Status</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">
 <xsl:variable name="CountIssues" select="count(/dsQueryResponse/Rows/Row[@truck='GGEU12' and @Status!='closed'])" />
 <xsl:value-of select="$CountIssues" />
    <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="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="view"></span>
            </td>
        </xsl:if>
        <td class="ms-vb">
            <xsl:value-of select="@truck"/>
        </td>
        <td class="ms-vb">
            <xsl:value-of select="@Status"/>
    g   </td>
    </tr>
</xsl:template>
</xsl:stylesheet>

解决方案的助手应创建一个新列表,其中包含三列,卡车,标题和状态。创建一个新的webpart页面,并在SharePoint设计器中创建列表的数据视图,这里的xsl目标是显示绿色图标,如果卡车的状态是可驱动的(或没有报告),红色时无法访问,最后是橙色图标存在冲突状态的两个以上问题。当我这样做时,它会显示尽可能多的图标。

感谢阅读!