5

Я пытаюсь выполнить выборку XML с помощью WEB API /api/data/v8.x. Все в порядке, если у меня есть запрос, включающий «где атрибут содержит числовое значение». Например, следующий fetchXML найти запись с номером телефона содержит '03':Как запросить API-интерфейс Dynamics CRM с помощью настраиваемого FetchXml, включающего фильтр значений числа?

<fetch mapping="logical"> 
 
    <entity name="account"> 
 
    <attribute name="name" /> 
 
    <attribute name="telephone1" /> 
 
    <order attribute="name" descending="false" /> 
 
    <filter type="and"> 
 
     <condition attribute="telephone1" operator="like" value="%03%" /> 
 
    </filter> 
 
    </entity> 
 
</fetch>

Когда мы запускаем его через GET на WEB API:

https://CRM_URL/api/data/v8.0/accounts?fetchXml=<fetch%20mapping%3D"logical"><entity%20name%3D"account"><attribute%20name%3D"name"%20%2F><attribute%20name%3D"telephone1"%20%2F><order%20attribute%3D"name"%20descending%3D"false"%20%2F><filter%20type%3D"and"><condition%20attribute%3D"telephone1"%20operator%3D"like"%20value%3D"%2503%25"%20%2F><%2Ffilter><%2Fentity><%2Ffetch> 

CRM Web API возвращает недопустимую ошибку XML следующим образом:

{"error": { "code": "", "message": "Invalid XML.", "Internalerror": { "message": "Invalid XML.", "Type": "System.ServiceModel.FaultException`1 [[Microsoft. Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version = 8.0.0.0, культура = нейтральной, PublicKeyToken = 31bf3856ad364e35]]»}}}

прогон запрос в порядке, если значение фильтра не запускается с номером или я удаляю «%» по значению фильтра. Мое заключение заключается в том, что это связано с кодированием и декодированием «% + number» в моем значении фильтра.

Есть ли что-то не так с моим запросом или это ошибка в API Dynamics CRM? любая работа вокруг?

+1

Удивительно, что передается однозначное число в качестве параметра. 'value = '% 3'' например. Ни 'value = '% 03%', ни' value = '% 30%' 'не работает. – dynamicallyCRM

ответ

0

Не знаю, почему он не работает, но вы можете использовать фильтр, чтобы получить номер телефона, содержащего номер 3.

cc_WebAPI_ServiceURI/accounts?$filter=contains(telephone1,'3') 
3

Здесь динамика 365 внутренне декодирования строки запроса FetchXML дважды. Об этом сообщается команде разработчиков. Они предоставят исправление в предстоящем выпуске и, возможно, в последнем публичном выпуске. До этого вы можете попробовать кодировать строку запроса дважды или заменить все вхождения % символом %25 после кодирования. Например, строка value%3D"%2503%25" может быть заменена на value%3D"%252503%2525". Обратите внимание, что как только исправление будет доступно, обходное решение больше не будет работать.

+1

Похоже, исправлено с 8.2.1.207 –

+1

Правильно. В сборке 8.2.1.207 содержится исправление. –