Запрос CAML заказывается неправильно
Может ли кто-нибудь помочь мне с этим запросом CAML? Когда я переворачиваю Ascending
атрибут с TRUE
на FALSE
(также пробовал True
и False
), он не меняет порядок набора результатов.
Остальная часть CAML верна, она создается инструментом, и возвращаются соответствующие результаты.
<Where>
<And>
<And>
<Eq>
<FieldRef Name="Branch"/>
<Value Type="Text">Camp 1</Value>
</Eq>
<Eq>
<FieldRef Name="Type"/>
<Value Type="Choice">Day</Value>
</Eq>
</And>
<Geq>
<FieldRef Name="StartDateTime"/>
<Value Type="DateTime">2009-01-05T00:00:00Z</Value>
</Geq>
</And>
<OrderBy>
<FieldRef Ascending="TRUE" Name="Title" />
</OrderBy>
</Where>
Ответов (3)3
Разве OrderBy не должен находиться за пределами предложения Where?
<Where>
<And>
<And>
<Eq>
<FieldRef Name="Branch"/>
<Value Type="Text">Camp 1</Value>
</Eq>
<Eq>
<FieldRef Name="Type"/>
<Value Type="Choice">Day</Value>
</Eq>
</And>
<Geq>
<FieldRef Name="StartDateTime"/>
<Value Type="DateTime">2009-01-05T00:00:00Z</Value>
</Geq>
</And>
</Where>
<OrderBy>
<FieldRef Ascending="TRUE" Name="Title" />
</OrderBy>
Я потратил почти целую неделю, пытаясь заставить работать заказы по дате с помощью объекта Client OM CamlQuery. Наконец я понял, что мне нужно установить
camlQuery.DatesInUtc = true;
Мне кажется, что если вы используете собственную объектную модель и объект SPQuery, SharePoint интерпретирует эту дату как UTC по умолчанию (в нашей среде), как только вы переходите к объекту CamlQuery с ClientOM, вам необходимо установить этот параметр.
Я согласен с ответом выше, <Query> должен находиться за пределами <Where>. Также обратите внимание, что при сравнении с полями DateTime обычно рекомендуется включать атрибут IncludeTimeValue:
<Geq>
<FieldRef Name="StartDateTime"/>
<Value Type="DateTime" IncludeTimeValue="FALSE">2009-01-05T00:00:00Z</Value>
</Geq>
и установите для него значение false или true, в зависимости от того, хотите ли вы включать значения времени в свой запрос или нет.