diff --git a/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilder.cls b/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilder.cls index 21c478b..854578a 100644 --- a/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilder.cls +++ b/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilder.cls @@ -48,18 +48,23 @@ global with sharing class DocusignCompositeEnvelopeBuilder { List sortedTemplateIds = new List(new Set(req.templateIds)); sortedTemplateIds.sort(); - // Query template names for document labels (shows in Docusign Status) + // Query template names and short names for document labels and email subject Map templateNames = new Map(); + Map templateShortNames = new Map(); for (dfsle__EnvelopeConfiguration__c config : [ - SELECT dfsle__DocuSignId__c, Name + SELECT dfsle__DocuSignId__c, Name, Short_Name__c FROM dfsle__EnvelopeConfiguration__c WHERE dfsle__DocuSignId__c IN :sortedTemplateIds ]) { templateNames.put(config.dfsle__DocuSignId__c, config.Name); + if (String.isNotBlank(config.Short_Name__c)) { + templateShortNames.put(config.dfsle__DocuSignId__c, config.Short_Name__c); + } } List documents = new List(); List docNames = new List(); + List subjectNames = new List(); for (String templateId : sortedTemplateIds) { String label = templateNames.containsKey(templateId) ? stripLanguageSuffix(templateNames.get(templateId)) @@ -71,6 +76,12 @@ global with sharing class DocusignCompositeEnvelopeBuilder { ) ); docNames.add(label); + + // Use short name for email subject if available, otherwise use regular name + String subjectName = templateShortNames.containsKey(templateId) + ? templateShortNames.get(templateId) + : label; + subjectNames.add(subjectName); } myEnvelope = myEnvelope.withDocuments(documents); @@ -93,13 +104,15 @@ global with sharing class DocusignCompositeEnvelopeBuilder { List recipients = resolveRecipients(req.recordId); myEnvelope = myEnvelope.withRecipients(recipients); - // Set email subject if provided (truncated to 100 chars max) - if (String.isNotBlank(req.emailSubject)) { - String truncatedSubject = req.emailSubject.length() > 100 - ? req.emailSubject.left(97) + '...' - : req.emailSubject; - myEnvelope = myEnvelope.withEmail(truncatedSubject, ''); + // Set email subject to combined template short names (or custom subject if provided) + String emailSubject = String.isNotBlank(req.emailSubject) + ? req.emailSubject + : String.join(subjectNames, ', '); + // Truncate to 100 characters maximum as required by Docusign + if (emailSubject.length() > 100) { + emailSubject = emailSubject.left(97) + '...'; } + myEnvelope = myEnvelope.withEmail(emailSubject, ''); // Send the envelope myEnvelope = dfsle.EnvelopeService.sendEnvelope(myEnvelope, true); diff --git a/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilderTest.cls b/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilderTest.cls index 41265cb..caa313f 100644 --- a/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilderTest.cls +++ b/composite-envelope-builder/force-app/main/default/classes/DocusignCompositeEnvelopeBuilderTest.cls @@ -221,14 +221,14 @@ private class DocusignCompositeEnvelopeBuilderTest { } @isTest - static void testWithEmailSubject() { + static void testCustomEmailSubject() { // Arrange dfsle.TestUtils.setMock(new dfsle.ESignatureAPIMock()); DocusignEnvelopeRequest req = new DocusignEnvelopeRequest(); req.templateIds = new List{'01234567-abcd-ef01-2345-6789abcdef01'}; req.recordId = '001000000ABC123'; - req.emailSubject = 'Custom: Please review and sign'; + req.emailSubject = 'Custom: Please review and sign'; // Custom subject overrides template names // Act Test.startTest(); @@ -243,14 +243,14 @@ private class DocusignCompositeEnvelopeBuilderTest { } @isTest - static void testWithoutEmailSubject() { + static void testEmailSubjectFromTemplateNames() { // Arrange dfsle.TestUtils.setMock(new dfsle.ESignatureAPIMock()); DocusignEnvelopeRequest req = new DocusignEnvelopeRequest(); req.templateIds = new List{'01234567-abcd-ef01-2345-6789abcdef01'}; req.recordId = '001000000ABC123'; - req.emailSubject = null; + req.emailSubject = null; // No custom subject provided - should use combined template names // Act Test.startTest(); @@ -261,7 +261,7 @@ private class DocusignCompositeEnvelopeBuilderTest { Test.stopTest(); // Assert - System.assertEquals(true, results[0].success, 'Should succeed without subject'); + System.assertEquals(true, results[0].success, 'Should succeed with auto-generated subject from template names'); } @isTest