Ошибка RetrieveDuplicates после скобок в имени

Вопрос или проблема

Я пытаюсь найти дубликаты в 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. Когда вы добавляете текст после закрывающей скобки, это может привести к некорректной интерпретации формата данных:

  1. Неправильная интерпретация JSON: API ожидает, что строка будет корректно форматирована, но наличие текста после закрывающей скобки нарушает формат.

  2. Эскейпинг символов: Попытки использовать экранирование символов, такие как одинарный или двойной слэш, могут не дать ожидаемого результата, поскольку система не распознает их корректно.

Решения

Чтобы избежать данной ошибки и успешно обрабатывать имена с текстом после скобок, вы можете рассмотреть следующие подходы:

  1. Удаление пробелов: Попробуйте убрать пробел перед текстом после скобок. Например, заменить "ACME (USA) Corp" на "ACME (USA)Corp".

  2. Составление альтернативного имени: Избегайте использования конструкций, в которых невозможно корректно обработать синтаксис. Например, вместо использования скобок на этапе создания имен учитывать информацию, которая будет вне скобок.

  3. Проверка JSON-формата: Убедитесь, что JSON-строка корректно формируется. Все специальные символы должны быть правильно экранированы.

  4. Обратитесь к документации API: Ознакомьтесь с официальной документацией Dynamics CRM по работе с API, возможно, в ней есть рекомендации по работе с именами, содержащими специальные символы.

Заключение

Проблема с ошибкой "Bad Request" при работе с именами, содержащими скобки, один из примеров важности правильной обработки данных при взаимодействии с API. Убедитесь, что вы следуете синтаксическим правилам и проверяете формат JSON перед отправкой запроса. Настоятельно рекомендую проводить тестирование различных вариантов имен, чтобы найти наиболее приемлемый для вашего случая.

Следуя этим рекомендациям, вы сможете избежать ошибок и обеспечить корректное взаимодействие с CRM.

Оцените материал
Добавить комментарий

Капча загружается...