В моем приложении я выбрал определенный тип объекта и извлекаю все атрибуты поля этого объекта из конечной точки веб-API EntityDefinitions
, расширяя Attributes
($expand=Attributes
). Для определенного атрибута типа 'Lookup'
(AttributeType
) я хочу знать тип связанной сущности. Поскольку запрос атрибута содержит так много данных для каждого атрибута, я фильтрую расширение, выбираянесколько свойств. К сожалению, кажется, что невозможно выбрать свойство Targets
. Поэтому я должен либо запросить все данные (что медленно), либо я фильтрую и не знаю тип объекта.
Вот мой запрос, который работает, когда опущен Targets
.
`EntityDefinitions?` +
`$filter=EntitySetName eq '${entityTypeName}'&` +
`$select=Attributes&` +
`$expand=Attributes(` +
` $select=DisplayName,LogicalName,Targets` +
`)`
Можно ли выбрать свойство Targets
?
Различные подходы к решению
Эти подходы имеют свои недостатки в моем случае использования.
- Запрос всех данных
RelationshipDefinitions
за один раз. Он содержит все необходимое для каждой сущности. Полученные данные огромны, и запрос занимает несколько секунд. Поэтому ответ должен быть кэширован в localStorage браузера пользователя. Фильтрация запроса только по необходимым свойствам кажется невозможной по сравнению с EntityDefinitions. - Запрос точной одной записи данных выбранного объекта, где конкретный поиск не равен NULL, и включает заголовок аннотации, так что логическое имя поисканастоящее. Это имеет тот недостаток, что такая запись не найдена в системе. Также считает неправильным запрашивать записи данных вместо MetaData.
Пример: учетная запись, получить тип объекта атрибута поля поиска primarycontactid. URL, заголовок и ответ:
http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/accounts?$filter=primarycontactid ne null&$top=1
'Prefer': `odata.include-annotations="*"`
"_primarycontactid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
Запрос метаданных в C # и вызов кода из JS с помощью специального действия.