VF Page :
<apex:page standardController="Apttus_Proposal__Proposal__c" extensions="DocusignTestPageController" action="{!Send}"> <apex:pageMessages ></apex:pageMessages> <apex:form > <apex:iframe src="{!envelopeId}" scrolling="true"/> </apex:form> </apex:page>
Controller
public with sharing class DocusignTestPageController { public string quotename {get;set;} public Apttus_Proposal__Proposal__c quote {get;set;} public String envelopeId {get;set;} private String accountId = ' '; // Docusign account id private String userId = ' '; //Docusign user id private String password = ' '; // docusign password; private String integratorsKey = ''; docusign key private String webServiceUrl = 'https://demo.docusign.net/api/3.0/dsapi.asmx'; public DocusignTestPageController(ApexPages.StandardController controller) { quote=(Apttus_Proposal__Proposal__c)controller.getrecord(); quote=[Select Id,Name from Apttus_Proposal__Proposal__c where Id=:quote.Id]; quotename=quote.Id; } public pagereference send() { DocusignWSDL.DSAPIServiceSoap dsApiSend = new DocusignWSDL.DSAPIServiceSoap(); 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); DocusignWSDL.Envelope envelope = new DocusignWSDL.Envelope(); envelope.Subject = 'Please Sign this Quote '; 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 = '4c65053a-b5b7-4a37-ba89-073f7275b556'; // Render the contract System.debug('Rendering the contract'); PageReference pageRef = new PageReference('/apex/Template'); pageRef.getParameters().put('id',quotename); Blob pdfBlob = pageRef.getContent(); // Document DocusignWSDL.Document document = new DocusignWSDL.Document(); document.ID = 1; document.pdfBytes = EncodingUtil.base64Encode(pdfBlob); document.Name = 'Contract'; document.FileExtension = 'pdf'; envelope.Documents = new DocusignWSDL.ArrayOfDocument(); envelope.Documents.Document = new DocusignWSDL.Document[1]; envelope.Documents.Document[0] = document; // Recipient System.debug('Building up the recipient'); DocusignWSDL.Recipient recipient1 = new DocusignWSDL.Recipient(); recipient1.ID = 1; recipient1.Type_x = 'Signer'; recipient1.RoutingOrder = 1; recipient1.Email = ''; // recipient1 email id recipient1.UserName = 'SP Sign'; DocusignWSDL.RecipientCaptiveInfo captiveinfo=new DocusignWSDL.RecipientCaptiveInfo(); captiveinfo.ClientUserId='2482343'; recipient1.CaptiveInfo=captiveinfo; // This setting seems required or you see the error: // "The string '' is not a valid Boolean value. at System.Xml.XmlConvert.ToBoolean(String s)" recipient1.RequireIDLookup = false; /*DocusignWSDL.Recipient recipient2 = new DocusignWSDL.Recipient(); recipient2.ID = 1; recipient2.Type_x = 'Signer'; recipient2.RoutingOrder = 2; recipient2.Email = ''; recipient2 email id recipient2.UserName = 'EBM Counter Sign'; // This setting seems required or you see the error: // "The string '' is not a valid Boolean value. at System.Xml.XmlConvert.ToBoolean(String s)" recipient2.RequireIDLookup = false; */ envelope.Recipients = new DocusignWSDL.ArrayOfRecipient(); envelope.Recipients.Recipient = new DocusignWSDL.Recipient[1]; envelope.Recipients.Recipient[0] = recipient1; //envelope.Recipients.Recipient[1] = recipient2; // Tab DocusignWSDL.Tab tab1 = new DocusignWSDL.Tab(); tab1.Type_x = 'SignHere'; tab1.RecipientID = 1; tab1.DocumentID = 1; tab1.AnchorTabItem = new DocusignWSDL.AnchorTab(); tab1.AnchorTabItem.AnchorTabString = 'By:'; tab1.AnchorTabItem.XOffset = 100; DocusignWSDL.Tab tab2 = new DocusignWSDL.Tab(); tab2.Type_x = 'DateSigned'; tab2.RecipientID = 1; tab2.DocumentID = 1; tab2.AnchorTabItem = new DocusignWSDL.AnchorTab(); tab2.AnchorTabItem.AnchorTabString = 'Date Signed:'; /* envelope.Tabs = new DocusignWSDL.ArrayOfTab(); envelope.Tabs.Tab = new DocusignWSDL.Tab[1]; envelope.Tabs.Tab[0] = tab1; envelope.Tabs.Tab[0] = tab2; */ System.debug('Calling the API'); try { DocusignWSDL.EnvelopeStatus es = dsApiSend.CreateAndSendEnvelope(envelope); DocusignWSDL.ArrayOfRecipientStatus arrayofrecieps=new DocusignWSDL.ArrayOfRecipientStatus(); arrayofrecieps=es.RecipientStatuses; List<DocusignWSDL.RecipientStatus> reciepstatus=new List<DocusignWSDL.RecipientStatus>(); reciepstatus=arrayofrecieps.RecipientStatus; DocusignWSDL.RequestRecipientTokenAuthenticationAssertion assertion = new DocusignWSDL.RequestRecipientTokenAuthenticationAssertion(); assertion.AssertionID = '1983'; assertion.AuthenticationInstant = DateTime.Now(); assertion.AuthenticationMethod = 'Password'; assertion.SecurityDomain = 'Request Recipient Token Test'; // Construct the URLs based on username DocusignWSDL.ArrayOfRecipient recipient = envelope.Recipients; DocusignWSDL.RequestRecipientTokenClientURLs urls = new DocusignWSDL.RequestRecipientTokenClientURLs(); String urlBase = 'https://demo.docusign.net/'; urls.OnSigningComplete = urlBase + '?event=SignComplete&uname=' + reciepstatus[0].UserName; urls.OnViewingComplete = urlBase + '?event=ViewComplete&uname=' + reciepstatus[0].UserName; urls.OnCancel = urlBase + '?event=Cancel&uname=' + reciepstatus[0].UserName; urls.OnDecline = urlBase + '?event=Decline&uname=' + reciepstatus[0].UserName; urls.OnSessionTimeout = urlBase + '?event=Timeout&uname=' + reciepstatus[0].UserName; urls.OnTTLExpired = urlBase + '?event=TTLExpired&uname=' + reciepstatus[0].UserName; urls.OnIdCheckFailed = urlBase + '?event=IDCheck&uname=' + reciepstatus[0].UserName; urls.OnAccessCodeFailed = urlBase + '?event=AccessCode&uname=' + reciepstatus[0].UserName; urls.OnException = urlBase + '?event=Exception&uname=' + reciepstatus[0].UserName; string URL=dsApiSend.RequestRecipientToken(es.envelopeId,reciepstatus[0].ClientUserId,reciepstatus[0].UserName,reciepstatus[0].Email,assertion,urls); envelopeId = URL; System.debug('Returned successfully, envelope id = ' + envelopeId ); return null; //return (new pagereference('https://demo.docusign.net/Member/EmailStart.aspx?m='+envelopeId)); } catch ( CalloutException e) { System.debug('Exception - ' + e ); envelopeId = 'Exception - ' + e; ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,e.getMessage()); ApexPages.addMessage(myMsg); return null; } } }
This is the worthy content that i have seen ever. The way you have presented this article is really awesome. By the way you are running a great blog. Thanks for sharing and just keep up this good work.
ReplyDeleteSalesforce training institutes in chennai
Salesforce course in chennai
It's interesting that many of the bloggers to helped clarify a few things for me as well as giving.Most of ideas can be nice content.The people to give them a good shake to get your point and across the command .
ReplyDeleteccna training in chennai velachery
Such a great articles in my carrier, It's wonderful commands like easiest understand words of knowledge in information's.
ReplyDeletedigital marketing course in chennai
software testing training in chennai