Customize bulk sending for your Salesforce contacts
Learn how to use the Apex Toolkit to bulk send envelopes to your Salesforce contacts in a way that works for your use case.
Table of contents
The Apex Toolkit lets you integrate Docusign eSignature REST API functionality into Salesforce workflows and processes by exposing a full set of programmatic objects and methods that you can call from your Apex code. One of the most popular Apex Toolkit use cases is bulk sending, which lets you send an envelope to a list of recipients, each of whom will receive a copy to read or sign. If you’ve tried bulk sending with the Apex Toolkit, you may have seen our how-to guide on the subject. It demonstrates how to create and bulk send envelopes to the members of a Salesforce Chatter group. We often get questions about whether you can bulk send envelopes to recipients who are not all members of a Chatter group, and the answer is yes. In this blog post, I’ll go over our code example for bulk sending with the Apex Toolkit and explain how you can modify it to fit your use case.
As shown in the how-to, there are two main steps for bulk sending. The first is to build your list of recipients and the second is to bulk send the envelopes to the recipients in that list.
Build the recipient list
In the how-to, we build the contact list by looking at each member of a Chatter group in a for
loop and using their information to create a new recipient with the dfsle.Recipient.newBulkRecipient method. The code snippet below from the how-to demonstrates this.
@AuraEnabled
public static Id buildList(){
Id myGroupId = '0FXXXXXXXXXXXXXXAC'; // Substitute this value with your Chatter group ID
// Build a list membership from a Chatter group
List<dfsle.Envelope> myBulkCopies = new List<dfsle.Envelope>();
for (CollaborationGroupMember m : [
SELECT Member.Id, Member.Name, Member.Email
FROM CollaborationGroupMember
WHERE CollaborationGroupId = :myGroupId
]) {
myBulkCopies.add(dfsle.Envelope.newBulkCopy(
dfsle.Recipient.newBulkRecipient(
m.Member.Name,
m.Member.Email,
new dfsle.Entity(m.Member.Id) // Source Salesforce object
)
.withRole('SignerOne')
));
}
// Create the bulk list. This list persists after sending and may be reused for multiple batches of envelopes
dfsle.BulkList myList = dfsle.BulkSendService.createLists(new List<dfsle.BulkList> {
dfsle.BulkList.newList(
'My bulk list', // List name
myBulkCopies, // Envelope copies
new dfsle.Entity(myGroupId)) // The Salesforce source object
})[0];
// Save the ID for later operations
Id myListId = myList.id;
System.debug(LoggingLevel.INFO, myListId);
return myListId;
}
In the snippet above, the for
loop includes an SOQL (Salesforce Object Query Language) query that returns CollaborationGroupMember
objects. It then creates a dfsle.Envelope.newBulkCopy
object for each recipient returned from the SOQL query.
When you create a newBulkRecipient
object, you can get the data to create that recipient from any source; it doesn’t have to be related to a CollaborationGroupMember
. For example, to include recipients in the bulk send who are not Chatter group members, you can modify the for
loop in the code above to instead choose Contact
objects from Salesforce. The code snippet below demonstrates how to build a bulk list using contacts that were created this month.
for (Contact m : [
SELECT Contact.Id, Contact.Name, Contact.Email
FROM Contact
WHERE CreatedDate > THIS_MONTH
]) {
myBulkCopies.add(dfsle.Envelope.newBulkCopy(
dfsle.Recipient.newBulkRecipient(
m.Name, // Name
m.Email, // Email
new dfsle.Entity(m.Id) // Source Salesforce object
)
.withRole('SignerOne')
));
You can edit the SOQL query above with whatever conditions you need to build the list of Salesforce objects that you will use to create your bulk recipients.
Send the bulk envelopes
After you’ve built your list of bulk recipients, you need to send your bulk envelopes to those recipients. The code snippet below from the how-to guide demonstrates this.
@future(callout=true)
public static void bulkSendEnvelopes(Id myListId){
dfsle.UUID myTemplateId = dfsle.UUID.parse('3d9fac4b-xxxx-xxxx-xxxx-6cd70d70f8ed'); // Substitute your template ID
dfsle.Document myDocument = dfsle.Document.fromTemplate(
myTemplateId, // templateId in dfsle.UUID format
'myTemplate'); // name of the template
dfsle.Envelope myEnvelope = dfsle.BulkSendService.getDraftEnvelope(
new List<dfsle.Document> { myDocument }, null); // Optional Salesforce source entity
dfsle.BulkList.Result myResult = dfsle.BulkSendService.sendEnvelope(myListId, myEnvelope);
}
Just as when building your list of bulk recipients, you have options when creating your bulk envelope. In the snippet above, the envelope is created using a document from a template. Templates are useful for bulk sending because they provide you with a flexible document that can be reused for many bulk envelopes. However, if you would prefer to create your document from a file stored in Salesforce, you can edit the code above and replace the dfsle.Document.fromTemplate
method with the fromFile method.
Check out How to bulk send envelopes on the Docusign Developer Center for more details on bulk sending with the Apex Toolkit, and check out the Apex Toolkit reference to learn more about the different ways that you can tailor our code examples to your specific use cases.
Additional resources
Paige has been working for Docusign since 2020. As a Sr. Programmer Writer on the Developer Content team, she writes content and code to help developers learn how to use Docusign APIs.
Related posts