Sharepoint XSLT数据视图:获取过去30天内创建的所有项目

时间:2009-10-23 17:50:58

标签: sharepoint xslt

我知道您可以创建一个基本视图来执行此操作,但我真正需要的是XSLT数据视图中的查询,该查询将显示@Status ='Open'和@Created<的所有记录。 30天前

我打算显示一个图表,显示任务在没有处理的情况下在管道中停留的时间。因此,我所做的是创建了一个XSLT数据视图,该数据视图过滤数据源以仅提取仍处于打开状态的项目。然后在xsl中,我只想做类似的事情:

<xsl:variable name="THIRTYdaysCount" select="count(/dsQueryResponse/Rows/Row[normalize-space(@Created) &lt; $THIRTYdays])" />

我认为这不会起作用,因为数据需要格式化,我也无法获得$ THIRTYdays。有谁能告诉我一个如何做这个的例子吗?

4 个答案:

答案 0 :(得分:0)

THIRTY天是计算列还是类似的? Xsl不适用于日期计算。

您是否尝试过使用DataFormWebPart?它仍然使用XSL呈现它的输出,但允许在使用CAML检索之前过滤数据,并且过滤器可以绑定到查询字符串变量,控制值,CAMl值等等。

谷歌搜索DataFormWebPart将导致大量的解释/教程。

答案 1 :(得分:0)

使用caml查询和内容编辑器Web部件

    <Query>
    <ViewFields><FieldRef name='Title'/></ViewFields>
    <Where>
       <Gt>
           <FieldRef Name='Modified' />
           <Value Type='DateTime'>2009-10-05<</Value>
       </Gt>
    </Where>
...

答案 2 :(得分:0)

也许我错过了你想要做的事情,但这个片段是一个CAML查询,在过去的30天里用任何创建日期来提取任何东西?

<WHERE>
<GE>
<FieldRef Name="Created"/>
<Value Type="DateTime"><Today OffsetDays="-30" /></Value>
</GE>
</WHERE> 

您必须添加Status = Open。​​

请参阅此article on creating CAML queries - 而且U2U's CAML builder tool也非常好。

答案 3 :(得分:0)

我带着一个非常丑陋的日期来进行字符串和比较方法:

    <xsl:variable name="THIRTYdaysDate">
        <xsl:call-template name="SubMonth">
                        <xsl:with-param name="StartDate" select="ddwrt:TodayIso()" />
                        <xsl:with-param name="MonthsToAdd" select="1" />
        </xsl:call-template>    
</xsl:variable>
<xsl:variable name="SIXTYdaysDate">
        <xsl:call-template name="SubMonth">
                        <xsl:with-param name="StartDate" select="ddwrt:TodayIso()" />
                        <xsl:with-param name="MonthsToAdd" select="2" />
        </xsl:call-template>    
</xsl:variable>
<xsl:variable name="NINETYdaysDate">
        <xsl:call-template name="SubMonth">
                        <xsl:with-param name="StartDate" select="ddwrt:TodayIso()" />
                        <xsl:with-param name="MonthsToAdd" select="3" />
        </xsl:call-template>    
</xsl:variable>

<xsl:variable name="THIRTYdays" select="count(/dsQueryResponse/Rows/Row[number(concat(substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),0,5), 
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),5,2),
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),7,2))) &gt;= $THIRTYdaysDate])" />
<xsl:variable name="SIXTYdays" select="count(/dsQueryResponse/Rows/Row[number(concat(substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),0,5), 
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),5,2),
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),7,2))) &gt;= $SIXTYdaysDate])" />
<xsl:variable name="NINETYdays" select="count(/dsQueryResponse/Rows/Row[number(concat(substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),0,5), 
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),5,2),
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),7,2))) &gt;= $NINETYdaysDate])" />
<xsl:variable name="GREATERdays" select="count(/dsQueryResponse/Rows/Row[number(concat(substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),0,5), 
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),5,2),
                substring(ddwrt:FormatDateTime(string(@Created), 1033, 'yyyyMMdd'),7,2))) &lt; $NINETYdaysDate])" />
<xsl:variable name="AllTasks" select="count(/dsQueryResponse/Rows/Row)" />