代码之家  ›  专栏  ›  技术社区  ›  Hugo Migneron

SharePoint列表视图-查询字符串中的日期时间

  •  1
  • Hugo Migneron  · 技术社区  · 15 年前

    我正在为SharePoint(schema.xml)中的事件列表编写视图,我希望根据日期时间筛选结果(即只显示两个日期之间开始的事件)

    通常,我会使用像下面这样的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)时,查询工作正常。

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

    那么,有没有一种方法可以在查询字符串中获取日期时间格式?如果没有,我还有其他选择吗?

    谢谢!

    3 回复  |  直到 9 年前
        1
  •  3
  •   Colin    15 年前

    是否尝试添加自定义页,然后向其中添加DataformWebPart(DFWP)?反过来,您可以在dfwp使用的spdatasource的selectcommand中使用实际的ASP.NET日历控件作为参数(在spdatasource的参数中指定)来塑造caml查询。在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>
    
        2
  •  0
  •   UJ.    15 年前

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

    list.Fields["Display Name"].InternalName  
    

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

    Microsoft.SharePoint.Utilities.SPUtility.CreateISO8601DateTimeFromSystemDateTime(System.DateTime.Now)
    
        3
  •  -1
  •   Pranav Kulkarni    9 年前

    querystring中正确的日期格式为yy-mm-dd,请参阅 this post