如何使用Apex从Salesforce Files中获取已签署文档
用Apex获取Salesforce Files中的已签署文档
Salesforce Files对应的核心对象是ContentDocument,要筛选已签署的文档,关键是找到能标识签署状态的关联字段或记录,以下是不同场景下的具体实现方案:
核心判断逻辑
- 原生电子签名场景:已签署文档会关联
SignRequest记录,且该记录状态为Completed。 - 第三方签名工具集成(如DocuSign):通常会在
ContentVersion(文档版本记录)上添加自定义字段(比如Is_Signed__c)标记签署状态,需根据工具的具体配置确定字段名。 - 关联带签名的业务记录:若文档附加到已签署的业务对象(如
Contract),可通过业务对象的签名状态关联查询。
Apex实现示例
场景1:基于原生SignRequest查询
// 筛选关联了已完成签名请求的ContentDocument List<ContentDocument> signedDocs = [ SELECT Id, Title, LatestPublishedVersionId FROM ContentDocument WHERE Id IN ( SELECT ContentDocumentId FROM SignRequest WHERE Status = 'Completed' ) ]; // 遍历处理结果 for(ContentDocument doc : signedDocs) { System.debug('已签署文档ID: ' + doc.Id + ',标题: ' + doc.Title); }
场景2:基于自定义签署状态字段查询
// 假设ContentVersion上有Is_Signed__c布尔字段标记签署状态 List<ContentDocument> signedDocs = [ SELECT Id, Title, LatestPublishedVersionId FROM ContentDocument WHERE LatestPublishedVersionId IN ( SELECT Id FROM ContentVersion WHERE Is_Signed__c = true ) ]; for(ContentDocument doc : signedDocs) { System.debug('已签署文档: ' + doc.Title); }
场景3:关联已签署的业务记录查询
// 假设业务对象Contract有IsSigned__c字段标记签署状态 List<ContentDocument> signedDocs = [ SELECT Id, Title FROM ContentDocument WHERE Id IN ( SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId IN ( SELECT Id FROM Contract WHERE IsSigned__c = true ) ) ];
注意事项
- 确保Apex类拥有
ContentDocument、ContentVersion、SignRequest等相关对象的查询权限。 - 第三方签名工具的状态存储逻辑可能不同,需先确认工具在Salesforce中标记签署状态的具体字段或对象。
ContentDocument是文件的主记录,ContentVersion对应具体版本,通常最新版本的状态即为当前文档的有效状态。
内容的提问来源于stack exchange,提问作者Aaron Pettitt
相关产品推荐
相关产品推荐

