feat: add V3 Flow XML for composite envelope sending
V3 replaces individual envelope sends with single composite API call: - Added dfsle__DocuSignId__c to record lookup query - New loop builds text collection of Docusign template IDs from selected rows - Single Action call to DocusignCompositeEnvelopeBuilder after loop - Passes language from Client_Case__c automatically - New success screen shows envelope ID - New error screen with error message display - Result checking decision (success/failure routing) - Flow status: Draft (safe to deploy and test)
This commit is contained in:
parent
7df62e06ca
commit
f56b5374e4
|
|
@ -0,0 +1,512 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||
<apiVersion>60.0</apiVersion>
|
||||
<areMetricsLoggedToDataCloud>false</areMetricsLoggedToDataCloud>
|
||||
<environments>Default</environments>
|
||||
<interviewLabel>Docusign Envelope Templates V3 {!$Flow.CurrentDateTime}</interviewLabel>
|
||||
<label>Docusign Envelope Templates V3</label>
|
||||
<processType>Flow</processType>
|
||||
<status>Draft</status>
|
||||
|
||||
<!-- ==================== VARIABLES ==================== -->
|
||||
|
||||
<!-- Input: Record ID from the Client Case -->
|
||||
<variables>
|
||||
<name>recordId</name>
|
||||
<dataType>String</dataType>
|
||||
<isCollection>false</isCollection>
|
||||
<isInput>true</isInput>
|
||||
<isOutput>false</isOutput>
|
||||
</variables>
|
||||
|
||||
<!-- Text Collection: Holds Docusign template IDs from selected rows -->
|
||||
<variables>
|
||||
<name>compositeTemplateIds</name>
|
||||
<dataType>String</dataType>
|
||||
<isCollection>true</isCollection>
|
||||
<isInput>false</isInput>
|
||||
<isOutput>false</isOutput>
|
||||
</variables>
|
||||
|
||||
<!-- Output from composite envelope action -->
|
||||
<variables>
|
||||
<name>envelopeId</name>
|
||||
<dataType>String</dataType>
|
||||
<isCollection>false</isCollection>
|
||||
<isInput>false</isInput>
|
||||
<isOutput>false</isOutput>
|
||||
</variables>
|
||||
|
||||
<variables>
|
||||
<name>envelopeSuccess</name>
|
||||
<dataType>Boolean</dataType>
|
||||
<isCollection>false</isCollection>
|
||||
<isInput>false</isInput>
|
||||
<isOutput>false</isOutput>
|
||||
</variables>
|
||||
|
||||
<variables>
|
||||
<name>envelopeErrorMessage</name>
|
||||
<dataType>String</dataType>
|
||||
<isCollection>false</isCollection>
|
||||
<isInput>false</isInput>
|
||||
<isOutput>false</isOutput>
|
||||
</variables>
|
||||
|
||||
<!-- ==================== START ==================== -->
|
||||
|
||||
<start>
|
||||
<locationX>254</locationX>
|
||||
<locationY>0</locationY>
|
||||
<connector>
|
||||
<targetReference>Get_Records</targetReference>
|
||||
</connector>
|
||||
</start>
|
||||
|
||||
<!-- ==================== STEP 1: Get Client Case Record ==================== -->
|
||||
|
||||
<recordLookups>
|
||||
<name>Get_Records</name>
|
||||
<label>Get Records</label>
|
||||
<locationX>380</locationX>
|
||||
<locationY>134</locationY>
|
||||
<assignNullValuesIfNoRecordsFound>false</assignNullValuesIfNoRecordsFound>
|
||||
<connector>
|
||||
<targetReference>Is_Language_Selected</targetReference>
|
||||
</connector>
|
||||
<filterLogic>and</filterLogic>
|
||||
<filters>
|
||||
<field>Id</field>
|
||||
<operator>EqualTo</operator>
|
||||
<value>
|
||||
<elementReference>recordId</elementReference>
|
||||
</value>
|
||||
</filters>
|
||||
<getFirstRecordOnly>true</getFirstRecordOnly>
|
||||
<object>Client_Case__c</object>
|
||||
<queriedFields>Id</queriedFields>
|
||||
<queriedFields>Docusign_Envelope_Language__c</queriedFields>
|
||||
<storeOutputAutomatically>true</storeOutputAutomatically>
|
||||
</recordLookups>
|
||||
|
||||
<!-- ==================== STEP 2: Check Language ==================== -->
|
||||
|
||||
<decisions>
|
||||
<name>Is_Language_Selected</name>
|
||||
<label>Is Language Selected?</label>
|
||||
<locationX>380</locationX>
|
||||
<locationY>242</locationY>
|
||||
<defaultConnector>
|
||||
<targetReference>Language_Not_Added_Screen</targetReference>
|
||||
</defaultConnector>
|
||||
<defaultConnectorLabel>Default Outcome</defaultConnectorLabel>
|
||||
<rules>
|
||||
<name>Language_Selected</name>
|
||||
<conditionLogic>and</conditionLogic>
|
||||
<conditions>
|
||||
<leftValueReference>Get_Records.Docusign_Envelope_Language__c</leftValueReference>
|
||||
<operator>IsNull</operator>
|
||||
<rightValue>
|
||||
<booleanValue>false</booleanValue>
|
||||
</rightValue>
|
||||
</conditions>
|
||||
<connector>
|
||||
<targetReference>Language_Warning_Screen</targetReference>
|
||||
</connector>
|
||||
<label>Language Selected?</label>
|
||||
</rules>
|
||||
</decisions>
|
||||
|
||||
<screens>
|
||||
<name>Language_Not_Added_Screen</name>
|
||||
<label>Language Not Added Screen</label>
|
||||
<locationX>578</locationX>
|
||||
<locationY>350</locationY>
|
||||
<allowBack>false</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<fields>
|
||||
<name>LanguageNotSelected</name>
|
||||
<fieldText><p>The <strong>DocuSign Envelope Language</strong> is not populated on the record. Please add the language first and then proceed.</p></fieldText>
|
||||
<fieldType>DisplayText</fieldType>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>true</showHeader>
|
||||
</screens>
|
||||
|
||||
<screens>
|
||||
<name>Language_Warning_Screen</name>
|
||||
<label>Language Warning Screen</label>
|
||||
<locationX>182</locationX>
|
||||
<locationY>350</locationY>
|
||||
<allowBack>false</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<connector>
|
||||
<targetReference>DocuSign_Envelope_Templates</targetReference>
|
||||
</connector>
|
||||
<fields>
|
||||
<name>LangWarningText</name>
|
||||
<fieldText><p>The current selected language is <strong>{!Get_Records.Docusign_Envelope_Language__c}. </strong>On the next screen you will be able to see form names of {!Get_Records.Docusign_Envelope_Language__c} language only. If you want to switch the language, please go back to record and select another language form <strong>DocuSign Envelope Language</strong>.</p></fieldText>
|
||||
<fieldType>DisplayText</fieldType>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<nextOrFinishButtonLabel>Next</nextOrFinishButtonLabel>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>true</showHeader>
|
||||
</screens>
|
||||
|
||||
<!-- ==================== STEP 3: Query Envelope Templates ==================== -->
|
||||
<!-- CHANGED: Now also queries dfsle__DocuSignId__c for composite envelope -->
|
||||
|
||||
<recordLookups>
|
||||
<name>DocuSign_Envelope_Templates</name>
|
||||
<label>DocuSign Envelope Templates</label>
|
||||
<locationX>182</locationX>
|
||||
<locationY>458</locationY>
|
||||
<assignNullValuesIfNoRecordsFound>false</assignNullValuesIfNoRecordsFound>
|
||||
<connector>
|
||||
<targetReference>Envelope_template_records</targetReference>
|
||||
</connector>
|
||||
<filterLogic>and</filterLogic>
|
||||
<filters>
|
||||
<field>Envelope_Template_Language__c</field>
|
||||
<operator>EqualTo</operator>
|
||||
<value>
|
||||
<elementReference>Get_Records.Docusign_Envelope_Language__c</elementReference>
|
||||
</value>
|
||||
</filters>
|
||||
<getFirstRecordOnly>false</getFirstRecordOnly>
|
||||
<object>dfsle__EnvelopeConfiguration__c</object>
|
||||
<queriedFields>Id</queriedFields>
|
||||
<queriedFields>Name</queriedFields>
|
||||
<queriedFields>dfsle__DocuSignId__c</queriedFields>
|
||||
<sortField>Name</sortField>
|
||||
<sortOrder>Asc</sortOrder>
|
||||
<storeOutputAutomatically>true</storeOutputAutomatically>
|
||||
</recordLookups>
|
||||
|
||||
<!-- ==================== STEP 4: Data Table Screen ==================== -->
|
||||
|
||||
<screens>
|
||||
<name>Envelope_template_records</name>
|
||||
<label>Envelope template records</label>
|
||||
<locationX>182</locationX>
|
||||
<locationY>566</locationY>
|
||||
<allowBack>true</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<backButtonLabel>Back</backButtonLabel>
|
||||
<connector>
|
||||
<targetReference>Check_Row_Selection</targetReference>
|
||||
</connector>
|
||||
<fields>
|
||||
<name>data</name>
|
||||
<dataTypeMappings>
|
||||
<typeName>T</typeName>
|
||||
<typeValue>dfsle__EnvelopeConfiguration__c</typeValue>
|
||||
</dataTypeMappings>
|
||||
<extensionName>flowruntime:datatable</extensionName>
|
||||
<fieldType>ComponentInstance</fieldType>
|
||||
<inputParameters>
|
||||
<name>label</name>
|
||||
<value>
|
||||
<stringValue>Select Templates for Composite Envelope</stringValue>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>selectionMode</name>
|
||||
<value>
|
||||
<stringValue>MULTI_SELECT</stringValue>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>minRowSelection</name>
|
||||
<value>
|
||||
<numberValue>0.0</numberValue>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>tableData</name>
|
||||
<value>
|
||||
<elementReference>DocuSign_Envelope_Templates</elementReference>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>columns</name>
|
||||
<value>
|
||||
<stringValue>[{"apiName":"Name","guid":"column-6d57","editable":false,"hasCustomHeaderLabel":true,"customHeaderLabel":"Envelope Template Name","wrapText":true,"order":0,"label":"Name","type":"text"}]</stringValue>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputsOnNextNavToAssocScrn>UseStoredValues</inputsOnNextNavToAssocScrn>
|
||||
<isRequired>true</isRequired>
|
||||
<storeOutputAutomatically>true</storeOutputAutomatically>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<nextOrFinishButtonLabel>Send</nextOrFinishButtonLabel>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>true</showHeader>
|
||||
</screens>
|
||||
|
||||
<!-- ==================== STEP 5: Check Row Selection ==================== -->
|
||||
|
||||
<decisions>
|
||||
<name>Check_Row_Selection</name>
|
||||
<label>Check Row Selection</label>
|
||||
<locationX>182</locationX>
|
||||
<locationY>674</locationY>
|
||||
<defaultConnector>
|
||||
<targetReference>Row_not_selected</targetReference>
|
||||
</defaultConnector>
|
||||
<defaultConnectorLabel>Default Outcome</defaultConnectorLabel>
|
||||
<rules>
|
||||
<name>Is_Row_Selected</name>
|
||||
<conditionLogic>and</conditionLogic>
|
||||
<conditions>
|
||||
<leftValueReference>data.firstSelectedRow.Id</leftValueReference>
|
||||
<operator>IsNull</operator>
|
||||
<rightValue>
|
||||
<booleanValue>false</booleanValue>
|
||||
</rightValue>
|
||||
</conditions>
|
||||
<connector>
|
||||
<targetReference>Build_Template_ID_Collection</targetReference>
|
||||
</connector>
|
||||
<label>Is Row Selected?</label>
|
||||
</rules>
|
||||
</decisions>
|
||||
|
||||
<screens>
|
||||
<name>Row_not_selected</name>
|
||||
<label>Row not selected</label>
|
||||
<locationX>314</locationX>
|
||||
<locationY>782</locationY>
|
||||
<allowBack>true</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<backButtonLabel>Back</backButtonLabel>
|
||||
<fields>
|
||||
<name>ErrorMessage</name>
|
||||
<fieldText><p><strong style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);"><em>You have not selected any of the forms. Please go back and select the form first and then proceed.</em></strong></p></fieldText>
|
||||
<fieldType>DisplayText</fieldType>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>false</showHeader>
|
||||
</screens>
|
||||
|
||||
<!-- ==================== STEP 6: Build Template ID Collection (NEW) ==================== -->
|
||||
<!-- Loop through selected rows and extract DocuSign template IDs -->
|
||||
|
||||
<loops>
|
||||
<name>Build_Template_ID_Collection</name>
|
||||
<label>Build Template ID Collection</label>
|
||||
<locationX>50</locationX>
|
||||
<locationY>782</locationY>
|
||||
<collectionReference>data.selectedRows</collectionReference>
|
||||
<iterationOrder>Asc</iterationOrder>
|
||||
<nextValueConnector>
|
||||
<targetReference>Add_Template_ID</targetReference>
|
||||
</nextValueConnector>
|
||||
<noMoreValuesConnector>
|
||||
<targetReference>Send_Composite_Envelope</targetReference>
|
||||
</noMoreValuesConnector>
|
||||
</loops>
|
||||
|
||||
<!-- Assignment: Add current template's DocuSign ID to the collection -->
|
||||
<assignments>
|
||||
<name>Add_Template_ID</name>
|
||||
<label>Add Template ID</label>
|
||||
<locationX>50</locationX>
|
||||
<locationY>890</locationY>
|
||||
<assignmentItems>
|
||||
<assignToReference>compositeTemplateIds</assignToReference>
|
||||
<operator>Add</operator>
|
||||
<value>
|
||||
<elementReference>Build_Template_ID_Collection.dfsle__DocuSignId__c</elementReference>
|
||||
</value>
|
||||
</assignmentItems>
|
||||
<connector>
|
||||
<targetReference>Build_Template_ID_Collection</targetReference>
|
||||
</connector>
|
||||
</assignments>
|
||||
|
||||
<!-- ==================== STEP 7: Send Composite Envelope (NEW) ==================== -->
|
||||
<!-- Single API call with all template IDs -->
|
||||
|
||||
<actionCalls>
|
||||
<name>Send_Composite_Envelope</name>
|
||||
<label>Send Composite Envelope</label>
|
||||
<locationX>50</locationX>
|
||||
<locationY>1000</locationY>
|
||||
<actionName>DocusignCompositeEnvelopeBuilder</actionName>
|
||||
<actionType>apex</actionType>
|
||||
<connector>
|
||||
<targetReference>Check_Envelope_Result</targetReference>
|
||||
</connector>
|
||||
<flowTransactionModel>Automatic</flowTransactionModel>
|
||||
<inputParameters>
|
||||
<name>templateIds</name>
|
||||
<value>
|
||||
<elementReference>compositeTemplateIds</elementReference>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>recordId</name>
|
||||
<value>
|
||||
<elementReference>recordId</elementReference>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<inputParameters>
|
||||
<name>language</name>
|
||||
<value>
|
||||
<elementReference>Get_Records.Docusign_Envelope_Language__c</elementReference>
|
||||
</value>
|
||||
</inputParameters>
|
||||
<nameSegment>DocusignCompositeEnvelopeBuilder</nameSegment>
|
||||
<offset>0</offset>
|
||||
<outputParameters>
|
||||
<assignToReference>envelopeId</assignToReference>
|
||||
<name>envelopeId</name>
|
||||
</outputParameters>
|
||||
<outputParameters>
|
||||
<assignToReference>envelopeSuccess</assignToReference>
|
||||
<name>success</name>
|
||||
</outputParameters>
|
||||
<outputParameters>
|
||||
<assignToReference>envelopeErrorMessage</assignToReference>
|
||||
<name>errorMessage</name>
|
||||
</outputParameters>
|
||||
</actionCalls>
|
||||
|
||||
<!-- ==================== STEP 8: Check Result (NEW) ==================== -->
|
||||
|
||||
<decisions>
|
||||
<name>Check_Envelope_Result</name>
|
||||
<label>Check Envelope Result</label>
|
||||
<locationX>50</locationX>
|
||||
<locationY>1108</locationY>
|
||||
<defaultConnector>
|
||||
<targetReference>Error_Screen</targetReference>
|
||||
</defaultConnector>
|
||||
<defaultConnectorLabel>Default Outcome</defaultConnectorLabel>
|
||||
<rules>
|
||||
<name>Envelope_Sent_Successfully</name>
|
||||
<conditionLogic>and</conditionLogic>
|
||||
<conditions>
|
||||
<leftValueReference>envelopeSuccess</leftValueReference>
|
||||
<operator>EqualTo</operator>
|
||||
<rightValue>
|
||||
<booleanValue>true</booleanValue>
|
||||
</rightValue>
|
||||
</conditions>
|
||||
<connector>
|
||||
<targetReference>Success_Screen</targetReference>
|
||||
</connector>
|
||||
<label>Envelope Sent Successfully</label>
|
||||
</rules>
|
||||
</decisions>
|
||||
|
||||
<!-- ==================== SCREENS ==================== -->
|
||||
|
||||
<screens>
|
||||
<name>Success_Screen</name>
|
||||
<label>Success Screen</label>
|
||||
<locationX>50</locationX>
|
||||
<locationY>1216</locationY>
|
||||
<allowBack>false</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<fields>
|
||||
<name>SuccessMessage</name>
|
||||
<fieldText><p><span style="font-size: 16px; color: rgb(0, 128, 0);">✅ Composite envelope sent successfully!</span></p><p><br></p><p><strong>Envelope ID:</strong> {!envelopeId}</p><p><strong>Templates combined:</strong> All selected templates were merged into a single envelope.</p></fieldText>
|
||||
<fieldType>DisplayText</fieldType>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>false</showHeader>
|
||||
</screens>
|
||||
|
||||
<screens>
|
||||
<name>Error_Screen</name>
|
||||
<label>Error Screen</label>
|
||||
<locationX>314</locationX>
|
||||
<locationY>1216</locationY>
|
||||
<allowBack>true</allowBack>
|
||||
<allowFinish>true</allowFinish>
|
||||
<allowPause>false</allowPause>
|
||||
<backButtonLabel>Back</backButtonLabel>
|
||||
<fields>
|
||||
<name>ErrorDisplayMessage</name>
|
||||
<fieldText><p><span style="font-size: 16px; color: rgb(255, 0, 0);">❌ Failed to send composite envelope.</span></p><p><br></p><p><strong>Error:</strong> {!envelopeErrorMessage}</p><p><br></p><p>Please try again or contact your administrator.</p></fieldText>
|
||||
<fieldType>DisplayText</fieldType>
|
||||
<styleProperties>
|
||||
<verticalAlignment>
|
||||
<stringValue>top</stringValue>
|
||||
</verticalAlignment>
|
||||
<width>
|
||||
<stringValue>12</stringValue>
|
||||
</width>
|
||||
</styleProperties>
|
||||
</fields>
|
||||
<showFooter>true</showFooter>
|
||||
<showHeader>false</showHeader>
|
||||
</screens>
|
||||
|
||||
<!-- ==================== METADATA ==================== -->
|
||||
|
||||
<processMetadataValues>
|
||||
<name>BuilderType</name>
|
||||
<value>
|
||||
<stringValue>LightningFlowBuilder</stringValue>
|
||||
</value>
|
||||
</processMetadataValues>
|
||||
<processMetadataValues>
|
||||
<name>CanvasMode</name>
|
||||
<value>
|
||||
<stringValue>AUTO_LAYOUT_CANVAS</stringValue>
|
||||
</value>
|
||||
</processMetadataValues>
|
||||
<processMetadataValues>
|
||||
<name>OriginBuilderType</name>
|
||||
<value>
|
||||
<stringValue>LightningFlowBuilder</stringValue>
|
||||
</value>
|
||||
</processMetadataValues>
|
||||
</Flow>
|
||||
Loading…
Reference in New Issue