Не удается получить выбранные запросы с помощью конечной точки OData

#dynamics-crm #odata #dynamics-crm-365

#dynamics-crm #odata #dynamics-crm-365

Вопрос:

Я не могу получить поля поиска при фильтрации запроса OData.

Я использовал следующие запросы :

 https://mycrm.api.crm4.dynamics.com/api/data/v9.1/contacts(guid)?$select=contactid,ownerid,createdby,new_expirefin,new_testcumul_stat```
  

Этот запрос извлекает contactid, new_expirefin и new_testcumul_stat, но никаких следов ownerid и createdby.

С другой стороны, этот запрос:

 https://mycrm.api.crm4.dynamics.com/api/data/v9.1/contacts(guid)
  

верните все поля, включая отсутствующие в другом запросе. Запросы отправляются как Guid.

В обоих запросах используется

 Prefer = odata.include-annotations="*"
  

заголовок. Зная, что я не могу знать, в каком столбце находятся запросы (я работаю над универсальной библиотекой), как я мог бы получить эти запросы?

Ответ №1:

Использование формата _lookupName_value позволяет получить запросы:

https://myOrg.api.crm.dynamics.com/api/data/v9.1/contacts(guid)?$select=contactid,fullname,_ownerid_value,_createdby_value

Что, конечно, оставляет проблему с определением, какие поля являются поисковыми и, следовательно, нуждаются в таком форматировании.

Это может помочь:
https://myOrg.api.crm.dynamics.com/api/data/v9.1/EntityDefinitions(LogicalName='contact')?$select=LogicalNameamp;$expand=ManyToOneRelationships($select=ReferencingAttribute,ReferencedEntity)

Комментарии:

1. Работает хорошо, я использовал это для написания механизма кэширования метаданных, к которому я обращаюсь каждый раз, когда выполняется запрос. Не самый эффективный, но работает хорошо.