sql - 如何通过 id 以外的任何内容获取记录 - SugarCRM
问题描述
这个问题你可能不清楚,但我的问题很简单
SugarCRM 文档建议要获取记录,我应该向/<module>/:recordId
.
我想要实现的是通过它的电子邮件获得记录。
在之前的 SugarCRM 版本中,我可以在负载请求中向他们的 API 发送 SQL 查询。但是这里因为它是一个 GET 请求,所以没有正文。
我需要帮助
解决方案
要通过匹配非 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"],
}
这将返回与任何电子邮件地址匹配的记录。不管是初级还是其他。
随机相关笔记
- 过滤器端点显然同时支持
GET
和POST
方法,因此您可以选择是通过请求的查询字符串还是在请求正文中传输过滤器定义和选项。 GET
对端点的请求/<module>
将使用相同的底层过滤器 API。但是,您不能使用POST
on 进行过滤/<module>
,因为该组合保留用于创建新记录。- 如果您不确定您的搜索条件在 Sugar 过滤器语法中应该是什么样子,您可以使用 Sugar 在模块列表视图中创建一个示例过滤器,并在浏览器的调试器的网络选项卡中检查 Sugar 生成的请求负载是什么样的。
- 如果您需要通配符搜索,您可以通过使用通配符来实现
%
,例如 for%@whatever.test
,似乎需要使用与 if 不同的运算符$equals
,例如$starts
or$contains
。 - 如果您只关心匹配的数量,而不关心实际记录,请将您的过滤器发送到
/<module>/count
(GET
) 端点或/<module>/filter/count
(GET
或POST
)。 - 在开发测试期间,我建议使用
max_num
高于预期返回的值,以确保在由于过滤器定义不正确而导致结果中出现任何误报时立即看到它。或者在响应 json 中密切注意:如果没有比响应中已经返回的结果更多的结果next_offset
,它将具有该值。-1
- 运算符有一个简短的符号
$equals
,例如{"email_addresses.email_address": {"$equals": "test@something.test"}},
也可以写为{"email_addresses.email_address": "test@something.test"}
,。
推荐阅读
- java - 无需配对的蓝牙连接 (Java)
- amazon-cloudformation - 我们可以覆盖 CloudFormation 模板中的 SSM 参数吗?
- reference - 对命名区域的单元格引用,带有偏移量
- python - matplotlib 和 selenium 的实时图形
- labview - 如何在LabVIEW软件中设计EVM机
- python - 删除文本文件中包含python中特定单词/字符串的整行
- amazon-web-services - 使用 AWS SAM 的 AWS Lambda 函数在 3 秒后超时
- python - 如何创建打印变量的快捷方式(vscode)
- go - 为什么代码中有些包以v2为前缀,而我克隆的文件路径却没有v2?
- swift - UIBarButton 单击以使用 Swift 交换 tableview 单元格 UI 值?