【问题标题】:SharePoint List View - DateTime in the Query StringSharePoint 列表视图 - 查询字符串中的日期时间
【发布时间】:2015-03-24 22:33:14
【问题描述】:

我正在为 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)时,查询工作正常。

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

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

谢谢!

【问题讨论】:

    标签: sharepoint wss caml


    【解决方案1】:

    您是否尝试过添加自定义页面,然后向其中添加 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>
    

    【讨论】:

    • 非常感谢 Colin,我不熟悉 DataFormWebPart。因此,如果我理解正确,我需要一个 DFWP 在我推送我的视图的表单中(所以我在同一个表单上拥有 DFWP 和 ListView Web 部件)。然后我在列表定义的 schema.xml 中添加 ParameterBinding?那是对的吗?是这样,我需要在哪里添加ParameterBinding?我想当控件不存在或看不到参数时,查询只会返回一个空结果,这就是我测试时得到的结果,这就是为什么我想知道我必须放在哪里参数绑定...非常感谢!
    • 使用 SharePoint Designer,创建一个新的 ASPX 页面(站点中的任何位置)。然后打开数据源工具窗口并将您的列表拖到页面上。它将使用该数据源生成一个 SPDatasource 和一个 DFWP。然后在代码中更改 DataSource 的 SelectCommand 并在设计模式中指定过滤器(通过使用 DFWP 上下文菜单(就像在 Visual Studio 中一样)。在此处查找更多信息:docstoc.com/docs/4481600/…
    【解决方案2】:

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

    list.Fields["Display Name"].InternalName  
    

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

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

    【讨论】:

    • 谢谢,但这是通过 schema.xml 完成的,而不是通过代码。我不能使用 CreateISO8601DateTimeFromSystemDateTime。至于显示名称,schema.xml 中的 CAML 使用内部名称。这是唯一适用于视图字段、字段引用等的东西。
    • “首先,CAML 中的一个常见错误是不使用字段的内部名称......” - 我想知道为什么?显示名称可以更改 - 我什至可以在 UI 中更改它,但 InternalName 不能更改。
    【解决方案3】:

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

    【讨论】:

    • 有一个公认的答案...你为什么在这里发帖回答一个老问题?
    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 2014-02-03
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多