2013-01-17 5 views
24

Есть ли способ вернуть серию записей в OData, указав фильтр «Дата больше, чем xxxxx» ... но используя ранее полученную дату с помощью фида OData?OData: Date Фильтр «Больше, чем»

Использование: Притворись, что я хочу создать веб-страницу, которая отображает список последних завершенных онлайн-заказов. Это то, что я стремлюсь к:

  1. загрузить страницу
  2. Хит моей службы OData асинхронен, возвращая последние 100 заказов (упорядочивание по дате по убыванию, так что совсем недавно Выполненный заказ появляется первым)
  3. построить HTML на странице, используя данные OData
  4. магазин дата MAX в глобальной переменной (выглядит следующим образом:/Date (1338336000000) /)
  5. Хит службу OData на 30-секундного интервала, но на этот раз указать фильтр, чтобы возвращать только записи, где дата заказа больше, чем предыдущая M Дата AX. В этом случае:/Дата (1338336000000)/
  6. Если какие-либо записи возвращены, создайте HTML для этих записей и добавьте элементы к ранее загруженным элементам.

Где я боюсь - это указать фильтр «больше». По какой-то причине фильтры даты в OData, похоже, не очень приятны с собственным форматом даты OData. Нужно ли мне преобразовать дату, первоначально полученную в другой формат, который можно использовать для фильтрации?

Я хочу сделать что-то вроде этого:

[http://mydomain/Services/v001.svc/Orders?$filter=close_dt gt 1338336000000][1] 

FYI: Я использую V2

+0

недействительная ссылка мой друг! –

+1

@ Rachel Я знаю ... Я прошу правильный синтаксис делать то, что мне нужно. Фактическая ссылка не имеет значения. – lamarant

ответ

31

фигурной это.

OData V2 вне коробки возвращает дату из SQL в формате JSON Дата так:

/Date(1338282808000)/ 

Однако для того, чтобы использовать дату в качестве фильтра в вызове OData, дата должно быть в формате EDM, глядя, как это:

2012-05-29T09:13:28 

Итак, мне нужно, чтобы получить дату от моего первоначального вызова OData, а затем преобразовать его в формат EDM для использования в моем последующем OData вызовов, которые выглядят как это:

/Services/v001.svc/Orders?$filter=close_dt gt DateTime'2012-05-29T09:13:28' 

Я в конечном итоге создать яваскрипт функцию, которая делает switcharoo форматирования:

function convertJSONDate(jsonDate, returnFormat) { 
     var myDate = new Date(jsonDate.match(/\d+/)[0] * 1); 
     myDate.add(4).hours(); //using {date.format.js} to add time to compensate for timezone offset 
     return myDate.format(returnFormat); //using {date.format.js} plugin to format :: EDM FORMAT='yyyy-MM-ddTHH:mm:ss' 
    } 

Несколько примечаний:

  • формат JSON не кажется, для корректировки часового пояса, поэтому дата возвращается не соответствует дате, которую я вижу в моей базе данных. Поэтому мне пришлось добавить время вручную, чтобы компенсировать (кто-то, пожалуйста, объясните это).
  • Я использую плагин date.format.js, который вы можете скачать here для форматирования даты и времени добавления.
+0

Исходная дата указана в UTC, поэтому она всегда выражается в терминах часовой пояс GMT. Поэтому ваши локальные операции с датой в javascript будут неявно анализировать дату в вашем часовом поясе, который является источником ошибки. – FlavorScape

+0

В моем случае реализация ODate V2 на основе Olingo V2, имя функции должно быть «datetime», а не «DateTime». – wangf

0

Если вы используете логику datetime, вы можете сделать lt или gt.

например. ... MYDOMAIN/Услуги/v001.svc/Заказы? $ = Фильтр close_dt GT datetime'20141231'

+0

Я не могу заставить его работать без тире. –

Смежные вопросы