You need to sign in to do that
Don't have an account?
Vaibhav Desale
Docusign API Error
Hi Everyone I am trying to intigrate docusign with salesforce. I am having one problem in my class when I am sending attachments of record. Code works fine when the record page is render as pdf.
I want to send attachments attached to a record.
Apex class:
public with sharing class SendToDocuSignController {
private final Opportunity opportunity;
public String envelopeId {get;set;}
private String accountId = '73ed93ba-5334-4983-9ba8-1515169d273a';
private String userId = 'da3249f7-7f1c-4279-a3d6-989f016889b2';
private String password = 'vaibhav939';
private String integratorsKey = 'cf12560e-1211-4d73-a374-d8e649d8ae9d';
private String webServiceUrl
= 'https://demo.docusign.net/api/3.0/dsapi.asmx?op=CreateAndSendEnvelope';
public SendToDocuSignController(ApexPages.StandardController controller)
{
this.opportunity= [SELECT Id FROM Opportunity where id = :controller.getRecord().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',opportunity.Id);
// Blob pdfBlob = pageRef.getContent();
Attachment att = [SELECT Id, Name, Body, ContentType FROM Attachment WHERE Parentid = :opportunity.Id LIMIT 1];
Blob pdfBlob = att.Body;
// Document
DocuSignAPI.Document document = new DocuSignAPI.Document();
document.ID = 1;
document.pdfBytes = EncodingUtil.base64Encode(pdfBlob);
document.Name = 'Contract';
document.FileExtension = 'docx';
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 = 'vaibhav123desale@gmail.com';
recipient.UserName = contact.FirstName + ' ' + contact.LastName;
// 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.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;
}
}
}
Error :-
The DocuSign EnvelopeId:Exception - System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: The specified Anchor Tab string was not found in the document. Anchor Tab String "By:" not found.Anchor Tab String "Date Signed:" not found. faultcode=soap:Client faultactor=https://demo.docusign.net/api/3.0/dsapi.asmx?op=CreateAndSendEnvelope
I have refered this link:-
http://developer.force.com/cookbook/recipe/accessing-docusign-api-from-salesforcecom-to-send-contracts-for-esignatures
Please help me out to solve the issue.
Thanks in advance.
I want to send attachments attached to a record.
Apex class:
public with sharing class SendToDocuSignController {
private final Opportunity opportunity;
public String envelopeId {get;set;}
private String accountId = '73ed93ba-5334-4983-9ba8-1515169d273a';
private String userId = 'da3249f7-7f1c-4279-a3d6-989f016889b2';
private String password = 'vaibhav939';
private String integratorsKey = 'cf12560e-1211-4d73-a374-d8e649d8ae9d';
private String webServiceUrl
= 'https://demo.docusign.net/api/3.0/dsapi.asmx?op=CreateAndSendEnvelope';
public SendToDocuSignController(ApexPages.StandardController controller)
{
this.opportunity= [SELECT Id FROM Opportunity where id = :controller.getRecord().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',opportunity.Id);
// Blob pdfBlob = pageRef.getContent();
Attachment att = [SELECT Id, Name, Body, ContentType FROM Attachment WHERE Parentid = :opportunity.Id LIMIT 1];
Blob pdfBlob = att.Body;
// Document
DocuSignAPI.Document document = new DocuSignAPI.Document();
document.ID = 1;
document.pdfBytes = EncodingUtil.base64Encode(pdfBlob);
document.Name = 'Contract';
document.FileExtension = 'docx';
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 = 'vaibhav123desale@gmail.com';
recipient.UserName = contact.FirstName + ' ' + contact.LastName;
// 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.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;
}
}
}
Error :-
The DocuSign EnvelopeId:Exception - System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: The specified Anchor Tab string was not found in the document. Anchor Tab String "By:" not found.Anchor Tab String "Date Signed:" not found. faultcode=soap:Client faultactor=https://demo.docusign.net/api/3.0/dsapi.asmx?op=CreateAndSendEnvelope
I have refered this link:-
http://developer.force.com/cookbook/recipe/accessing-docusign-api-from-salesforcecom-to-send-contracts-for-esignatures
Please help me out to solve the issue.
Thanks in advance.