Salesforce SOQL查询ContentVersion部分无返回记录问题排查
问题背景
我开发了一款通过ContentVersionIds获取ContentVersion详情的应用,执行如下SOQL查询以获取特定信息:
GET https://test.my.salesforce.com/services/data/v34.0/query?q=SELECT Id, ContentDocumentId, ContentSize, FileType, Title FROM ContentVersion WHERE Id='<Content_Version_ID>'
但部分ContentVersionIds对应的查询无结果,尝试用QueryAll()排查是否记录已删除,却持续返回404错误,提示“The requested resource does not exist.”。已知调用API的access_token拥有refresh_token、api、full权限。
可能的原因
QueryAll API端点调用错误:Salesforce的API路径区分大小写,正确的QueryAll端点是小写的
queryAll,如果你的请求写成了QueryAll(首字母大写),会直接返回404。正确的请求格式应该是:GET https://test.my.salesforce.com/services/data/v34.0/queryAll?q=SELECT Id, ContentDocumentId, ContentSize, FileType, Title FROM ContentVersion WHERE Id='<Content_Version_ID>'目标ContentVersion记录已被硬删除:Salesforce中,软删除的记录可以通过
queryAll查到,但如果记录被硬删除(比如通过API硬删除、数据清理工具删除,或者Sandbox刷新后旧数据被清除),queryAll也无法返回,且原ID对应的记录彻底不存在,普通query自然无结果。传入的ID无效或混淆了对象ID:你可能传入了错误的ID,比如把
ContentDocumentId当成ContentVersionId来查询,或者ID格式不符合15/18位Salesforce ID规范,这种情况下查询自然匹配不到任何记录。API版本兼容性问题:v34.0是较老的API版本(当前Salesforce API最新版本已到v58+),部分旧版本可能对
queryAll的支持存在限制,或者某些字段/查询逻辑在旧版本中有差异。建议尝试升级到较新的API版本(比如v45.0及以上)再测试。Sandbox环境数据变更:你使用的是测试环境(
test.my.salesforce.com),如果最近做过Sandbox刷新、数据重置或清理操作,原来的ContentVersion ID可能已失效,对应的记录在当前环境中已不存在。
内容的提问来源于stack exchange,提问作者Elish

