Loading
APIs de assinatura eletrônica

APIs de assinatura eletrônica

Você pode usar as APIs de assinatura eletrônica de forma independente para chamar as funcionalidades do Salesforce Contracts sem usar a interface do usuário. Essas APIs são altamente personalizáveis. Você pode enviar um ou mais documentos gerados para assinatura eletrônica. Os documentos gerados podem ser associados a objetos padrão ou personalizados.

Para saber mais sobre as permissões necessárias, consulte Conjuntos de permissões para o DocuSign.

Para saber mais sobre os limites do regulador do Apex, consulte Reguladores e limites de execução.

Para obter informações sobre as APIs de assinatura eletrônica, consulte Recursos de assinatura eletrônica.

Método Descrição
getRecipients

Use esse método para visualizar uma lista de destinatários do documento.

Para adicionar uma lógica personalizada por meio de uma classe personalizada:

  • Crie uma classe do Apex global que implemente ind_docgen_api.OpenInterface.

  • Adicione sua lógica dentro do método invokeMethod().

  • Adicione a classe à sua organização.

  • Chame a API usando o parâmetro customClass no URL. Exemplo:

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

Para personalizar como os destinatários são retornados, implemente a interface ind_docgen_api.OpenInterface em uma classe global do Apex. Aqui está uma implementação de amostra que busca todos os Contatos com a saudação "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 e sourceObjectId são parâmetros opcionais. O parâmetro sourceObjectId é passado como entrada para a classe do Apex e consumido conforme necessário.

Para configurar a classe personalizada usando metadados, adicione um registro no objeto Configuração de assinatura eletrônica com estes valores:

  • Fornecedor: Docasign

  • Tipo de grupo: Tipo de grupo

  • Tipo de configuração: Classe personalizada Destinatários

  • Valor de configuração: Seu nome de classe personalizado. >.

getDocuments

Use esse método para visualizar uma lista de documentos enviados para assinatura eletrônica.

Se o parâmetro IsAssociatedWithClm for:

  • true – a API busca documentos de contrato.

  • false – a API busca documentos apenas de Notas e anexos.

Para adicionar uma lógica personalizada por meio de uma classe personalizada:

  • Crie uma classe do Apex global que implemente ind_docgen_api.OpenInterface.

  • Adicione sua lógica dentro do método invokeMethod().

  • Adicione a classe à sua organização.

  • Chame a API usando o parâmetro customClass no URL. Exemplo:

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

Para personalizar como os documentos são retornados para a assinatura eSignature, implemente a interface ind_docgen_api.OpenInterface em uma classe do Apex global. Aqui está um exemplo de implementação que busca documentos de registros ContentVersion vinculados ao sourceObjectId fornecido:

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 é um parâmetro opcional.

Para configurar a classe personalizada usando metadados, adicione um registro no objeto Configuração de assinatura eletrônica com estes valores:

  • Fornecedor: Docasign

  • Tipo de grupo: Tipo de grupo

  • Tipo de configuração: Classe personalizada Documentos

  • Valor de configuração: Seu nome de classe personalizado.

Você não precisa passar o nome da classe personalizada no URL da API.

getNotificationSettings

Use esse método para visualizar as configurações de lembrete e notificação de expiração. O sourceObjectId é um parâmetro obrigatório que retorna as respectivas configurações de notificação para um objeto.

A API lê as configurações de notificação destas configurações de configuração:

  • Se apenas as permissões do DocGen estiverem habilitadas, a API lerá as configurações de notificação da configuração Configuração do Envelope de assinatura eletrônica.

  • Se as permissões DocGen e CLM (Salesforce Contracts) estiverem habilitadas e o tipo de objeto for contrato, a API lerá as configurações de notificação nas configurações de Configuração de tipo de contrato.

  • Se as permissões DocGen e CLM (Salesforce Contracts) estiverem habilitadas e o tipo de objeto não for contrato, a API lerá as configurações de notificação nas configurações de Configuração de envelope de assinatura eletrônica.

sendEnvelope Use esse método para habilitar uma nova transação do DocuSign.
voidEnvelope Use esse método para expirar ou anular envelopes associadas a um objeto.
updateEnvelope Use esse método para enviar uma solicitação ad hoc ao DocuSign para atualizar o status do envelope.
 
Carregando
Salesforce Help | Article