Как обновить ссылку на связанный объект CRM с ODataLib?
Я использую ODataLib ( http://odata.github.io/) и клиентскую библиотеку для доступа к API OData от Microsoft CRM (v9.0).
Я пытаюсь обновить значение свойства навигации объекта (GUID), но обновление, похоже, ничего не делает (никаких вызовов не производится).
Если я пытаюсь обновить значение свойства навигации напрямую, я получаю сообщение об ошибке, в котором говорится, что "CRM не поддерживает прямое обновление свойств ссылок на объекты, вместо этого используйте свойства навигации".
Сущность в основном является средней сущностью в отношениях N:N.
В основном то, что я делаю в коде (полупсевдокод):
Account a = _dao.GetAccount();
// This gets the dataservicecollection that tracks the changes
DataServiceCollection<MyRelationEntity> rel = _dao.GetMyRelationEntity();
rel.AccountId = a;
_dao.SaveChanges(SaveChangesOptions.PostOnlySetProperties);
Должен ли я использовать AddLink, UpdateLink или что-то подобное? Кажется, они тоже ничего не делают.
Я извиняюсь, если терминология не верна; Я совсем новичок в CRM.
1 ответ
Я ничего не знаю о ODataLib, но с точки зрения Dynamics 365 вам нужна операция Associate.
Вот пример псевдокода вызова веб-API D365 для привязки возможности к учетной записи. Обратите внимание, что URI содержит accountId и имя отношения, а тело содержит URI возможности.
POST [Organization URI]/api/data/v9.0/accounts(00000000-0000-0000-0000-000000000002)/opportunity_customer_accounts/$ref HTTP/1.1
Content-Type: application/json
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"@odata.id":"[Organization URI]/api/data/v9.0/opportunities(00000000-0000-0000-0000-000000000001)"
}
Эта статья имеет больше информации.
И, работая с D365 Web API, я считаю RESTBuilder Джейсона Латтимера незаменимым инструментом.