понедельник, 21 июля 2014 г.

Использование типа DateTime в CAML запросах.

Предположим, что вы хотите создать CAML запрос в котором проверяете значение поле типа DateTime. Естественно, первое, что приходит на ум написать что-то типа этого:

Query = @"<Where>
          <Eq>
             <FieldRef name='SomeDateField'>
                <Value type='DateTime'>" + DateTime.Now.ToString() + @"</value>
             </FieldRef>
          </Eq>
          </Where>"

Что, естественно, работать не будет по причине того, что даты хранятся в Sharepoint в формате ISO8601, то есть вот в таком виде: 2014-01-01T10:11:12Z
Получить дату в таком формате можно как руками используя, например, формат в методе .ToString(), а можно поступить проще, используя вот такой метод из SPUtilities:

Query = @"<Where>
          <Eq>
             <FieldRef name='SomeDateField'>
                <Value type='DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now) + @"</value>
             </FieldRef>
          </Eq>
          </Where>"


В таком случае даты будут корректно обрабатываться. Но, только даты. Временная составляющая в таком случае будет игнорироваться. Чтобы это исправить нужно немного поправить тег Value

А именно, добавить в него атрибут IncludeTimeValue:

Query = @"<Where>
          <Eq>
             <FieldRef name='SomeDateTimeField'>
                <Value type='DateTime' IncludeTimeValue='TRUE'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now) + @"</value>
             </FieldRef>
          </Eq>
          </Where>"


Комментариев нет:

Отправить комментарий