Как получить тип сущности для поиска из MetaData через Web API в JS - PullRequest
0 голосов
/ 03 октября 2019

В моем приложении я выбрал определенный тип объекта и извлекаю все атрибуты поля этого объекта из конечной точки веб-API EntityDefinitions, расширяя Attributes ($expand=Attributes). Для определенного атрибута типа 'Lookup' (AttributeType) я хочу знать тип связанной сущности. Поскольку запрос атрибута содержит так много данных для каждого атрибута, я фильтрую расширение, выбираянесколько свойств. К сожалению, кажется, что невозможно выбрать свойство Targets. Поэтому я должен либо запросить все данные (что медленно), либо я фильтрую и не знаю тип объекта.

Вот мой запрос, который работает, когда опущен Targets.

`EntityDefinitions?` +
    `$filter=EntitySetName eq '${entityTypeName}'&` +
    `$select=Attributes&` +
    `$expand=Attributes(` +
    `  $select=DisplayName,LogicalName,Targets` +
    `)`

Можно ли выбрать свойство Targets?

Различные подходы к решению

Эти подходы имеют свои недостатки в моем случае использования.

  1. Запрос всех данных RelationshipDefinitions за один раз. Он содержит все необходимое для каждой сущности. Полученные данные огромны, и запрос занимает несколько секунд. Поэтому ответ должен быть кэширован в localStorage браузера пользователя. Фильтрация запроса только по необходимым свойствам кажется невозможной по сравнению с EntityDefinitions.
  2. Запрос точной одной записи данных выбранного объекта, где конкретный поиск не равен 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 с помощью специального действия.

1 Ответ

0 голосов
/ 03 октября 2019

Можно выбрать Targets

Записывая некоторые примечания к моему вопросу, я понял, что необходимо привести Атрибут к определенному производному типу . В моем случае я привел его как тип поиска с LookupAttributeMetadata . Фильтрация по Targets возможна для типа приведения, поскольку производный тип содержит свойство Targets. Базовый тип AttributeMetadata не имеет.

Ответ будет содержать только атрибуты поиска, включая только свойства LogicalName, DisplayName и Targets.

http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=Targets,LogicalName,DisplayName

Это официально задокументировано и объяснено здесь: query-metadata-web-api

...