Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint日期操作和筛选_Sharepoint_Xslt_Date - Fatal编程技术网

Sharepoint日期操作和筛选

Sharepoint日期操作和筛选,sharepoint,xslt,date,Sharepoint,Xslt,Date,我在尝试按日期筛选sharepoint列表时遇到了一个真正的问题。我想制作一份月/年列表,其中每个条目都有一个列表中的计数,其中计数包括大于或等于该月15日或小于下个月15日的日期。我可以对任何月份进行罚款,但12月份除外,我希望从2009年12月15日到2010年1月14日(例如)进行计数。我真的不明白为什么会有任何不同,因为我使用相同的方法。如果有人能看到我的代码中有错误,或者有更好的方法,我将不胜感激 <xsl:template name="generateTable">

我在尝试按日期筛选sharepoint列表时遇到了一个真正的问题。我想制作一份月/年列表,其中每个条目都有一个列表中的计数,其中计数包括大于或等于该月15日或小于下个月15日的日期。我可以对任何月份进行罚款,但12月份除外,我希望从2009年12月15日到2010年1月14日(例如)进行计数。我真的不明白为什么会有任何不同,因为我使用相同的方法。如果有人能看到我的代码中有错误,或者有更好的方法,我将不胜感激

<xsl:template name="generateTable">
      <xsl:param name="numMonths" />
        <xsl:param name="Rows" />
        <xsl:param name="dvt_Rows" />
        <xsl:param name="tday" select="$startDay" />
        <xsl:param name="tmonth" select="($startMonth + msxsl:node-set($numMonths)-1) mod 12 + 1" />
        <xsl:param name="tyear" select="$startYear + floor(($numMonths+msxsl:node-set($startMonth)-1) div 12)" />
        <xsl:variable name="date" select="concat($tday,'/',$tmonth,'/',$tyear)"/>

        <tr>
        <td>
          <xsl:value-of select="ddwrt:FormatDateTime(string($date),3081,'MMMM yyyy')"/>
        </td>
        <td>
        <xsl:choose>
        <xsl:when test="$tmonth=12">
        <xsl:value-of select="count(/dsQueryResponse/Rows[1]/Row[(
                                    (ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'M yyyy' ) )=(ddwrt:FormatDateTime ( string ( $date ) , 3081, 'M yyyy' ) ) 
                                    and number(substring(ddwrt:FormatDateTime(string(@Date), 3081, 'dd'),1,2)) &gt;=$startDay)])+
                                    count(/dsQueryResponse/Rows[1]/Row[(
                concat(string(number(substring(ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'M yyyy' ),1,2))+11),' ',
                string(number(substring(ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'MM yyyy'),4))-1))=string(ddwrt:FormatDateTime ( string ( $date ) , 3081, 'M yyyy' ) ) 
                and number(substring(ddwrt:FormatDateTime(string(@Date), 3081, 'dd'),1,2)) &lt;$startDay)])"/>      
        </xsl:when>
        <xsl:otherwise>
        <xsl:value-of select="count(/dsQueryResponse/Rows[1]/Row[(
                                    (ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'M yyyy' ) )=(ddwrt:FormatDateTime ( string ( $date ) , 3081, 'M yyyy' ) ) 
                                    and number(substring(ddwrt:FormatDateTime(string(@Date), 3081, 'dd'),1,2)) &gt;=$startDay)])+
                                    count(/dsQueryResponse/Rows[1]/Row[(
                concat(string(number(substring(ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'MM yyyy' ),1,2))-1),
                substring(ddwrt:FormatDateTime ( string ( @Date ) , 3081, 'MM yyyy'),3,6))=(ddwrt:FormatDateTime ( string ( $date ) , 3081, 'M yyyy' ) ) 
                and number(substring(ddwrt:FormatDateTime(string(@Date), 3081, 'dd'),1,2)) &lt;$startDay)])"/>
        </xsl:otherwise>
        </xsl:choose>
        </td>
        </tr>

        <xsl:if test="msxsl:node-set($numMonths) &gt; 0">
          <xsl:call-template name="generateTable">
          <xsl:with-param name="numMonths" select="msxsl:node-set($numMonths)-1" />
            <xsl:with-param name="dvt_Rows"/>   
          <xsl:with-param name="Rows"/> 
      </xsl:call-template>
      </xsl:if>


</xsl:template>

在代码中,tday、tmonth和tyear是d/m/y中的今天日期,NUMMOTHs是一个变量,用于保存表中所需的月数,startDay是15

就我所见,在日期字段中添加11个月是可行的,但提取年份,将其更改为数字,然后减去1,这似乎就是问题所在。但是我不能让它工作,所以我已经完全没有简单的想法了

XML文档是Sharepoint列表,我不知道如何将其作为纯XML共享。我对XML的唯一引用是/dsQueryResponse/Rows[1]/Row,它选择Sharepoint列表中的行,并使用日期字段(@Date)执行筛选。这有帮助吗

我正在使用Sharepoint 2007,我首先使用Sharepoint Designer通过插入dataFormWebPart来获取Sharepoint列表。然后可以使用xpath、/dsQueryResponse/Rows/Row来访问XSLT中的Sharepoint列表,它引用列表中的所有行。(我在这里的代码中添加了[1]以引用特定列表,因为我有两个列表数据源)

我更愿意先在Sharepoint中筛选列表,并考虑了这一点,但可能我做错了什么,因为我无法得到我想要的结果-当特定月份没有条目时,包括零,以及>=15的月份筛选器。我的方法几乎奏效,这就是为什么它如此令人沮丧的原因,但我欢迎任何替代方案,尤其是如果它们更简单和/或更快的话。
感谢您作为示例,此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="kDateByYearAndMonth" match="date"
             use="translate(substring(.,1,7),'-','') -
                  (15 > substring(.,9,2)) * (1 + (substring(.,6,2)='01') * 88)"/>
    <xsl:template match="root">
        <result>
            <xsl:apply-templates select="date[count(. |
                                                key('kDateByYearAndMonth',
                                                    translate(substring(.,1,7),'-','') -
                                                    (15 > substring(.,9,2)) *
                                                    (1 + (substring(.,6,2)='01') * 88)
                                                   )[1]
                                               ) = 1]"/>
        </result>
    </xsl:template>
    <xsl:template match="date">
        <xsl:variable name="vKey" select="translate(substring(.,1,7),'-','') -
                  (15 > substring(.,9,2)) * (1 + (substring(.,6,2)='01') * 88)"/>
        <xsl:variable name="vDates" select="key('kDateByYearAndMonth',$vKey)"/>
        <group year="{substring($vKey,1,4)}" month="{substring($vKey,5,2)}"
               count="{count($vDates)}">
            <xsl:copy-of select="$vDates"/>
        </group>
    </xsl:template>
</xsl:stylesheet>

通过此输入:

<root>
<date>2001-01-01T00:15:00</date>
<date>2001-01-02T00:15:00</date>
<date>2001-02-03T00:15:00</date>
<date>2001-02-04T00:15:00</date>
<date>2002-03-05T00:15:00</date>
<date>2002-03-06T00:15:00</date>
<date>2002-04-07T00:15:00</date>
<date>2002-04-08T00:15:00</date>
<date>2003-05-09T00:15:00</date>
<date>2003-05-10T00:15:00</date>
<date>2003-06-11T00:15:00</date>
<date>2003-06-12T00:15:00</date>
<date>2004-07-13T00:15:00</date>
<date>2004-07-14T00:15:00</date>
<date>2004-08-15T00:15:00</date>
<date>2004-08-16T00:15:00</date>
<date>2005-09-17T00:15:00</date>
<date>2005-09-18T00:15:00</date>
<date>2005-10-19T00:15:00</date>
<date>2005-10-20T00:15:00</date>
<date>2006-11-21T00:15:00</date>
<date>2006-11-22T00:15:00</date>
<date>2006-12-23T00:15:00</date>
<date>2006-12-24T00:15:00</date>
<date>2007-01-25T00:15:00</date>
<date>2007-01-26T00:15:00</date>
<date>2007-02-27T00:15:00</date>
<date>2007-02-28T00:15:00</date>
<date>2008-03-29T00:15:00</date>
<date>2008-03-30T00:15:00</date>
<date>2008-04-31T00:15:00</date>
</root>

2001-01-01T00:15:00
2001-01-02T00:15:00
2001-02-03T00:15:00
2001-02-04T00:15:00
2002-03-05T00:15:00
2002-03-06T00:15:00
2002-04-07T00:15:00
2002-04-08T00:15:00
2003-05-09T00:15:00
2003-05-10T00:15:00
2003-06-11T00:15:00
2003-06-12T00:15:00
2004-07-13T00:15:00
2004-07-14T00:15:00
2004-08-15T00:15:00
2004-08-16T00:15:00
2005-09-17T00:15:00
2005-09-18T00:15:00
2005-10-19T00:15:00
2005-10-20T00:15:00
2006-11-21T00:15:00
2006-11-22T00:15:00
2006-12-23T00:15:00
2006-12-24T00:15:00
2007-01-25T00:15:00
2007-01-26T00:15:00
2007-02-27T00:15:00
2007-02-28:00:15:00
2008-03-29T00:15:00
2008-03-30T00:15:00
2008-04-31T00:15:00
输出:

<result>
    <group year="2000" month="12" count="2">
        <date>2001-01-01T00:15:00</date>
        <date>2001-01-02T00:15:00</date>
    </group>
    <group year="2001" month="1" count="2">
        <date>2001-02-03T00:15:00</date>
        <date>2001-02-04T00:15:00</date>
    </group>
    <group year="2002" month="2" count="2">
        <date>2002-03-05T00:15:00</date>
        <date>2002-03-06T00:15:00</date>
    </group>
    <group year="2002" month="3" count="2">
        <date>2002-04-07T00:15:00</date>
        <date>2002-04-08T00:15:00</date>
    </group>
    <group year="2003" month="4" count="2">
        <date>2003-05-09T00:15:00</date>
        <date>2003-05-10T00:15:00</date>
    </group>
    <group year="2003" month="5" count="2">
        <date>2003-06-11T00:15:00</date>
        <date>2003-06-12T00:15:00</date>
    </group>
    <group year="2004" month="6" count="2">
        <date>2004-07-13T00:15:00</date>
        <date>2004-07-14T00:15:00</date>
    </group>
    <group year="2004" month="8" count="2">
        <date>2004-08-15T00:15:00</date>
        <date>2004-08-16T00:15:00</date>
    </group>
    <group year="2005" month="9" count="2">
        <date>2005-09-17T00:15:00</date>
        <date>2005-09-18T00:15:00</date>
    </group>
    <group year="2005" month="10" count="2">
        <date>2005-10-19T00:15:00</date>
        <date>2005-10-20T00:15:00</date>
    </group>
    <group year="2006" month="11" count="2">
        <date>2006-11-21T00:15:00</date>
        <date>2006-11-22T00:15:00</date>
    </group>
    <group year="2006" month="12" count="2">
        <date>2006-12-23T00:15:00</date>
        <date>2006-12-24T00:15:00</date>
    </group>
    <group year="2007" month="1" count="2">
        <date>2007-01-25T00:15:00</date>
        <date>2007-01-26T00:15:00</date>
    </group>
    <group year="2007" month="2" count="2">
        <date>2007-02-27T00:15:00</date>
        <date>2007-02-28T00:15:00</date>
    </group>
    <group year="2008" month="3" count="2">
        <date>2008-03-29T00:15:00</date>
        <date>2008-03-30T00:15:00</date>
    </group>
    <group year="2008" month="4" count="1">
        <date>2008-04-31T00:15:00</date>
    </group>
</result>

2001-01-01T00:15:00
2001-01-02T00:15:00
2001-02-03T00:15:00
2001-02-04T00:15:00
2002-03-05T00:15:00
2002-03-06T00:15:00
2002-04-07T00:15:00
2002-04-08T00:15:00
2003-05-09T00:15:00
2003-05-10T00:15:00
2003-06-11T00:15:00
2003-06-12T00:15:00
2004-07-13T00:15:00
2004-07-14T00:15:00
2004-08-15T00:15:00
2004-08-16T00:15:00
2005-09-17T00:15:00
2005-09-18T00:15:00
2005-10-19T00:15:00
2005-10-20T00:15:00
2006-11-21T00:15:00
2006-11-22T00:15:00
2006-12-23T00:15:00
2006-12-24T00:15:00
2007-01-25T00:15:00
2007-01-26T00:15:00
2007-02-27T00:15:00
2007-02-28:00:15:00
2008-03-29T00:15:00
2008-03-30T00:15:00
2008-04-31T00:15:00
注意:月份的开始日期是“硬代码”,因为
xsl:key/@use
中不能有变量引用


Editt:更好的键计算。

请您向我们提供XML文档(尽可能少的文档仍能用于说明问题)?我想可能有一个更简单的解决方案,但需要一个XML文档来处理。。SharePoint的哪个版本?您是如何从SharePoint列表中获取数据的?另外,为什么要使用XSLT过滤SharePoint列表?您不想查询列表(过滤行),然后使用XSLT转换结果吗?谢谢。我使用了你的只使用子字符串的函数思想来替换我冗长的字符串(number(substring(etc)))函数,这似乎很有效。不知道为什么会这样。