Поиск контактов через OData

Добрый день!

У контакта имеются поля Phone, MobilePhone, HomePhone.
У лида MobilePhone, BusinesPhone.
У контрагента Phone, AdditionalPhone.

Раньше я делал поиск через через
$filter=substringof('6665544', MobilePhone)
Но в разделе "Средства связи" пользователи могут добавлять много номеров, поэтому поиск не работает по всем этим полям.

Я увидел тип ContactCommunication в котором и хранятся остальные номера.

Один из вариантов поиска это сначала сделать запрос

/0/ServiceModel/EntityDataService.svc/ContactCommunicationCollection?$filter=substringof('07562135947', SearchNumber)&$select=ContactId для получения Id контакта, а затем получить контакт из ContactCollection по Id.

Для этого нужно делать два запроса.

Подскажите, как сделать поиск всего лишь одним запросом ,чтобы искать сразу и по полям и в коллекции ContactCommunication ?

Нравится

3 комментария

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

Ознакомтесь со статьями:

  1. URI Conventions
  2. Using $select, $expand, and $value in ASP.NET Web

"Терещук Павел" написал:

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

Ознакомтесь со статьями:

  1. URI Conventions
  2. Using $select, $expand, and $value in ASP.NET Web

Спасибо! Получилось осуществить поиск конктакта через один запрос к ContactCommunicationCollection и $extend Contact.

Все хорошо, но мне надо получить лишь некоторые поля Contact, а именно Id, Name, OwnerId, AccountId.

Для этого я добавляю в запрос $select=Contact/Id, Contact/Name и это работает без ошибок.

Но если я добавляю Contact/OwnerId или Contact/AccountId, то получаю ошибку:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

    1
    Элемент коллекции с именем AccountId не найден
    
        Элемент коллекции с именем AccountId не найден
        Terrasoft.Common.ItemNotFoundException
           at Terrasoft.Core.MetaItemCollection`1.GetByName(String name)&#xD;
   at Terrasoft.Core.Entities.EntitySchema.GetInheritedPath(String columnPath)&#xD;
   at Terrasoft.Core.Entities.EntitySchemaQuery.CreateColumn(String columnPath)&#xD;
   at Terrasoft.Core.Entities.EntitySchemaQuery.AddColumn(String columnPath)&#xD;
   at Terrasoft.Core.Entities.EntityQueryProvider.Build(Expression expression)&#xD;
   at Terrasoft.Core.Entities.EntityQueryProvider.LoadEntityCollection(Expression expression)&#xD;
   at Terrasoft.Core.Entities.EntityQueryProvider.ExecuteEnumerable[TResult](Expression expression)&#xD;
   at Terrasoft.Core.Entities.EntityQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()&#xD;
   at System.Data.Services.Providers.BasicExpandProvider.ExpandedQueryable`1.GetEnumerator()&#xD;
   at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)&#xD;
   at System.Data.Services.DataService`1.SerializeResponseBody(RequestDescription description, IDataService dataService, IODataResponseMessage responseMessage)&#xD;
   at System.Data.Services.DataService`1.HandleRequest()
    

Хотя если не задавать $select, то эти поля присутствуют.

Вот запрос:

https://004057-sales-enterprise.bpmonline.com/0/ServiceModel/EntityDataService.svc/ContactCommunicationCollection?$filter=substringof('224433305083', SearchNumber)&$expand=Contact&$select=Contact/Id,Contact/Name,Contact/AccountId,Contact/OwnerId

Подскажите что не так делаю?

Разобрался. Вопрос закрыт. Спасибо за помощь!

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