如何根据Case ID从ContentVersion获取二进制数据?SOQL编写求助
解决SOQL查询ContentVersion图片数据的问题
问题原因
Salesforce的SOQL规定ContentDocumentLink对象不支持作为半连接(Semi Join)内部查询的主体,因此你之前的查询语句会触发报错。
可行解决方案
方案1:单条SOQL关联查询
从ContentDocumentLink出发,通过关联对象获取目标数据:
SELECT ContentDocument.ContentVersions.VersionData FROM ContentDocumentLink WHERE LinkedEntityId IN (SELECT Id FROM Case)
该查询返回ContentDocumentLink记录集合,需从嵌套的ContentDocument.ContentVersions结构中提取VersionData字段值。
方案2:拆分两步查询
如果需要直接获取ContentVersion类型的记录,可分两步执行:
- 先获取所有关联Case的
ContentDocumentId集合:
SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId IN (SELECT Id FROM Case)
- 利用第一步得到的Id集合查询
ContentVersion:
SELECT VersionData FROM ContentVersion WHERE ContentDocumentId IN :contentDocumentIds
注::contentDocumentIds是Apex中的绑定变量,对应第一步查询返回的Id集合。
方案3:单个Case的简化查询
若仅针对某一特定Case查询,可直接指定LinkedEntityId,规避半连接限制:
SELECT VersionData FROM ContentVersion WHERE ContentDocumentId IN ( SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = '替换为你的Case ID' )
内容的提问来源于stack exchange,提问作者Ankur Goyal
相关产品推荐
相关产品推荐

