Вопрос или проблема
Я пытаюсь найти дубликаты в CRM по заданным именам через WEB API.
Я использую вызов API, похожий на этот:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20Corp%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
где @p1 является закодированным в URL json:
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME Corp"}
Все работает без проблем, пока имя не содержит скобок, например ACME (USA) Corp. Это дает мне сообщение об ошибке “Неверный запрос – ошибка в синтаксисе запроса”.
Ошибка возникает только в том случае, если после закрывающей скобки есть текст, так что это
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20%28USA%29%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME (USA)"}
работает как ожидалось и извлекает существующие дубликаты.
Но это вызывает ошибку плохого запроса:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20%28USA%29Corp%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME (USA)Corp"}
Я пробовал скобки, слэш, экранированные скобки, двойные слэш, экранированные скобки, все ранее закодированные в URL.
Скобки дают “Неверный запрос”, один слэш дает “Неверный JSON. В строковом значении JSON найдена нераспознанная escape-последовательность ‘\(‘”, двойной слэш не вызывает ошибки, но также не возвращает дубликаты, даже если они существуют.
Ответ или решение
Ошибка RetrieveDuplicates после скобок в имени: Подробный анализ
При использовании веб-API для поиска дубликатов в CRM, может возникнуть проблема, связанная с именами, содержащими скобки. В данной статье мы разберем проблему, с которой вы столкнулись, а также предложим возможные решения.
Описание проблемы
Вы используете запрос API следующего вида:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20%28USA%29%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
- Запрос работает корректно для имени "ACME (USA)", но выдает ошибку "Bad Request – Error in query syntax" для имени "ACME (USA)Corp".
Причина ошибки
Ошибка возникает из-за того, что API имеет предопределенные правила синтаксиса для обработки строк JSON. Когда вы добавляете текст после закрывающей скобки, это может привести к некорректной интерпретации формата данных:
-
Неправильная интерпретация JSON: API ожидает, что строка будет корректно форматирована, но наличие текста после закрывающей скобки нарушает формат.
-
Эскейпинг символов: Попытки использовать экранирование символов, такие как одинарный или двойной слэш, могут не дать ожидаемого результата, поскольку система не распознает их корректно.
Решения
Чтобы избежать данной ошибки и успешно обрабатывать имена с текстом после скобок, вы можете рассмотреть следующие подходы:
-
Удаление пробелов: Попробуйте убрать пробел перед текстом после скобок. Например, заменить
"ACME (USA) Corp"
на"ACME (USA)Corp"
. -
Составление альтернативного имени: Избегайте использования конструкций, в которых невозможно корректно обработать синтаксис. Например, вместо использования скобок на этапе создания имен учитывать информацию, которая будет вне скобок.
-
Проверка JSON-формата: Убедитесь, что JSON-строка корректно формируется. Все специальные символы должны быть правильно экранированы.
-
Обратитесь к документации API: Ознакомьтесь с официальной документацией Dynamics CRM по работе с API, возможно, в ней есть рекомендации по работе с именами, содержащими специальные символы.
Заключение
Проблема с ошибкой "Bad Request" при работе с именами, содержащими скобки, один из примеров важности правильной обработки данных при взаимодействии с API. Убедитесь, что вы следуете синтаксическим правилам и проверяете формат JSON перед отправкой запроса. Настоятельно рекомендую проводить тестирование различных вариантов имен, чтобы найти наиболее приемлемый для вашего случая.
Следуя этим рекомендациям, вы сможете избежать ошибок и обеспечить корректное взаимодействие с CRM.