首页 > 解决方案 > 如何通过 id 以外的任何内容获取记录 - SugarCRM

问题描述

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

SugarCRM 文档建议要获取记录,我应该向/<module>/:recordId.

我想要实现的是通过它的电子邮件获得记录。

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

我需要帮助

标签: sqljsonsugarcrm

解决方案


要通过匹配非 id 字段来获取记录,您可以使用记录过滤器 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"],
}

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

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

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

这将返回与任何电子邮件地址匹配的记录。不管是初级还是其他。

随机相关笔记

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

推荐阅读