Я пишу запрос метаданных в Dynamics 365, но думаю, что эта проблема может быть универсальной для любого запроса OData.
Моя проблема заключается в следующем:
В Dynamics у нас может быть несколько типов полей в объектах, таких как строки, логические значения или поиск. Я хочу написать запрос, который возвращает тип объекта, к которому обращается поиск.
{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 существует только для тех arrribute, которые относятся к типу Lookup, выбор этого столбца из строкового атрибута завершится ошибкой и вызовет эту ошибку.
Есть ли способ сначала отфильтровать результаты поиска перед выбором столбца? Я нашел здесь, что порядок оценки
$ filter, $ inlinecount, $ orderby, $ skiptoken, $ skip, $ top, $ expand, $ select, $ format
это именно то, что мне нужно, за исключением того, что я не думаю, что этот порядок будет таким же при вызове внутри атрибута $ expand.