#asp.net-web-api #dynamics-crm #dynamics-crm-webapi
#asp.net-web-api #dynamics-crm #dynamics-crm-webapi
Вопрос:
Я пытаюсь использовать запрос веб-api и без fetchxml мне удалось создать эту конечную точку, но результирующий набор ведет себя как ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, но мне нужно ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
new_demo
выполняется поиск new_currentappointment
(здесь записывается самая последняя запись из списка подсетей), new_currentappointment
выполняется new_user
поиск.
Мне нужен список, new_demo
с new_currentappointment_lookup
где new_user_lookup
находится фильтр.
https://crmdev.crm.dynamics.com/api/data/v9.1/new_demo?$select=new_attribute_oneamp;$expand=new_currentappointment_lookup($select=new_attribute_two;$filter=_new_user_lookup_value eq <guid>)
Результатом является приведение всех new_demo
к системе, но фильтр расширения приводит только к нулевому результату. Как исключить отфильтрованный нулевой результат из расширенного объекта в основном результате?
"value": [
{
"@odata.etag": "W/"608177550"",
"new_attribute_one": "Demo 1",
"new_currentappointment_lookup": {
"new_attribute_two": "testing comments",
"_new_user_lookup_value": "guid",
},
},
{
"@odata.etag": "W/"608177790"",
"new_attribute_one": "Demo 2",
"new_currentappointment_lookup": null,
}
]
Этот результат объясняется в ASP.NET документация по веб-api — это то, что я ищу, но я не смог найти ее для веб-api Dynamics CRM. Какой-либо другой простой способ, которого мне не хватает?
Комментарии:
1. Продолжается обсуждение проблемы с github — github.com/MicrosoftDocs/powerapps-docs/issues/1692
Ответ №1:
Это эквивалентный запрос для вашего сценария:
{{webapiurl}}incidents?$select=title
amp;$expand=customerid_account($select=name;
$expand=primarycontactid($select=fullname;
$filter=contactid eq '384d0f84-7de6-ea11-a817-000d3a122b89'))
$ filter просто определяет, расширяется запись или нет.
В этом разница между:
{
"@odata.etag": "W/"31762030"",
"title": "Sample Case",
"incidentid": "d3d685f9-cddd-ea11-a813-000d3a122b89",
"customerid_account": {
"name": "Fourth Coffee",
"accountid": "ccd685f9-cddd-ea11-a813-000d3a122b89",
"primarycontactid": {
"fullname": "Charlie Brown",
"contactid": "384d0f84-7de6-ea11-a817-000d3a122b89"
}
}
}
И это:
{
"@odata.etag": "W/"31762030"",
"title": "Sample Case",
"incidentid": "d3d685f9-cddd-ea11-a813-000d3a122b89",
"customerid_account": {
"name": "Fourth Coffee",
"accountid": "ccd685f9-cddd-ea11-a813-000d3a122b89",
"primarycontactid": null
}
}
Смотрите этот пример (Ctrl F «Вложенный фильтр в расширении»), где возвращаются все пользователи, но расширяются только поездки, соответствующие $ filter.
Таким образом, поведение $ filter в расширении будет просто определять, будут ли возвращены сведения или нет. Это не поведение ВНУТРЕННЕГО соединения. Для достижения этого вам нужно будет использовать FetchXML.
Комментарии:
1. Да, похожая структура. Если это можно протестировать и с этой схемой, то она может вести себя так же. Вы хотите, чтобы я проверил?
2. Спасибо, что разъяснил это как ожидаемое поведение. И FetchXML — единственный способ для внутреннего соединения.
Ответ №2:
Возможно, раньше это было невозможно, но теперь можно получить поведение ВНУТРЕННЕГО соединения через веб-API для отношений глубиной в один уровень, добавив фильтр верхнего уровня к свойству навигации. Для вашего примера это будет выглядеть так:
https://crmdev.crm.dynamics.com/api/data/v9.1/new_demo?$select=new_attribute_oneamp;$filter=(new_currentappointment_lookup/_new_user_lookup_value eq <guid>)amp;$expand=new_currentappointment_lookup($select=new_attribute_two)
Отличное место для помощи в создании запросов веб-API — это инструмент FetchXML Builder в XrmToolbox. Создайте свой запрос в fetch, а затем в меню View включите опцию OData 4.0, и он покажет вам эквивалентный запрос Web API (если это возможно).
Комментарии:
1. Для этого требуется больше положительных отзывов. Я думал, что мне придется переписать часть моего PCF, чтобы вместо этого использовать FecthXml, но это находка.
2. Это все еще не ведет себя как ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Если для
new_currentappointment_lookup/_new_user_lookup_value eq <guid>
нет совпадающих строк, я все равно получаю запись в результате.