Docusign Developement E-Mails - docusignapi

I am using the DocuSign API to allow the first person in a chain of people to sign an embedded document. The rest of the people should sign the document via e-mail. Is this possible? Is there a limit of how many e-mails you can send from a developer account? I'm successfully creating and signing the envelope but none of the other e-mail accounts I have listed on the envelope receive a copy.
String requestBody = "<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" +
"<accountId>" + accountId + "</accountId>" +
"<status>sent</status>" +
"<emailSubject>" + emailSubject + "</emailSubject>" +
"<emailBlurb>" + emailBlurb + "</emailBlurb>" +
"<templateId>81bcad0d-91ed-4616-ae97-f281b2xxxxxx</templateId>" +
"<templateRoles>" +
"<templateRole>" +
"<email>" + emailaddr4[0] + "</email>" +
"<name>" + names[0] + "</name>" +
"<roleName>Student</roleName>" +
"<clientUserId>1</clientUserId>" +
"<tabs>" +
"<textTabs>" +
"<text>" +
"<tabLabel>sid</tabLabel>" +
"<value>" + student_id + "</value>" +
"</text>" +
"</textTabs>" +
"</tabs>" +
"</templateRole>" +
"<templateRole>" +
"<email>" + emailaddr4[1] + "</email>" +
"<name>" + names[1] + "</name>" +
"<roleName>Advisor</roleName>" +
"</templateRole>" +
"<templateRole>" +
"<email>" + emailaddr4[2] + "</email>" +
"<name>" + names[2] + "</name>" +
"<roleName>Dept Head of Major</roleName>" +
"</templateRole>" +
"<templateRole>" +
"<email>" + emailaddr4[3] + "</email>" +
"<name>" + names[3] + "</name>" +
"<roleName>Dean of School</roleName>" +
"</templateRole>" +
"</templateRoles>" +
"</envelopeDefinition>";

As long as you do not set the clientUserId property for a recipient in the "Create/Send Envelope" API request, then DocuSign should send an email to the recipient when it becomes their turn in the envelope routing order.
I'd suggest that you try executing a "Get Recipients" call (https://demo.docusign.net/restapi/v2/accounts/{{acctId}}/envelopes/{{envelopeId}}/recipients?include_tabs=false&include_extended=false) for the Envelope and examine the response as a means of troubleshooting:
Examine recipients and email addresses -- do they match what you expect?
Is the clientUserId property set for any of the recipients? If that property is set for a recipient, DocuSign will NOT email them when it's their turn to sign.
What is the value of the top-level currentRoutingOrder property in the response? Only recipients who have a routingOrder property value equal to or less than the value of the top-level currentRoutingOrder property -- AND who also do not have the clientUserId property set -- will have received an Email from DocuSign at the current point in time.
Finally, if those troubleshooting tips don't lead anywhere -- definitely check the "Spam" folder for any user who apparently should have received an Email from DocuSign but apparently hasn't (i.e., the email never showed up in the Inbox). There is no limitation imposed upon Demo accounts regarding Envelope usage or number of recipient emails that you're allowed to send -- if you create the Envelope correctly, DocuSign will send the recipient email(s) at the appropriate times in the routing sequence.

Related

Why is my DocuSign CarbonCopy blank?

I'm attempting to send an envelope built from a template to one signer(Client) and have a carbon copy sent to our enroller. I'm populating the tabs with information from my DB, specific to the signer, which is why I need to use the template. I need the carbon copy to have the information present, or ideally to generate at the completed status.
When I set the routing order in the template as 1 for both the signer and CarbonCopy, the template is created and sent to the signer correctly, but the CC version is blank when sent. However, if set the signer as 1 and CC as 2, the template still sends to signer correctly, but the CarbonCopy is never generated. In neither case is the CarbonCopy sent on envelope completion.
I've tried renaming and moving the orders around as was suggested/answered in:
Docusign - Adding a non signing CC role with same routing order, but hasn't solved my issue.
I've also attempted to use the recipients/signer/CarbonCopy tags instead of the TemplateRoles/TemplateRole tags, but I get an error message stating that TemplateID cannot be used with the recipient tags.
What can I change to either have the Carbon Copy not be blank or be recieved when the envelope is completed?
My code is as follows, with the text entries shortened for brevity:
"<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" +
"<status>sent</status>" +
"<emailSubject>DocuSign API - Signature Request from Template</emailSubject>" +
"<templateId>" + templateId + "</templateId>" +
"<templateRoles>" +
"<templateRole>" +
"<name>" + client.Name + "</name>" +
"<email>" + client.Email + "</email>" +
"<roleName>" + "Signer" + "</roleName>" +
"<tabs>" +
"<textTabs>" +
"<text>" +
"<tabLabel>Name</tabLabel>" +
"<value>" + client.name + "</value>" +
"<locked>true</locked>" +
"<documentId>1</documentId>" +
"<pageNumber>1</pageNumber>" +
"</text>" +
"</textTabs>" +
"</tabs>" +
"</templateRole>" +
"<templateRole>" +
"<name>" + "enroller.Name" + "</name>" +
"<email>" + enroller.Email + "</email>" +
"<roleName>" + "EnrollerCarbonCopy" + "</roleName>" +
"</templateRole>" +
"</templateRoles>" +
"</envelopeDefinition>";
Carbon Copy in DocuSign (CC) can view the envelope at any time, but receives the email based on the routing order. That recipient will also receive the final/completed document at the end of the process.
Example #1 - This example shows the Carbon Copy receiving the document only after Recipient 1 has signed
Recipient 1 set with Signing Order 1 - Needs to Sign
Recipient 2 set with Signing Order 2 - Carbon Copy
Recipient 3 set with Signing Order 3 - Needs to Sign
Example #2 - This example shows the Carbon Copy receiving the document after both Recipient 1 and 2 have signed
Recipient 1 set with Signing Order 1 - Needs to Sign
Recipient 2 set with Signing Order 2 - Needs to Sign
Recipient 3 set with Signing Order 3 - Carbon Copy
So if you want to send the document to a Recipient with all the eSignatures completed, add the carbon copy at the end of the workflow like example #2. In both examples the carbon copy only gets one email notification with an attached document.

How to add two Signer using Custom Button Logic in Salesforce

Below i have coded the Custom Button in Javascript to add two signer in Docusign Envelope.
var RROS='1';
var CRL='Email~{!Case.Hidden_Merchant_Email__c};LastName~{!Merchant__c.Name};Role~Signer 1;RoutingOrder~1;Email~{!Account.PersonEmail};LastName~{!Account.LastName};Role~Signer 2;RoutingOrder~2,LoadDefaultContacts~1';
var CCRM='Signer 1~Merchant;Signer 2~Account Holder';
var CCTM='Signer 1~Signer;Signer 2~Signer';
window.location.href = "/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Case.Id}&CRL="+CRL+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM;
But here only signer is added in Docusign Envelope. I need to add two Signer in Envelope. Can anyone please provide the correct script if i made a mistake in the given code?. Thanks in advance.
Yes, you can send to more than one recipient. Even better, not all of the recipients need to be signers. Eg, you can send to some people to get a copy of the document after it's been signed, rather than sign. There are other options too, including Sign in person signers, etc.
Anyhow, multiple recipients are sent via the CRL query parameter, separated with commas. This documented on page 67 of the Admin Guide
Here's my version of your code (untested).
var RROS='1',
CRL='Email~{!Case.Hidden_Merchant_Email__c};' +
'LastName~{!Merchant__c.Name};' +
'Role~Signer 1;' +
'RoutingOrder~1,' + // end of signer 1
'Email~{!Account.PersonEmail};' +
'LastName~{!Account.LastName};' +
'Role~Signer 2;' +
'RoutingOrder~2,' + // end of signer 2
'LoadDefaultContacts~1',
CCRM='Signer 1~Merchant;Signer 2~Account Holder',
CCTM='Signer 1~Signer;Signer 2~Signer',
qparams = 'DSEID=0&' +
'SourceID={!Case.Id}&' +
'CRL="' + CRL + '"&' +
'RROS="' + RROS + '"&' +
'CCRM="' + CCRM + '"&' +
'CCTM="' + CCTM + '"';
window.location.href = "/apex/dsfs__DocuSign_CreateEnvelope?" + qparams;

Embedded Docusign -Adding text tabs to Dynamic envelop without using template

I am unable to create Text tabs on a dynamic envelop created without a template. I am sending the PDf document as bytes to Docusign since I need to generate a unique envelop id for each recipient. I am able to generate a recipients view with the document specified. I am also able to add signHereTabs and dateSignedTabs but not the text tabs/first name tabs. There are few places in the document where the user needs to fill in the information using text boxes. Please help with a solution to add a text tab for guided signing.
The envelop definition is as follows:
"<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" +
"<emailSubjectxxx</emailSubject>" +
"<status>sent</status>" +
"<documents>" +
"<document>" +
"<documentId>1</documentId>" +
"<name>" + documentName + "</name>" +
"</document>" +
"</documents>" +
"<recipients>" +
"<signers>" +
"<signer>" +
"<recipientId>1</recipientId>" +
"<email>" + recipientEmail + "</email>" +
"<name>" + recipientName + "</name>" +
"<clientUserId>1</clientUserId>" +
"<tabs>" +
"<signHereTabs>" +
"<signHere>" +
"<anchorString>By:</anchorString>" +
"<anchorXOffset>1</anchorXOffset>" +
"<anchorYOffset>0</anchorYOffset>" +
"<anchorIgnoreIfNotPresent>false</anchorIgnoreIfNotPresent>" +
"<anchorUnits>inches</anchorUnits>" +
"<documentId>1</documentId>" +
"<pageNumber>1</pageNumber>" +
"<recipientId>1</recipientId>" +
"</signHere>" +
"</signHereTabs>" +
"<dateSignedTabs>" +
"<dateSigned>" +
"<anchorString>(Date)</anchorString>" +
"<anchorXOffset>1</anchorXOffset>" +
"<anchorYOffset>-0.25</anchorYOffset>" +
"<anchorIgnoreIfNotPresent>false</anchorIgnoreIfNotPresent>" +
"<anchorUnits>inches</anchorUnits>" +
"<documentId>1</documentId>" +
"<pageNumber>1</pageNumber>" +
"<recipientId>1</recipientId>" +
"</dateSigned>" +
"</dateSignedTabs>" +
"<textTabs>" +
"<textTab>" +
"<tabLabel>Data Field 1</tabLabel>" +
"<locked>false</locked>" +
"<xPosition>200</xPosition>" +
"<yPosition>200</yPosition>" +
"<documentId>1</documentId>" +
"<pageNumber>1</pageNumber>" +
"<recipientId>1</recipientId>" +
"<name>Text</name>" +
"<required>true</required>" +
"<value>Text</value>" +
"</textTab>" +
"</textTabs>" +
"</tabs>" +
"</signer>" +
"</signers>" +
"</recipients>" +
"</envelopeDefinition>";
Thanks!
You need to change the inner xml element name to just <text> for each data tab you want. So change to this:
"<textTabs>" +
"<text>" +
...

Add tabs to show data that user can't change when signing in Docusign API by uploading pdf using api?

What code should i add in this in order to show a static text on document(like Amount charged, client name, company name etc) at some place that the user can't change at the time of signing the document and it should show up in the downloaded signed document from Docusign, i am using the request signature on document api walkthrough in this.
Thanks in advance.
string xmlBody =
"<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" +
"<emailSubject>DocuSign API - Signature Request on Document</emailSubject>" +
"<status>sent</status>" + // "sent" to send immediately, "created" to save as draft in your account
// add document(s)
"<documents>" +
"<document>" +
"<documentId>1</documentId>" +
"<name>" + documentName + "</name>" +
"</document>" +
"</documents>" +
// add recipient(s)
"<recipients>" +
"<signers>" +
"<signer>" +
"<recipientId>1</recipientId>" +
"<email>" + recipientMail + "</email>" +
"<name>" + recipientName + "</name>" +
"<tabs>" +
//myTestCodeStart
"<tab>" +
"<DocumentID>1</DocumentID>" +
"<RecipientID>1</RecipientID>" +
"<PageNumber>1</PageNumber>" +
"<XPosition>100</XPosition>" +
"<YPosition>100</YPosition>" +
"<ScaleValue>1</ScaleValue>" +
"<Type>Custom</Type>" +
"<Name>TestName</Name>" +
"<TabLabel>LabelTest</TabLabel>" +
"<Value>TestValue</Value>" +
"<CustomTabType>Text</CustomTabType>" +
"<CustomTabWidth>42</CustomTabWidth>" +
"<CustomTabHeight>11</CustomTabHeight>" +
"<CustomTabRequired>true</CustomTabRequired>" +
"<CustomTabLocked>true</CustomTabLocked>" +
"<CustomTabDisableAutoSize>false</CustomTabDisableAutoSize>" +
"<CustomTabValidationPattern/>" +
"<CustomTabValidationMessage/>" +
"<RequireInitialOnSharedTabChange>false</RequireInitialOnSharedTabChange>" +
"<ConcealValueOnDocument>false</ConcealValueOnDocument>" +
"<Bold>false</Bold>" +
"<Italic>false</Italic>" +
"<Underline>false</Underline>" +
"</tab>" +
//myTestCodeEnd
"<signHereTabs>" +
"<signHere>" +
"<xPosition>350</xPosition>" + // default unit is pixels
"<yPosition>517</yPosition>" + // default unit is pixels
"<documentId>1</documentId>" +
"<pageNumber>1</pageNumber>" +
"</signHere>" +
"</signHereTabs>" +
"</tabs>" +
"</signer>" +
"</signers>" +
"</recipients>" +
"</envelopeDefinition>";
To make a tab value read-only in the Envelope, set the locked property to true for that tab.
<locked>true</locked>
For example, including this XML within a "Create Envelope" request would place the read-only text 123456 within the document (at the specified X/Y location):
<textTabs>
<textTab>
<tabLabel>AcctNumber</tabLabel>
<locked>false</locked>
<name>Account Number</name>
<value>123456</value>
<xPosition>100</xPosition>
<yPosition>200</yPosition>
<font>arial</font>
<fontSize>12</fontSize>
<documentId>1</documentId>
<pageNumber>1</pageNumber>
</textTab>
</textTabs>
(Your code shows you using <tab> -- which isn't a valid element name in the REST API. Seems like you should be using <textTabs> and <textTab> as I show in the exxample above.)

Populating share-point look up columns via the web service

I am trying to populate a look-up column in a list, via the web service.
I am getting my data from an asp.net web form and using the web service method UpdateListItems and sending batch XML.
However, unless the user enters the exact data that the look up uses, the web service returns an error.
Is there anyway i can give the user of the web form, similar look-up functionality in order that the data passed will be identical?
i'm using share point 2007
The data source for the look-up column in share point is active directory.
_x0028_HR_x0029__x0020_Partner is the look up column, entering the users login name will look up their full name/ you can pick from a list.
Your help is much appreciated.
ClasService.Lists NewStarterList = new ClasService.Lists();
NewStarterList.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["SPUserName"].ToString(),
ConfigurationManager.AppSettings["SPPassword"].ToString(), ConfigurationManager.AppSettings["SPDomain"].ToString());
NewStarterList.Url = ConfigurationManager.AppSettings["SPUrl"].ToString() + ConfigurationManager.AppSettings["SPServicePath"].ToString();
try
{
string strBatch = "<Method ID='1' Cmd='Update'>" +
"<Field Name='ID'>" + clasStarter.ClasID + "</Field>" +
"<Field Name='Title'>" + clasStarter.Name + "</Field>" +
"<Field Name='_x0028_HR_x0029__x0020_Job_x0020'>" + clasStarter.JobTitle + "</Field>" +
"<Field Name='Entity'>" + clasStarter.Entity + "</Field>" +
"<Field Name='Practice_x0020_Groups'>" + clasStarter.PracticeGroup + "</Field>" +
"<Field Name='Dept'>" + clasStarter.Department + "</Field>" +
"<Field Name='Physical_x0020_Desk_x0020_Locati'>" + clasStarter.Location + ", " + clasStarter.LocationInBuilding + ", " + clasStarter.Department + "</Field>" +
"<Field Name='_x0028_HR_x0029__x0020_Line_x002'>" + clasStarter.LineManager + "</Field>" +
"<Field Name='_x0028_HR_x0029__x0020_Buddy'>" + clasStarter.Buddy + "</Field>" +
"<Field Name='_x0028_HR_x0029__x0020_Partner'>" + clasStarter.Partner + "</Field>" +//is a look up
"</Method>";
XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
elBatch.SetAttribute("OnError", "Continue");
elBatch.SetAttribute("ListVersion", "1");
elBatch.SetAttribute("ViewName", ConfigurationManager.AppSettings["SPViewID"].ToString());
elBatch.InnerXml = strBatch;
XmlNode ndReturn = NewStarterList.UpdateListItems(ConfigurationManager.AppSettings["SPListID"].ToString(), elBatch);
}
catch (Exception exp)
{
throw new Exception("NewStarterForm - Clas Update failed ", exp);
}
I haven't figured out a full solution my problem, but i have figured out part of it.
Share point look-up columns have two parts, an id and a value. If you don't know the value then you can just use -1;# as a substitute for the ID
an example of this is
"<Field Name='Partner'>-1;#" + partnerLogOnId + "</Field>"
I will probably use a list, that allows users of my form to select people, and will pass the partnerLogOnId to my web service method.

Resources