如何通过Salesforce API获取指定日期后增改删的商机及queryAll用法
解决Salesforce查询已删除商机的问题
原查询报错原因
你在SOQL语句中使用的ALL ROWS关键字仅支持在Apex代码中使用,通过REST/SOAP API执行查询时不能添加该关键字,因此会触发MALFORMED_QUERY错误。要获取包含已删除、归档状态的记录,必须使用Salesforce的queryAll() API端点。
queryAll API 核心说明(翻译自官方文档)
queryAll()是Salesforce REST API的专属资源,它会返回指定对象的全量记录,包含三类:
- 正常活跃的记录
- 软删除的记录(对应
isDeleted = true,即回收站中的记录) - 归档状态的记录
而普通的query()API仅返回正常活跃的记录。
使用示例
1. REST API 直接调用(curl示例)
替换{your-instance-url}、{access-token}为你的实际环境信息:
curl "https://{your-instance-url}/services/data/v59.0/queryAll/?q=SELECT+Id,Name,SystemModStamp+FROM+Opportunity+WHERE+SystemModStamp+>=+'2022-09-20'"
注意:查询语句无需添加ALL ROWS,queryAll端点会自动包含所有状态的记录;如果需要仅筛选已删除的商机,可保留AND isDeleted = true条件。
2. Python SDK(simple-salesforce示例)
使用simple-salesforce库时,直接调用query_all()方法:
from simple_salesforce import Salesforce sf = Salesforce(instance_url='https://{your-instance-url}', session_id='{access-token}') query = "SELECT Id, Name, SystemModStamp FROM Opportunity WHERE SystemModStamp >= '2022-09-20'" result = sf.query_all(query) # 遍历处理返回结果 for record in result['records']: print(f"商机ID: {record['Id']}, 名称: {record['Name']}, 最后修改时间: {record['SystemModStamp']}")
3. Salesforce CLI 示例
通过sf cli执行查询:
sf data queryall -q "SELECT Id, Name FROM Opportunity WHERE SystemModStamp >= '2022-09-20'" -o your-org-alias
关键注意事项
queryAll支持完整SOQL语法,但禁止添加ALL ROWS关键字- 权限要求:需拥有View All Data权限,或对应对象的Read权限+查看已删除记录的权限
- 分页处理:若返回记录数超过API单次限制(默认2000条),需通过结果中的
nextRecordsUrl继续获取后续数据
内容的提问来源于stack exchange,提问作者Nisarg Patel
相关产品推荐
相关产品推荐

