Loading
전자 서명 API

전자 서명 API

UI를 사용하지 않고도 e- 서명 API를 독립적으로 사용하여 Salesforce Contracts 기능을 호출할 수 있습니다. 이러한 API는 고도로 사용자 정의할 수 있습니다. 전자 서명을 위해 생성된 문서를 하나 이상 보낼 수 있습니다. 생성된 문서는 표준 또는 사용자 정의 개체와 연결할 수 있습니다.

필요한 권한에 대해 알아보려면 DocuSign용 권한 집합을 참조하십시오.

Apex 총괄자 제한에 대해 알아보려면 실행 총괄자 및 제한을 참조하십시오.

e- 서명 API에 대한 자세한 내용은 e-signature Resources를 참조하십시오.

방법 설명
getRecipients

이 방법을 사용하여 문서 수신자 목록을 봅니다.

사용자 정의 클래스를 통해 사용자 정의 논리 추가:

  • ind_docgen_api.OpenInterface를 구현하는 전역 Apex 클래스를 만듭니다.

  • invokeMethod() 메서드 안에 논리를 추가합니다.

  • 조직에 클래스를 추가합니다.

  • URL에서 customClass 매개 변수를 사용하여 API를 호출합니다. 예:

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

수신자가 반환되는 방식을 사용자 정의하려면 전역 Apex 클래스에 ind_docgen_api.OpenInterface 인터페이스를 구현합니다. 다음은 호칭이 "Sr."인 모든 연락처를 가져오는 구현 샘플입니다.

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 클래스에 전달되고 필요에 따라 사용됩니다.

메타데이터를 사용하여 사용자 정의 클래스를 구성하려면 다음 값을 사용하여 전자 서명 구성 개체에 레코드를 추가합니다.

  • 공급업체: Docusign

  • 그룹 유형: 그룹 유형

  • 구성 유형: 수신자 사용자 정의 클래스

  • 구성 값: 사용자 정의 클래스 이름입니다. >.

getDocuments

이 방법을 사용하여 전자 서명을 위해 전송된 문서 목록을 봅니다.

IsAssociatedWithClm 매개 변수가 다음인 경우:

  • true - API가 계약 문서를 가져옵니다.

  • false - API는 노트 및 첨부 파일에서만 문서를 가져옵니다.

사용자 정의 클래스를 통해 사용자 정의 논리 추가:

  • ind_docgen_api.OpenInterface를 구현하는 전역 Apex 클래스를 만듭니다.

  • invokeMethod() 메서드 안에 논리를 추가합니다.

  • 조직에 클래스를 추가합니다.

  • URL에서 customClass 매개 변수를 사용하여 API를 호출합니다. 예:

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

eSignature에 대한 문서 반환 방법을 사용자 정의하려면 전역 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는 옵션 매개 변수입니다.

메타데이터를 사용하여 사용자 정의 클래스를 구성하려면 다음 값을 사용하여 전자 서명 구성 개체에 레코드를 추가합니다.

  • 공급업체: Docusign

  • 그룹 유형: 그룹 유형

  • 구성 유형: 문서 사용자 정의 클래스

  • 구성 값: 사용자 정의 클래스 이름입니다.

API URL에 사용자 정의 클래스 이름을 전달하지 않아도 됩니다.

getNotificationSettings

이 방법을 사용하여 미리 알림 및 만료 알림 설정을 봅니다. sourceObjectId는 개체에 대한 해당 알림 설정을 반환하는 필수 매개 변수입니다.

API는 다음 구성 설정에서 알림 설정을 읽습니다.

  • DocGen 권한만 활성화된 경우 API가 전자 서명 봉투 구성 설정에서 알림 설정을 읽습니다.

  • DocGen 및 CLM(Salesforce Contracts) 권한이 모두 활성화되어 있고 개체 유형이 contract인 경우 API가 계약 유형 구성 설정에서 알림 설정을 읽습니다.

  • DocGen 및 CLM(Salesforce Contracts) 권한이 모두 활성화되어 있고 개체 유형이 contract가 아닌 경우 API가 전자 서명 봉투 구성 설정에서 알림 설정을 읽습니다.

sendEnvelope 이 방법을 사용하여 새 DocuSign 트랜잭션을 활성화합니다.
voidEnvelope 이 방법을 사용하여 개체와 연결된 봉투를 만료하거나 무효화합니다.
updateEnvelope 이 방법을 사용하여 DocuSign에 임시 요청을 보내 봉투 상태를 업데이트합니다.
 
로드 중
Salesforce Help | Article