admin

如何通过ID以外的任何方式获取记录-SugarCRM

sql

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

SugarCRM公司的文件表明,得到的记录,我应该发送一个GET请求/<module>/:recordId

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

在早期版本的SugarCRM中,我可以在有效负载请求中向其API发送一个SQL查询。但是这里由于是GET请求,所以没有正文。

我需要帮助


阅读 142

收藏
2021-07-01

共1个答案

admin

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

如果最多只关心一条匹配的记录,请"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似乎需要使用与操作符不同的运算符$equals,例如,$starts$contains
  • 如果您只关心匹配数而不是实际记录,则将过滤器发送到/<module>/countGET)端点或/<module>/filter/countGETPOST)。
  • 在开发测试期间,我建议使用max_num比预期返回值高的值,以确保在由于过滤器定义不正确而导致结果出现误报时立即看到它。还是要next_offset在响应json中密切注意:-1如果没有比响应中已经返回的结果更多的结果,它将具有该值。
  • $equals运算符有一个简短的表示法,例如{"email_addresses.email_address": {"$equals": "test@something.test"}},也可以写成{"email_addresses.email_address": "test@something.test"}
2021-07-01