Я весь день пытался отладить запрос, отфильтровывающий элемент на основе поля Modified, с помощью веб-службы Lists и метода GetListItems, чтобы получить только элементы, измененные с момента последней проверки.
Вот параметр запроса:
<Where>
<Gt>
<FieldRef Name="Modified" />
<Value Type="DateTime" IncludeTimeValue="TRUE">2010-11-23T17:0:00Z</Value>
</Gt>
</Where>
У меня были проблемы с выяснением, почему это ничего не вернуло, поскольку один элемент в списке был явно изменен после этой даты, указанной в UTC. Это связано с тем, что, хотя вы указываете его в формате UTC (также применяется в параметре параметров), Sharepoint сравнивает его буквально с измененными временными метками, которые хранятся или отображаются с локалью, указанной в настройках сайта.
Я не уверен, что я ясен, так что вот пример:
Сайт, который я запрашиваю, находится в локали EST, и последний элемент был изменен сегодня в 12:11:00, то есть 17: 12: 00Z.
В последний раз я проверял наличие обновлений в 16:00 по Гринвичу, поэтому мой параметр запроса будет содержать следующее:
<Where>
<Gt>
<FieldRef Name="Modified" />
<Value Type="DateTime" IncludeTimeValue="TRUE">2010-11-23T16:00:00Z</Value>
</Gt>
</Where>
И это не вернет никакого значения, потому что sharepoint сравнивает 16: 00: 00Z буквально с 12:11:00 и, следовательно, не имеет обновлений после 16: 00: 00Z.
Я подтвердил это, поместив в запрос 12: 10: 00Z, и там я получил нужный элемент списка. Положите 12: 12: 00Z, и в результатах его больше нет.
Итак, я предполагаю, что мой вопрос, это ошибка в WSS 3.0 или я что-то делаю не так? Если так, как я могу исправить это? Кстати, я хочу хранить свои сохраненные времена в UTC и не могу контролировать, что пользователи делают с настройками своих сайтов. Есть ли способ получить языковой стандарт, используемый сайтом, с помощью веб-служб?
Обновление:
См. Есть ли способ получить локаль сайта Sharepoint с помощью веб-служб? для решения.