Представление списка SharePoint - DateTime в строке запроса - PullRequest
1 голос
/ 01 ноября 2009

Я пишу представление для списка событий в SharePoint (Schema.xml) и хочу отфильтровать результаты в соответствии с датой (то есть отображать только события, начинающиеся между 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 - две даты в строке запроса (я пробовал каждый формат даты, с и без Type = "DateTime"), но я всегда получаю пустые результаты. Запрос работает нормально, когда я жестко кодирую свои даты (скажем, 2009-10-10T10: 00: 00Z).

У меня есть контроль над тем, что я посылаю в строке запроса, поэтому я могу изменить его, если есть другой способ.

Так есть ли способ получить формат DateTime в строке запроса? Если нет, у меня есть другие варианты?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 01 ноября 2009

Вы пытались добавить пользовательскую страницу, а затем добавить к ней DataFormWebPart (DFWP)? Это, в свою очередь, позволит вам сформировать свой запрос CAMl в SelectCommand SPDatasource, используемой DFWP, с использованием фактических элементов управления календаря ASP.NET, которые будут использоваться в качестве параметров, указанных в параметрах SPDataSource. Используйте Control (ID, PROPERTYTOUSEINCAML) в привязках параметров источника spdatas.

т.е:.

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

тогда CAML в SelectCommand будет выглядеть примерно так:

<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>
0 голосов
/ 24 марта 2015

Правильный формат даты в строке запроса: гггг-мм-дд, см. это сообщение

0 голосов
/ 01 ноября 2009

Во-первых, распространенная ошибка в CAML - не использовать внутреннее имя поля ... попробуйте использовать

list.Fields["Display Name"].InternalName  

Во-вторых, используйте утилиту даты SPUtility

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