Я пишу запрос для метаданных в Dynamics 365, но я думаю, что эта проблема может быть универсальной для любого запроса OData.
Моя проблема заключается в следующем:
В Dynamics у нас может быть несколько типов полей в сущностях, таких как строки, bools или lookup. Я хочу написать запрос, который возвращает тип объекта, к которому обращается поиск.
{url}/api/data/v9.0/EntityDefinitions(LogicalName='Account')
?$select=
LogicalName
&$expand=
Attributes(
$select=
LogicalName,
AttributeType,
Targets; -- Problematic property
$filter=
AttributeType+eq+Microsoft.Dynamics.CRM.AttributeTypeCode'Lookup')
Если я не включу выбор для целей в этот запрос, я получу правильный результат, являющийся всеми атрибутами, где их AttributeType равен Lookup.
Но когда я требую, чтобы цели были также включены, я получаю сообщение об ошибке
Could not find a property named 'Targets' on type 'Microsoft.Dynamics.CRM.AttributeMetadata
Поскольку свойство Target существует только для тех атрибутов, которые относятся к типу Lookup, поэтому выбор этого столбца из строкового атрибута завершится ошибкой и вызовет эту ошибку.
Есть ли способ сначала отфильтровать поиск перед выбором столбца? Я обнаружил здесь , что порядок оценки
$ фильтр, $ inlinecount, $ orderby, $ skiptoken, $ skip, $ top, $ expand, $ select, $ format
это именно то, что мне нужно, за исключением того, что я не думаю, что этот порядок одинаков при вызове внутри атрибута $ expand.