Как получить запись по чему-то еще, кроме ее идентификатора - SugarCRM - PullRequest
0 голосов
/ 30 мая 2018

Вам может быть неясен вопрос, но моя проблема очень проста

Документация SugarCRM предполагает, что для получения записи я должен отправить запрос GET на /<module>/:recordId.

Чего я хочу добиться, так это получить запись по электронной почте.

В предыдущей версии SugarCRM я мог отправлять SQL-запрос к их API в запросе полезной нагрузки.Но здесь, поскольку это запрос GET, тела нет.

Мне нужна помощь для этого

1 Ответ

0 голосов
/ 30 мая 2018

Чтобы получить записи путем сопоставления полей без идентификатора, вы можете использовать API фильтра записей /<module>/filter (см. документацию или /rest/v10/help вашего Sugar), чтобы указать, какие поля для поиска какихзначения.

Если вам нужна только одна совпадающая запись, укажите "max_num": 1 в параметрах.

В качестве ответа вы получите объект json с массивом records, содержащим совпадающиезаписей.

Фильтрация по адресу электронной почты

Адреса электронной почты ранее сохранялись в полях email1, email2 и т. д. Эти устаревшие поля все еще существуют в Sugar> =7 (на данный момент) и может использоваться с полезной нагрузкой запроса следующим образом:

{
    max_num: 1,
    filter: [
        {"email2": "test@secondary.test"},
    ],
    fields: ["id"],
}

При этом будет выполняться поиск адреса электронной почты только по дополнительному адресу электронной почты.

Однако в современномСахар, адреса электронной почты хранятся в поле ссылки на основе отношений, называемом email_addresses, которое соединяется с записями EmailAddress, которые можно искать следующим образом:

{
    max_num: 1,
    filter: [
        {"email_addresses.email_address": {"$equals": "test@something.test"}},
    ],
    fields: ["id"],
}

Это вернет запись с any электронная почтаплатье соответствия.Независимо от того, является ли он основным или другим.

Случайно связанные примечания

  • Конечная точка фильтра, очевидно, поддерживает как GET, так и POSTметод, так что вы можете выбрать, передавать ли определение и параметры фильтра через строку запроса или в теле запроса.
  • GET запросы к конечной точке /<module> будут использовать тот же базовый API фильтра.Однако вы не можете фильтровать, используя POST на /<module>, потому что эта комбинация зарезервирована для создания новых записей.
  • Если вы не знаете, как должны выглядеть критерии поиска в синтаксисе фильтра Sugar, вы можетеиспользовать Sugar для создания примера фильтра в представлении списка модулей и проверить на вкладке сети отладчика браузера, как выглядела полезная нагрузка результирующего запроса Sugar.
  • Если вам нужен поиск с подстановочными знаками, вы можете сделать это с помощью подстановочного знакасимвол %, например, для %@whatever.test, кажется, требует использования оператора, отличного от $equals, например, $starts или $contains.
  • Если вас интересует только количество совпадений, нефактические записи, отправьте фильтр на конечную точку /<module>/count (GET) или на /<module>/filter/count (GET или POST).
  • Во время тестирования разработки я рекомендую использовать max_num вышечем то, что вы ожидаете получить, чтобы убедиться, что вы видите его немедленно, если вы получили какие-либо ложные срабатывания в ваших результатах из-за неправильного определения фильтраион.Это или обратите пристальное внимание на next_offset в ответе json: он будет иметь значение -1, если результатов не будет больше, чем результатов, уже возвращенных в ответе.
  • Есть короткая запись для *Оператор 1066 *, например, {"email_addresses.email_address": {"$equals": "test@something.test"}}, также может быть записан как {"email_addresses.email_address": "test@something.test"},.
...