#dynamics-crm #odata #dynamics-crm-365 #dynamics-crm-webapi
#dynamics-crm #odata #dynamics-crm-365 #dynamics-crm-webapi
Вопрос:
У меня есть объекты типа account
, которые, когда я смотрю на них в Dyn365, имеют раздел, содержащий представление списка связанных объектов. Как мне получить эти связанные объекты из OData API?
Я могу запросить api/data/v9.1/account
, но связанные объекты нигде не отображаются в результирующем json.
Если я сделаю то же самое для связанных объектов, учетная запись нигде не появится. Как мне получить связь между этими двумя типами объектов? используя OData API.
Я пробовал что-то вроде /accounts?$expand=contact($select=foo)
, но там просто говорится, что свойство contact не существует для объекта account, что правильно. Но contact — это не свойство, это тип сущности.
Ответ №1:
Решение состоит в том, чтобы использовать следующий URL-адрес, чтобы получить имена всех отношений.
https://<company>.crm.dynamics.com/api/data/v9.1/RelationshipDefinitions?$select=SchemaName
Результатом является массив из следующих строк для каждой взаимосвязи.
{"@odata.type":"#Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata","SchemaName":"aaa_bbb","MetadataId":"<guid>"},
Затем используйте эти имена, в частности SchemaName
свойство в $expand
параметре запроса.
https://crmdev.crm.dynamics.com/api/data/v9.1/accounts?
$select=<whatever>amp;
$expand=aaa_bbb($select=<properties from linked entity>)
Чтобы выяснить, какие отношения на самом деле делают то, что вам нужно, вам нужно прочитать больше, чем просто SchemaName, если вы не можете догадаться, что к чему, или посмотреть это в Dynamics через графический интерфейс пользователя, если вы знаете как и имеете доступ. Я не знаю.
RelationshipDefinition
Содержит другие свойства, подобные ReferencedEntity
ReferencingEntity
, которые могут быть использованы для определения того, получили ли вы правильную взаимосвязь.
Комментарии:
1. итак, вы ищете API метаданных для динамического извлечения имени. полезно знать
2. @ArunVinoth не динамично, но я не знаю, как искать имена отношений для различных объектов внутри Dynamics, и я не уверен, что у меня есть доступ. Итак, я просто жестко запрограммировал имена отношений в коде для навигации по графу сущностей.
Ответ №2:
Вероятно, это то, что вы ищете. Связь для 1: N между учетной записью и контактом равна contact_customer_accounts
Все учетные записи со связанными контактами:
https://crmdev.crm.dynamics.com/api/data/v9.1/accounts?$select=nameamp;$expand=contact_customer_accounts($select=fullname)
Конкретная учетная запись со связанными контактами:
https://crmdev.crm.dynamics.com/api/data/v9.1/accounts(73C84814-729B-EA11-A811-000D3A370DB6)?$select=nameamp;$expand=contact_customer_accounts($select=fullname)
Комментарии:
1. какова логика, стоящая за этим? что, если у меня есть два объекта,
Aaa
иBbb
является ли объект связи между ними затем названнымaaa_bbb
?2. @CodeMonkey это зависит исключительно от того, как вы создаете отношения и какое имя вы даете. Эта учетная запись / контактные объекты имеют несколько сложных взаимосвязей. Вы можете просматривать метаданные с помощью браузера метаданных в XrmToolbox