You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:39:59