如何通过除 id 之外的任何其他方式获取记录 - SugarCRM

How to get a record by anything else than it's id - SugarCRM

这个问题你可能不清楚,但我的问题很简单

SugarCRM documentation 建议要获取记录,我应该向 /<module>/:recordId 发送 GET 请求。

我想实现的是通过邮件获取记录。

在以前版本的 SugarCRM 中,我可以在负载请求中向他们的 API 发送 SQL 查询。 但是这里因为是GET请求所以没有正文。

我需要帮助

要通过匹配非 ID 字段获取记录,您可以使用记录过滤器 API /<module>/filter(请参阅您的 Sugar 的 documentation/rest/v10/help)来指定要搜索哪些值的字段。

如果您最多只关心一条匹配记录,请在选项中指定"max_num": 1

作为响应,您将收到一个 json 对象和一个包含匹配记录的 records 数组。

按电子邮件地址过滤

电子邮件地址以前存储在字段 email1、email2 等中。 这些遗留字段仍然存在于 Sugar >=7(目前)并且可以与这样的请求有效负载一起使用:

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

这将仅在辅助电子邮件地址中搜索电子邮件地址。

然而,在现代 Sugar 中,电子邮件地址存储在一个名为 email_addresses 的关系支持 link 字段中,该字段连接到可以像这样搜索的 EmailAddress 记录:

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

这将 return 与 任何 电子邮件地址匹配的记录。不管是初级还是次级

随机相关笔记

  • 过滤器端点显然支持 GETPOST 方法,因此您可以选择是通过请求的查询字符串还是在请求正文中传输过滤器定义和选项。
  • GET/<module> 端点的请求将使用相同的基础过滤器 API。但是,您不能在 /<module> 上使用 POST 进行过滤,因为该组合保留用于创建新记录。
  • 如果您不确定您的搜索条件在 Sugar 过滤器语法中应该是什么样子,您可以使用 Sugar 在模块列表视图中创建一个示例过滤器,并在浏览器的调试器的网络选项卡中检查 Sugar 的结果请求负载看起来像。
  • 如果需要通配符搜索,可以使用通配符 % 来完成,例如对于 %@whatever.test,似乎需要使用与 $equals 不同的运算符,例如$starts$contains.
  • 如果您只关心匹配数,而不关心实际记录,请将您的过滤器发送到 /<module>/count (GET) 端点或 /<module>/filter/count (GETPOST).
  • 在开发测试期间,我建议使用比您预期的 return 更高的 max_num,以确保如果由于过滤器定义不正确。或者密切注意响应 json 中的 next_offset:如果没有比响应中已经 return 编辑的结果更多的结果,它将具有值 -1
  • $equals 运算符有一个简短的表示法,例如{"email_addresses.email_address": {"$equals": "test@something.test"}}, 也可以写成 {"email_addresses.email_address": "test@something.test"},.