Можно ли получить все отношения, доступные для объекта, из CRM с помощью веб-API?

У меня есть требование получить и показать все доступные отношения объекта на HTML-странице отдельно. Например: если я выберу «Учетная запись» на странице html, я смогу увидеть отношения 1:N, N:1 и N:N объекта учетной записи.

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

https://<CRMORGNAME>/api/data/v8.2/RelationshipDefinitions/Microsoft.Dynamics.CRM.ManyToOneRelationshipMetadata?$select=Entity1LogicalName,SchemaName&$filter=Entity1LogicalName eq 'account'

https://<CRMORGNAME>/api/data/v8.2/RelationshipDefinitions?$select=RelationshipType,SchemaName

person SaiKrishnaG    schedule 10.07.2017    source источник


Ответы (1)


Вы можете сделать это следующим образом:

Один ко многим:

https://contoso.crm.dynamics.com/api/data/v8.2/EntityDefinitions(70816501-edb9-4740-a16c-6a5efbc05d84)/OneToManyRelationships?$select=SchemaName,RelationshipType

Многие к одному:

https://contoso.crm.dynamics.com/api/data/v8.2/EntityDefinitions(70816501-edb9-4740-a16c-6a5efbc05d84)/ManyToOneRelationships?$select=SchemaName,RelationshipType

Многие ко многим:

https://contoso.crm.dynamics.com/api/data/v8.2/EntityDefinitions(70816501-edb9-4740-a16c-6a5efbc05d84)/ManyToManyRelationships?$select=SchemaName,RelationshipType

Конечно, вы должны сначала получить правильный идентификатор EntityDefinition (в этом случае для учетной записи используется «70816501-edb9-4740-a16c-6a5efbc05d84»)

https://contoso.crm.dynamics.com/api/data/v8.2/EntityDefinitions?$select=SchemaName,LogicalName,MetadataId&$filter=LogicalName eq 'account'
person Pawel Gradecki    schedule 10.07.2017
comment
Павел Градецкий, Спасибо за информацию. Небольшая проблема здесь, вызов 3 веб-API влияет на производительность приложения, верно? Есть ли способ получить эти 3 детали отношений с помощью одного вызова WEB API? например, response.OneToManyRelationships вроде этого. Пожалуйста, предоставьте свои ценные предложения/помощь по этому вопросу... - person SaiKrishnaG; 11.07.2017
comment
Меня бы не волновала производительность в этом случае, вы не вызываете 100 запросов, а всего 3 из них. Просто сделайте это асинхронно, и браузер справится с вызовом их в отдельных одновременных потоках, и влияние на производительность будет минимальным. Если вы будете вызывать их синхронно, то на самом деле это будет не лучшая идея. - person Pawel Gradecki; 11.07.2017
comment
Спасибо Pawel Gradecki, Думал о производительности системы. Но да, я согласен с вашей точкой зрения. Тогда я попробую. - person SaiKrishnaG; 11.07.2017
comment
@SaiKrishna, две вещи: вам не нужно получать идентификатор метаданных. EntityDefinitions может быть запрошен LogicalName. Вы можете получить все отношения в одном запросе: http://contoso.crm.dynamics.com/api/data/v8.2/EntityDefinitions(LogicalName='account')?$select=LogicalName&$expand=ManyToManyRelationships,ManyToOneRelationships,OneToManyRelationships. - person Jatin Sanghvi; 11.07.2017
comment
Да, я совершенно пропустил, используя Expand, можно использовать логическое имя прямо там. Спасибо за ваш ценный вклад @Jathin Sanghvi - person SaiKrishnaG; 11.07.2017
comment
@PawelGradecki Когда я запускаю этот запрос для получения ссылочных объектов аннотации, я получаю несколько результатов systemuserentity из приведенного ниже запроса. Есть идеи по этому поводу? contoso.crm.dynamics.com/api/data/v8.1/ - person SaiKrishnaG; 30.05.2018