Проблема с обновлением поля поиска типа с помощью веб-API Microsoft CRM 2016

В настоящее время у меня есть код, который использует http patch для отправки данных Microsoft CRM через веб-интерфейс 2016 года. Когда моя полезная нагрузка включает текстовый тип или тип данных int, он работает просто отлично, но когда полезная нагрузка включает в себя запись поиска, я не могу получить никакого ответа, кроме 400 неправильных запросов.

Ниже приведены некоторые примеры полезной нагрузки, которые я пробовал (с изменением отправленных данных).

payload = {"new_lastweblocation": "Midlothian" }
payload = {"new_location_transaction_LastWebLocationid@odata.bind" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"}
payload = {"new_lastweblocation@odata.bind" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"}

По сути, я пытался передать открытый текст, руководство к записи, руководство к отношениям, руководство, связанное через odata.bind ... и т. Д. Очевидно, что мой подход к дробовику наряду с ошибкой 400 означает, что я в корне неправильно понимаю, как обрабатываются объекты в веб-интерфейсе 2016 года. Дайте мне знать, если у вас есть какие-либо предложения.

2 ответа

Решение

Я закончил тем, что использовал этот запрос. Основная проблема, с которой я столкнулся, заключается в том, что я не знал, что такое однозначное свойство навигации. Чтобы найти, что я в конечном итоге с помощью этого запроса. Я изменил выбор в URL, чтобы быть выбранным ="*"

Оригинальный URL

GET [Organization URI]/api/data/v8.1/incidents(39dd0b31-ed8b-e511-80d2-00155d2a68d4)?$select=title,customerid_value&$expand=customerid_contact($select=fullname)

Мой URL

GET [Organization URI]/api/data/v8.1/incidents(39dd0b31-ed8b-e511-80d2-00155d2a68d4)?$select=*

При использовании запроса GET, чтобы попытаться найти однозначное свойство навигации, обязательно добавьте 'Prefer':'odata.include-annotations"*", Я не смог получить заголовок предпочтения для передачи, пока не поместил его перед заголовком авторизации.

Наконец, как только я получил ответ от запроса get, я искал переменную, которую искал с помощью @Microsoft.Dynamics.CRM.associatednavigationproperty в конце этого и используется значение, связанное с этим. В моем случае имя поля было new_lastweblocation но свойство навигации с одним значением было new_LastWebLocation

Подход, указанный в MSDN для ассоциированных объектов при создании, также работает при обновлении. Я протестировал следующий запрос в демонстрационной среде 2016 года без проблем (где руководства были заменены существующими учетными записями и контактными руководствами соответственно):

PATCH [Organization URI]/api/data/v8.0/accounts/(00000000-0000-0000-0000-000000000001) HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

{
"name":"Sample Account",
"primarycontactid@odata.bind":"/contacts(00000000-0000-0000-0000-000000000001)"
}

Не могли бы вы начать с проверки того, что этот готовый вариант использования работает, прежде чем отлаживать конкретную проблему с поиском в пользовательском объекте?

Другие вопросы по тегам