Odata. Фильтр по полю updated

Здравствуйте! В теме новичок, столкнулся с необходимостью интеграции сервиса клиента на сайт. В целом сервис был написан еще до меня и работал, но появилась непредвиденная ситуация. На сайт выгружаются объекты (квартиры/дома и т.п.) из crm клиента, проверка идет по полю ModifiedOn. И для самих объектов это срабатывает. Но в отдельной коллекции есть фото объектов, и там меняется именно поле updated (поле ModifiedOn при этом может быть года этак 2015 и в выборку свежих объектов не попадает). Пример запроса:

https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection?$top=1

Результат:

version="1.0" encoding="utf-8"?>
xml:base="https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
        >https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection>

        </span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span><span style="color: #000000; font-weight: bold;">></span></span>PropertyGalleryImageCollection<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">>
        >2017-02-27T14:32:38Z>
        rel="self" title="PropertyGalleryImageCollection" href="PropertyGalleryImageCollection" />
        >
                >https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')>
                term="Terrasoft.Configuration.PropertyGalleryImage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                rel="edit" title="PropertyGalleryImage" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')" />
                rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/CreatedBy" type="application/atom+xml;type=entry" title="CreatedBy" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/CreatedBy" />
                rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ModifiedBy" type="application/atom+xml;type=entry" title="ModifiedBy" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/ModifiedBy" />
                rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/LockedBy" type="application/atom+xml;type=entry" title="LockedBy" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/LockedBy" />
                rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Type" type="application/atom+xml;type=entry" title="Type" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/Type" />
                rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Property" type="application/atom+xml;type=entry" title="Property" href="PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/Property" />
                </span> <span style="color: #000000; font-weight: bold;">/></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><updated<span style="color: #000000; font-weight: bold;">></span></span></span>2017-02-27T14:32:38Z<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></updated<span style="color: #000000; font-weight: bold;">></span></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><author<span style="color: #000000; font-weight: bold;">></span></span></span><br />                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><name</span> <span style="color: #000000; font-weight: bold;">/></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></author<span style="color: #000000; font-weight: bold;">></span></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><link</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Data"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"application/octet-stream"</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"Data"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"PropertyGalleryImageCollection(guid'cc758317-6214-4d84-ab95-0002e72a9411')/Data"</span> <span style="color: #000000; font-weight: bold;">/></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><content</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"application/xml"</span><span style="color: #000000; font-weight: bold;">></span></span><br />                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><m:properties<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Id</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>cc758317-6214-4d84-ab95-0002e72a9411<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:Id<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Name<span style="color: #000000; font-weight: bold;">></span></span></span>IMG_8264_marged(14-05-2014).jpg<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:Name<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:CreatedOn</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.DateTime"</span><span style="color: #000000; font-weight: bold;">></span></span>2015-12-16T15:47:39.2810926<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:CreatedOn<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:CreatedById</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>0a043409-0d95-4833-a11d-6b1d4e5ae568<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:CreatedById<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:ModifiedOn</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.DateTime"</span><span style="color: #000000; font-weight: bold;">></span></span>2015-12-16T15:47:39.2810926<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:ModifiedOn<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:ModifiedById</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>0a043409-0d95-4833-a11d-6b1d4e5ae568<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:ModifiedById<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:ProcessListeners</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Int32"</span><span style="color: #000000; font-weight: bold;">></span></span>0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:ProcessListeners<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Notes</span><span style="color: #000000; font-weight: bold;">/></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:LockedById</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>00000000-0000-0000-0000-000000000000<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:LockedById<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:LockedOn</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.DateTime"</span><span style="color: #000000; font-weight: bold;">></span></span>0001-01-01T00:00:00<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:LockedOn<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:TypeId</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>529bc2f8-0ee0-df11-971b-001d60e938c6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:TypeId<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Version</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Int32"</span><span style="color: #000000; font-weight: bold;">></span></span>1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:Version<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Size</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Int32"</span><span style="color: #000000; font-weight: bold;">></span></span>6106506<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:Size<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Position</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Int32"</span><span style="color: #000000; font-weight: bold;">></span></span>9<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:Position<span style="color: #000000; font-weight: bold;">></span></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:Link</span><span style="color: #000000; font-weight: bold;">/></span></span><br />                                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><d:PropertyId</span> <span style="color: #000066;">m:type</span>=<span style="color: #ff0000;">"Edm.Guid"</span><span style="color: #000000; font-weight: bold;">></span></span>e70021e1-b7a2-4644-a121-7ca975b6bc73<span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></d:PropertyId<span style="color: #000000; font-weight: bold;">></span></span></span><br />                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></m:properties<span style="color: #000000; font-weight: bold;">></span></span></span><br />                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></content<span style="color: #000000; font-weight: bold;">></span></span></span><br />         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></entry<span style="color: #000000; font-weight: bold;">></span></span></span><br /> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></feed<span style="color: #000000; font-weight: bold;">></span></span></span></div></div></p> <p>Видно, что updated свежий, а ModifiedOn - нет.</p> <p>Фильтрация по ModifiedOn:<br /> <a href="https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection?$top=1&$filter=ModifiedOn%20gt%20datetime%272017-02-20%27" rel="nofollow" >https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection?$top=1&$filter=ModifiedOn%20gt%20datetime%272017-02-20%27</a><br /> При попытке изменения ModifiedOn на updated:<br /> <a href="https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection?$top=1&$filter=updated%20gt%20datetime%272017-02-20%27" rel="nofollow" >https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/PropertyGalleryImageCollection?$top=1&$filter=updated%20gt%20datetime%272017-02-20%27</a></p> <p>Ошибка следующего содержания.<br /> No property 'updated' exists in type 'Terrasoft.Configuration.PropertyGalleryImage' at position 0.<br /> Вопрос следующий: как модифицировать запрос для выборки именно по дате обновления исходного объекта, а не самого файла изображения?</p>

Нравится

5 комментариев

Здравствуйте!

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

Результат выполнения простого запроса http://localhost:84/0/ServiceModel/EntityDataService.svc/ContactCollect…? в разное время:
2017-02-28T08:27:53Z

2017-02-28T09:01:13Z

При том, что данные в таблице не изменялись.
Когда устанавливаете фильтр $filter, то это означает, что Вы обращаетесь к значениям элементов

Здравствуйте,
вы неправильно поняли, поля updated не существует в базе данных для данной сущности. Это поле добавляется сервисом, и отображает серверное время ответа на ваш запрос, а дата изменения сущности в Bpmonline, это как раз колонка ModifiedOn, которая существует, и меняется в рамках Bpmonline когда данная сущность изменяется. Следовательно, если у картинки такая дата изменения, то возможно она именно тогда и была загружена\изменена. Сам объект недвижимости мог быть скорректирован вчера, но картинки загружены в него еще полгода назад, и конечно же их ModifiedOn не будет изменен только потому что ModifiedOn самого объекта изменен, и.т.д. В общем одата судя по всему работает корректно, а вам стоит пересмотреть саму бизнес задачу получения данных.
Вы можете получать свою информацию в несколько этапов, к примеру, вначале получаете объекты недвижимости, измененные сегодня, потом оббегая список этих объектов, делаете запрос к их картинкам, с условием по родителю. Id которого вы получили в предыдущем запросе.

Спасибо за ваши ответы, что-то такое я и подозревал (собственно, ранее уже пытался брать фотку по id исходного объекта, и столкнулся с той же ошибкой, что опишу далее).

Почитал еще по поводу фильтра, но делаю как в примерах, и ответ сервера не тот)

В данном случае id исходного объекта - PropertyId. Взял guid этого объекта из сообщения выше, создал запрос:

https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/Prope…

Ответ следующий:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
[geshifilter-code]1[/geshifilter-code]
<message xml:lang="">Элемент коллекции с именем PropertyId не найден</message>
<innererror>
<message>Элемент коллекции с именем PropertyId не найден</message>
<type>Terrasoft.Common.ItemNotFoundException</type>
<stacktrace>
at Terrasoft.Core.MetaItemCollection`1.GetByName(String name)
 at Terrasoft.Core.Entities.EntitySchema.GetInheritedPath(String columnPath)
 at Terrasoft.Core.Entities.EntitySchemaQuery.CreateSchemaColumnExpression(EntitySchemaQuery parentQuery, EntitySchema rootSchema, String columnPath, Boolean useCoalesceFunctionForMultiLookup, Boolean useDisplayValue)
 at Terrasoft.Core.Entities.EntityQueryWhereBlockBuilder.CreateExpression(Expression node)
 at Terrasoft.Core.Entities.EntityQueryWhereBlockBuilder.CreateSimpleFilter(BinaryExpression binary)
 at Terrasoft.Core.Entities.EntityQueryWhereBlockBuilder.BuildBlock(MethodCallExpression node)
 at Terrasoft.Core.Entities.EntityQueryProvider.VisitMethodCall(MethodCallExpression node)
 at Terrasoft.Core.Entities.EntityQueryProvider.Build(Expression expression)
 at Terrasoft.Core.Entities.EntityQueryProvider.LoadEntityCollection(Expression expression)
 at Terrasoft.Core.Entities.EntityQueryProvider.ExecuteEnumerable(Type elementType, Expression expression)
 at Terrasoft.Core.Entities.EntityQuery`1.GetEnumerator()
 at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)
 at System.Data.Services.DataService`1.SerializeResponseBody(RequestDescription description, IDataService dataService, IODataResponseMessage responseMessage)
 at System.Data.Services.DataService`1.HandleRequest()
</stacktrace>
</innererror>
</error>

Куда копать дальше?

Используйте запрос: https://ordoag.bpmonline.com/0/ServiceModel/EntityDataService.svc/Prope… eq guid'e70021e1-b7a2-4644-a121-7ca975b6bc73')

Всем большое спасибо!

Показать все комментарии