Как получить имена сущностей в CRM 2016
В нашем решении мы динамически создаем запросы HTTP/ODATA.
Например, мы создадим URL-адрес, который выглядит следующим образом:
[http://org....api/v8.1/]accounts(00000000-0000-0000-0000-000000000001)/primarycontactid?$select=fullname
Как мы можем динамически получить список всех объектов, таких как "учетные записи"?
В 2011 году мы просто выполняли бы против LeadSet/AccountSet/etcSet, какова стратегия в 2016 году?
4 ответа
Я не знаю, есть ли какая-то "языковая" хитрость (очевидно, имя набора - просто имя во множественном числе на английском языке сущности, но этого недостаточно для меня), так что мне это нравится - просто вызовите метаданные webAPI:
http://[crmurl]/api/data/v8.2/EntityDefinitions?$select=EntitySetName,LogicalName&$filter=LogicalName eq 'account'
Результат следующий:
{
"@odata.context":"http://[crmurl]/api/data/v8.2/$metadata#EntityDefinitions(EntitySetName,LogicalName)","value":[
{
"EntitySetName":"accounts","LogicalName":"account","MetadataId":"70816501-edb9-4740-a16c-6a5efbc05d84"
}
]
}
Итак, вы поняли. Конечно, вы можете просто пропустить $filter
часть и просто получить список всех установленных имен и кэшировать их где-нибудь.
1. Чтобы получить все сущности, доступные в вашем crm:
https://<your org name>.crm.dynamics.com/api/data/v8.2/
2.Чтобы получить всю информацию метаданных записей (Получить несколько записей):
https://<your org name>.crm.dynamics.com/api/data/v8.2/accounts?
3.Чтобы получить информацию об определенном адресе электронной почты (Получить единственную запись). Что бы мы ни выбрали атрибуты в предложении select, мы можем получить информацию об этих атрибутах в результате:
https://<your org name>.crm.dynamics.com/api/data/v8.2/accounts?$select=emailaddress1&$filter=accountid eq <GUID goes here>
4. Чтобы получить всю информацию метаданных в CRM:
https://<your org name>.crm.dynamics.com/api/data/v8.2/EntityDefinitions
Другой подход заключается в создании имени множественного числа из имени единственного числа.
Насколько я понимаю, правила для множественного числа имен сущностей в Web API v8+ таковы:
- оканчивается на s, x, z, ch или sh: добавьте 'es'
- заканчивается на y: удалить "y", добавить "ies"
- еще: добавить 's'
Вот функция JavaScript, которую я использую для этого:
function pluralName (name) {
var plural = '';
if (name != null && typeof(name) == 'string') {
var len = name.length;
var lastChar = len > 0 ? name.slice(-1) : '';
var last2Chars = len > 1 ? name.slice(-2) : '';
if (lastChar == 's' || lastChar == 'x' || lastChar == 'z' || last2Chars == 'ch' || last2Chars == 'sh') {
plural = name + 'es';
}
else if (lastChar == 'y') {
//strip off last character and add suffix
plural = name.substr(0, len - 1) + 'ies';
}
else {
plural = name + 's';
}
}
return plural;
}
Ну, если вам нужен список сущностей, вы можете просто запросить и проанализировать корень службы следующим образом:
Если вы тоже хотите поля, вы можете сделать это:
https://contoso.api.crm.dynamics.com/api/data/v8.1/$ metadata