Salesforce - Docusign не прикрепляет документы после назначенного - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь интегрировать DocuSign и SF.В настоящее время у меня есть пользовательская кнопка, которая создает и отправляет документ моему получателю.Это прекрасно работает, но теперь я хочу прикрепить назначенные документы.Итак, я попытался правильно настроить соединение DocuSign с SalesForce, создать объект и установить объект, к которому должен быть прикреплен документ.Но даже когда документ назначен, я не получаю никаких вложений в свой объект SF.

Это мой класс, ответственный за отправку моего документа получателю:

public with sharing class SendToDocuSignController {
private final Contract contract;
public String envelopeId {get;set;}
private String accountId = 'MYACCOUNTID';
private String userId = 'MYUSERID';
private String password = 'MYPASS';
private String integratorsKey = 'MYKEY';
private String webServiceUrl 
    = 'https://demo.docusign.net/api/3.0/dsapi.asmx';

public SendToDocuSignController(ApexPages.StandardController controller)
{
    this.contract = [select Id, CustomerSignedId, AccountId, ContractNumber 
    from Contract where id = :ApexPages.currentPage().getParameters().get('id')];
    envelopeId = 'Not sent yet';

    SendNow();
}

public void SendNow()
{
    DocuSignAPI.APIServiceSoap dsApiSend 
        = new DocuSignAPI.APIServiceSoap();
    dsApiSend.endpoint_x = webServiceUrl;

    //Set Authentication
    String auth = '<DocuSignCredentials><Username>'+ userId 
        +'</Username><Password>' + password 
        + '</Password><IntegratorKey>' + integratorsKey 
        + '</IntegratorKey></DocuSignCredentials>';
    System.debug('Setting authentication to: ' + auth);

    dsApiSend.inputHttpHeaders_x = new Map<String, String>();
    dsApiSend.inputHttpHeaders_x.put('X-DocuSign-Authentication', 
        auth);

    DocuSignAPI.Envelope envelope = new DocuSignAPI.Envelope();
    envelope.Subject = 'Please Sign this Contract: ' 
        + contract.ContractNumber;
    envelope.EmailBlurb = 'This is my new eSignature service,'+ 
        ' it allows me to get your signoff without having to fax, ' +
        'scan, retype, refile and wait forever';
    envelope.AccountId  = accountId; 


    // Render the contract
    System.debug('Rendering the contract');
    PageReference pageRef = new PageReference('/apex/RenderContract');
    pageRef.getParameters().put('id',contract.Id);
    Blob pdfBlob = pageRef.getContent();     

    // Document
    DocuSignAPI.Document document = new DocuSignAPI.Document();
    document.ID = 1;
    document.pdfBytes = EncodingUtil.base64Encode(pdfBlob);
    document.Name = 'Contract';
    document.FileExtension = 'pdf';
    envelope.Documents = new DocuSignAPI.ArrayOfDocument();
    envelope.Documents.Document = new DocuSignAPI.Document[1];
    envelope.Documents.Document[0] = document;

    // Recipient
    System.debug('getting the contact');
    /*Contact contact = [SELECT email, FirstName, LastName 
        from Contact where id = :contract.CustomerSignedId];*/

    DocuSignAPI.Recipient recipient = new DocuSignAPI.Recipient();
    recipient.ID = 1;
    recipient.Type_x = 'Signer';
    recipient.RoutingOrder = 1;
    recipient.Email = 'email';
    recipient.UserName = 'Teste';

    // This setting seems required or you see the error:
    // "The string '' is not a valid Boolean value. 
    // at System.Xml.XmlConvert.ToBoolean(String s)" 
    recipient.RequireIDLookup = false;      

    envelope.Recipients = new DocuSignAPI.ArrayOfRecipient();
    envelope.Recipients.Recipient = new DocuSignAPI.Recipient[1];
    envelope.Recipients.Recipient[0] = recipient;

    // Tab
    DocuSignAPI.Tab tab1 = new DocuSignAPI.Tab();
    tab1.Type_x = 'SignHere';
    tab1.RecipientID = 1;
    tab1.DocumentID = 1;
    tab1.AnchorTabItem = new DocuSignAPI.AnchorTab();
    tab1.AnchorTabItem.AnchorTabString = 'By:';


    DocuSignAPI.Tab tab2 = new DocuSignAPI.Tab();
    tab2.Type_x = 'DateSigned';
    tab2.RecipientID = 1;
    tab2.DocumentID = 1;
    tab2.AnchorTabItem = new DocuSignAPI.AnchorTab();
    tab2.AnchorTabItem.AnchorTabString = 'Date Signed:';

    envelope.Tabs = new DocuSignAPI.ArrayOfTab();
    envelope.Tabs.Tab = new DocuSignAPI.Tab[2];
    envelope.Tabs.Tab[0] = tab1;        
    envelope.Tabs.Tab[1] = tab2;        

    System.debug('Calling the API');
    try {
        DocuSignAPI.EnvelopeStatus es 
        = dsApiSend.CreateAndSendEnvelope(envelope);
        envelopeId = es.EnvelopeID;
    } catch ( CalloutException e) {
        System.debug('Exception - ' + e );
        envelopeId = 'Exception - ' + e;
    }

В основном,этим контроллером я отрисовываю объект pdf с данными и присоединяю его к новому документу DocuSign, а затем отправляю его в DocuSign через API.После этого, когда получатель назначает мой документ, событие запускается в моем журнале подключений DocuSign, но у моего объекта нет связанных вложений.

Я следовал этой документации для настройки моего объекта Connect

Мои конфигурации DocuSign:

Это моя конфигурация объекта Connect

Это моя конфигурация Connect SF

Это мой журнал подключений

Если нужна какая-либо другая информация, дайте мне знать.

Заранее спасибо.

...