如何通过Salesforce REST API获取全部联系人?
解决方案:同步Salesforce全部联系人到自有应用
一、原生REST API分页获取全量数据
Salesforce REST API的query端点确实限制单页最大200条,且offset不能超过2000,但通过nextRecordsUrl可实现全量数据拉取,流程如下:
- 发起初始查询请求,设置
limit=200(单页允许的最大值),示例请求:GET /services/data/v59.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+200 - 处理响应结果:
- 若响应中存在
nextRecordsUrl字段,说明还有未返回的数据,直接使用该URL发起下一次请求(该URL已包含分页上下文,无需重新拼接SOQL) - 若响应中无
nextRecordsUrl,则表示所有数据已拉取完成
- 若响应中存在
二、jsforce库的分页实现
jsforce已封装分页逻辑,无需手动处理nextRecordsUrl,正确用法如下:
- 查询时将
limit设为200(单页最大值),或不指定limit(默认值即为200) - 配合
hasNext()和next()循环获取所有数据:const jsforce = require('jsforce'); const conn = new jsforce.Connection({ /* 你的认证配置 */ }); async function fetchAllContacts() { let allContacts = []; let query = conn.query("SELECT Id, Name FROM Contact LIMIT 200"); do { const result = await query.execute(); allContacts = allContacts.concat(result.records); query = result.hasNext() ? result.next() : null; } while (query); return allContacts; } fetchAllContacts().then(contacts => { console.log(`共获取到 ${contacts.length} 条联系人数据`); // 此处处理同步到自有应用的逻辑 }).catch(err => { console.error('拉取数据失败:', err); });- 你之前设置
limit=10时无nextRecordsUrl,是因为请求的10条数据已完全返回,无剩余数据,因此不会生成下一页链接 - jsforce限制
limit不超过200是Salesforce REST API本身的平台限制,并非库的限制
- 你之前设置
三、大数据量场景的替代方案
若同步的联系人数量极多(如10万+),可使用Salesforce Bulk API,它更适合批量数据导出:
- Bulk API支持异步批量查询,可处理百万级数据量
- jsforce同样支持Bulk API调用,示例代码:
async function bulkFetchContacts() { const job = await conn.bulk.createJob('Contact', 'query'); const batch = await job.createBatch(); await batch.execute("SELECT Id, Name FROM Contact"); // 等待批量任务完成 let batchInfo; do { batchInfo = await batch.check(); await new Promise(resolve => setTimeout(resolve, 1000)); } while (!batchInfo.completedDate); const results = await batch.result(); return results; }
内容的提问来源于stack exchange,提问作者user2943799
相关产品推荐
相关产品推荐

