json - 如何从模块中获取所有记录 - SugarCRM 版本 7+
问题描述
根据文档,要查询记录,您必须使用此端点 /<module>/:recordId
,但是如果我想从给定模块获取所有记录怎么办?我找不到任何文档。
我试图/<module>/filter
设置这样的 json 参数:
{
"max-num": "-1",
"offset": "0",
"order-by": "date-entered",
"favorites": false,
"my-items": false
}
但只返回 20 条记录?
当然,我尝试"max-num"
使用大量数字进行自定义,但仍然返回 20 条记录。
我需要帮助
解决方案
选项的名称是max_num
(包含下划线字符),而不是 max-num
.
max_num
但是,如果它的值太高,服务器端还有另一个限制将否决您。默认的服务器端最大限制为 1000,但可以通过设置$sugar_config['max_record_fetch_size']
为所需的数字在配置中增加。
如果您想确保获得所有记录,通常最好检查next_offset
响应。只要它没有-1
超过返回的记录。在这种情况下,您应该发送另一个请求,其next_offset
' 值offset
与请求中一样,以获取下一个“页面”记录。
笔记
- 我建议指定一个
fields
数组,其中包含您在请求中需要的字段名称。否则,在检索大量记录时,您最终可能会浪费大量时间/带宽/内存。 - 设置
$sugar_config['max_record_fetch_size']
也会影响例如在列表视图中使用“全选”可以有多少记录。
分页示例
在下面的示例中,我们将从服务器获取所有记录,每个请求以 1000 的批次/页的形式获取。对于这个例子,我们假设服务器总共有 2341 条记录。
我们请求 1000 条记录,从 offset 开始0
,这是第一个可用的记录:
请求 #1
{
offset: 0,
max_num: 1000
}
注意:如果没有指定偏移量,则假定为 0。
来自服务器的响应 #1
{
next_offset: 1000,
records: [array of 1000 records]
}
我们在响应 #1中收到前 1000 条记录(偏移量 0 到 999),我们还没有的第一条记录的偏移量1000
在next_offset
因此我们再次请求 1000 条记录,从偏移量 1000 处的记录开始:
请求 #2
{
offset: 1000,
max_num: 1000
}
来自服务器的响应 #2
{
next_offset: 2000,
records: [array of 1000 records]
}
我们在响应 #2中收到接下来的 1000 条记录(偏移量 1000 到 1999),我们没有的第一条记录的偏移量2000
在next_offset
因此我们再次请求 1000 条记录,从偏移量 2000 处的记录开始:
请求#3
{
offset: 2000,
max_num: 1000
}
来自服务器的响应 #3
{
next_offset: -1,
records: [array of 341 records]
}
在响应 #3中,我们收到 341 条记录(偏移量 2000 到 2340)和一个next_offset
with -1
,表示没有更多记录。这意味着我们现在已收到所有可用的 1000 + 1000 + 341 = 2341 条记录。
结果概述:
______________________________
| | \ \
| | | \
| "Page 1" | |__ 1000 records |
| records at offset 0..999 | | |
| | | |
|______________________________| / |
| | \ |
| | | |__ all 2341 records
| "Page 2" | |__ 1000 records |
| records at offset 1000..1999 | | |
| | | |
|______________________________| / |
| | \ |
| "Page 3" | |__ 341 records |
| records at offset 2000..2340 | | /
|______________________________| / /
推荐阅读
- c# - 如何在 monobehaviour 类中重用代码?
- .net - 在本地和 azure devops 环境中使用 MSBuild 和 web.config 转换进行构建
- reactjs - 使用逻辑运算符或允许未定义最终结果时如何禁用类型检查
- php - 将代码从 htaccess 重写为 Nginx
- visual-studio - 为什么 NuGet 包会在一段时间后自行卸载?
- oracle - 如何修复 Oci8 的 Zendcore 扩展配置中的“服务器状态和 php.ini 状态之间发生不一致”
- python - 最小化多变量函数
- javascript - 如何重新加载没有缓存的html页面?
- arrays - 按 2 个字段对数组进行排序
- c++ - 显式实例化具有泛型类型的函数模板