Loading
電子簽章 API

電子簽章 API

您可以使用電子簽章 API 獨立呼叫 Salesforce Contracts 功能,而無須使用 UI。這些 API 可高度自訂。您可以傳送一或多個產生的電子簽章文件。您產生的文件可以與標準或自訂物件相關聯。

若要瞭解所需權限,請參閱 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