Loading
电子签名 API

电子签名 API

您可以独立使用电子签名 API 来调用 Salesforce Contracts 功能,而无需使用 UI。这些 API 可高度自定义。您可以发送一个或多个生成的文档进行电子签名。您生成的文档可以与标准或自定义对象相关联。

要了解所需权限,请参考 Experience Sets For DocuSign。

要了解 Apex 调控器限制,请参考执行调控器和限制。

有关电子签名 API 的信息,请参阅电子签名资源。

方法 描述
getRecipients

使用此方法查看文档收件人列表。

要通过自定义类添加自定义逻辑:

  • 创建实施 ind_docgen_api.OpenInterface 的全局 Apex 类。

  • 在 invokeMethod() 方法中添加逻辑。

  • 将类添加到贵组织。

  • 使用 URL 中的 customClass 参数调用 API。示例:

    /connect/e-sign/recipients?sourceObjectId=<sourceObjectId>&recipientSelector=<recipientCustomClassName>

要自定义如何返回收件人,请在全局 Apex 类中实施 ind_docgen_api.OpenInterface 界面。以下是获取所有带有称谓“先生”的联系人的示例实施:

public class GetEsignRecipients implements ind_docgen_api.OpenInterface {

    private static final String ERROR_UNSUPPORTED = 'Unsupported method. Only method [getRecipients] is supported.';
    private static final String ERROR_NO_RECIPIENTS = 'Recipient data not found';

    public Boolean invokeMethod(String methodName, Map<String, Object> inputMap, Map<String, Object> outMap) {
        system.debug(inputMap);
        Boolean success;

        if (methodName == 'getRecipients') {
            success = getRecipients(inputMap, outMap);
        }  else {
            throw new CustomGetRecipientsException(ERROR_UNSUPPORTED);
        }

        System.debug('invokeMethod:outMap -> ' + outMap);
        System.debug('invokeMethod:success -> ' + success);
        return success;
    }

    private Boolean getRecipients(Map<String, Object> input, Map<String, Object> output) {
        Boolean success = false;

        Id sourceObjectId = (Id) input.get('sourceObjectId');
        
        List<Map<String, Object>> recipients = new List<Map<String, Object>>();
        
        Map<String, Object> recipient = new Map<String, Object>();
        recipient.put('name', 'John Peter');
        recipient.put('email', 'johnxxxx@gmail.com');
        recipient.put('id', '1');
        
        Map<String, Object> additionalFields = new Map<String, Object>();
        additionalFields.put('routingOrder', '1');
        additionalFields.put('routingNumber', '1');
        additionalFields.put('signerRole', '1');
        additionalFields.put('recipientType','Signer'); // Case Sensitive
        additionalFields.put('recipientLocale','English (U.S.)');
        //We need to send recipientLocale as same as What we see in the Salesforce UI While Manually Adding Recipient Locale 
        recipient.put('additionalFields', additionalFields);
        recipients.add(recipient);    
             
        output.put('recipients', recipients);
        
        success = true;
        System.debug('getRecipients:output -> ' + output);
        System.debug('getRecipients:success -> ' + success);
        
        return success;

    }
    
    class CustomGetRecipientsException extends Exception {

    }
}

recipientSelector 和 sourceObjectId 是可选参数。sourceObjectId 参数作为输入传递给 Apex 类,并根据需要消耗。

要使用元数据配置自定义类,请在电子签名配置对象中添加具有以下值的记录:

  • 供应商:立方体

  • 小组类型:小组类型

  • 配置类型:收件人自定义类

  • 配置值:您的自定义类名称。>.

getDocuments

使用此方法查看为电子签名发送的文档列表。

如果 IsAssociatedWithClm 参数是:

  • true – API 获取合同文档。

  • false – API 仅从备注和附件获取文档。

要通过自定义类添加自定义逻辑:

  • 创建实施 ind_docgen_api.OpenInterface 的全局 Apex 类。

  • 在 invokeMethod() 方法中添加逻辑。

  • 将类添加到贵组织。

  • 使用 URL 中的 customClass 参数调用 API。示例:

    /connect/e-sign/documents?sourceObjectId=<sourceObjectId>&documentSelector=<customClassName>

要自定义为电子签名返回文档的方式,请在全局 Apex 类中实施 ind_docgen_api.OpenInterface 界面。以下是从链接到给定 sourceObjectId 的 ContentVersion 记录获取文档的示例实施:

public class GetEsignDocuments implements ind_docgen_api.OpenInterface {
    private static final String ERROR_UNSUPPORTED = 'Unsupported method. Only method [getDocuments] is supported.';

    public Boolean invokeMethod(String methodName, Map<String, Object> request, Map<String, Object> outMap) {
        Boolean success = true;
        if (methodName == 'getDocuments') {
            success = executeAction(request, outMap);
        } else {
             throw new CustomGetDocumentsException(ERROR_UNSUPPORTED);
         }
        return success;
    }

    private Boolean executeAction(Map<String, Object> inputMap, Map<String, Object> outMap) {
        Boolean success = false;
        System.debug('getDocuments:inputMap -> ' + inputMap);
        Id contractId = (Id)inputMap.get('sourceObjectId');
        
        // Fetch contract master document
        ContentDocument contentDocument = getMasterContractDocument(contractId);
        
        List<Map<String, Object>> documents = new List<Map<String, Object>>();
        Map<String, Object> document = new Map<String, Object>();
        document.put('fileExtension', contentDocument.FileExtension);
        document.put('name',contentDocument.Title);
        String contentVersionId = Id.valueOf(contentDocument.LatestPublishedVersionId);
        document.put('sourceId', contentVersionId);
        document.put('sourceType','Content');
        
        Map<String, String> additionalFields = new Map<String, String>();
        additionalFields.put('documentId', '1');
        document.put('additionalFields', additionalFields);
        documents.add(document);
        outMap.put('documents', documents);

        success = true;
        System.debug('getDocuments:outMap -> ' + outMap);
        System.debug('getDocuments:success -> ' + success);
        return success;
    }
    
    private ContentDocument getMasterContractDocument(Id contractId) {
        // Fetch latest contract document version
        ContractDocumentVersion latestCdv = [SELECT Id FROM ContractDocumentVersion WHERE contractId=:contractId ORDER BY VersionNumber DESC LIMIT 1];
        
        // Fetch latest contendocumentId associated with latest contract document version
        ContractDocVerContentDoc contractDoc = [SELECT ContentDocumentId FROM ContractDocVerContentDoc WHERE ContractDocumentVersionId=:latestCdv.Id LIMIT 1];
        
        // Load content document details
        ContentDocument contentDocument = [SELECT FileExtension, FileType, Id, LatestPublishedVersionId, Title FROM ContentDocument WHERE Id=:contractDoc.ContentDocumentId LIMIT 1];
        return contentDocument;    
    }

    class CustomGetDocumentsException extends Exception {

    }
}

documentSelector 是可选参数。

要使用元数据配置自定义类,请在电子签名配置对象中添加具有以下值的记录:

  • 供应商:立方体

  • 小组类型:小组类型

  • 配置类型:文档自定义类

  • 配置值:您的自定义类名称。

您不需要在 API URL 中传递自定义类名称。

getNotificationSettings

使用此方法查看提醒和到期通知设置。sourceObjectId 是一个强制参数,它返回对象的相应通知设置。

API 从这些配置设置中读取通知设置:

  • 如果仅启用 DocGen 权限,API 会从电子签名信封配置设置中读取通知设置。

  • 如果同时启用了 DocGen 和 CLM (Salesforce Contracts) 权限,并且对象类型是合同,则 API 会从合同类型配置设置中读取通知设置。

  • 如果同时启用了 DocGen 和 CLM (Salesforce Contracts) 权限,并且对象类型不是合同,API 会从电子签名信封配置设置中读取通知设置。

sendEnvelope 使用此方法启用新的 DocuSign 事务。
voidEnvelope 使用此方法使与对象关联的信封过期或失效。
updateEnvelope 使用此方法向 DocuSign 发送临时请求,以更新信封状态。
 
正在加载
Salesforce Help | Article