SharePoint列表视图 - 查询字符串中的DateTime

时间:2009-10-31 21:19:57

标签: sharepoint wss caml

我正在为SharePoint(Schema.xml)中的事件列表编写视图,我想根据DateTime过滤结果(即仅显示在2个日期之间开始的事件)

通常情况下,我会像这样使用CAML查询:

         <Where>
            <And>
              <Geq>
                <FieldRef Name="Event_x0020_Start_x0020_Date" />
                <Value Type=”DateTime”>2009-10-10T10:00:00Z</Value>
              </Geq>
              <Leq>
                <FieldRef Name="Event_x0020_Start_x0020_Date" />
                <Value Type=”DateTime”>2009-11-10T10:00:00Z</Value>
              </Leq>
            </And>
          </Where>

但是,在这种情况下,我要比较的日期不能直接在字段中使用,我必须从查询字符串中获取它们。

我尝试使用

        <Value Type="DateTime">
          <GetVar Scope="Request" Name="Start" />
        </Value>
        <Value Type="DateTime">
          <GetVar Scope="Request" Name="End" />
        </Value>

其中Start和End是查询字符串中的2个日期(我尝试了每种日期格式,有和没有Type =“DateTime”)但我总是得到空结果。当我对日期进行硬编码时(例如2009-10-10T10:00:00Z),查询工作正常。

我可以控制我在查询字符串中发送的内容,因此如果有其他方法,我可以更改它。

那么有没有办法在查询字符串中获取DateTime格式?如果没有,我还有其他选择吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您是否尝试过添加自定义页面,然后向其添加DataFormWebPart(DFWP)?这反过来允许您在DFWP使用的SPDatasource的SelectCommand中对您的CAMl查询进行整形,使用实际的ASP.NET日历控件作为参数,在SPDataSource的参数中指定。在spdatasource的参数绑定中使用Control(ID,PROPERTYTOUSEINCAML)。

即:

<ParameterBinding Name="StartDate" Location="Control(calStart, SelectedDate)" DefaultValue="01-01-2009"/>
<ParameterBinding Name="EndDate" Location="Control(calEnd, SelectedDate)" DefaultValue="01-01-2009"/>

然后让SelectCommand的CAML类似于:

<Where>
  <And>
    <Geq>
      <FieldRef Name="Event_x0020_Start_x0020_Date" />
      <Value Type=”DateTime”>{StartDateParameter}</Value>
    </Geq>
    <Leq>
      <FieldRef Name="Event_x0020_Start_x0020_Date" />
      <Value Type=”DateTime”>{EndDateParameter}</Value>
    </Leq>
  </And>
</Where>

答案 1 :(得分:0)

首先,CAML的一个常见错误是不使用字段的内部名称...尝试使用

list.Fields["Display Name"].InternalName  

其次,使用SPUtility的日期实用程序

Microsoft.SharePoint.Utilities.SPUtility.CreateISO8601DateTimeFromSystemDateTime(System.DateTime.Now)

答案 2 :(得分:-1)

查询字符串中的正确日期格式为yyyy-mm-dd,请参阅this post