diff --git a/force-app/main/default/dashboards/UnsubscribeLink.dashboardFolder-meta.xml b/force-app/main/default/dashboards/UnsubscribeLink.dashboardFolder-meta.xml new file mode 100644 index 0000000..13efe30 --- /dev/null +++ b/force-app/main/default/dashboards/UnsubscribeLink.dashboardFolder-meta.xml @@ -0,0 +1,9 @@ + + + + Manage + ethansnorris.fd4368263b35@agentforce.com + User + + Unsubscribe Link + diff --git a/force-app/main/default/dashboards/UnsubscribeLink/tkaMbgmTEZoKnENXvhvZGaktqUAOxo.dashboard-meta.xml b/force-app/main/default/dashboards/UnsubscribeLink/tkaMbgmTEZoKnENXvhvZGaktqUAOxo.dashboard-meta.xml new file mode 100644 index 0000000..de5f271 --- /dev/null +++ b/force-app/main/default/dashboards/UnsubscribeLink/tkaMbgmTEZoKnENXvhvZGaktqUAOxo.dashboard-meta.xml @@ -0,0 +1,141 @@ + + + #FFFFFF + Diagonal + #FFFFFF + light + unity + light + unity + + + 8 + 0 + + true + Auto + Bar + Auto + false + false + false + false + +
Unsubscribes by Month
+ UnsubscribeLink/Unsubscribes_by_Month_du8 + false + false + false + RowLabelAscending + true +
+ 0 + 15 +
+ + 4 + 8 + + false + Auto + + y + RowCount + + Donut + -1 + Auto + false + false + false + false + Unsubscribe__c.Status__c + + + g1 + a + + +
Unsubscribes by Status
+ Right + 6 + UnsubscribeLink/Unsubscribes_by_Status_GpS + false + true + true + RowLabelAscending + false +
+ 0 + 8 +
+ + 4 + 8 + + false + FlexTable + + -1 + + CUST_NAME + false + false + detail + + + Unsubscribe__c.Unsubscribe_Email__c + false + false + detail + + + Unsubscribe__c.Contact__c + false + false + detail + + + Unsubscribe__c.Lead__c + false + false + detail + + + Unsubscribe__c.Status__c + false + false + detail + + + CUST_CREATED_DATE + false + false + detail + + + CUST_CREATED_DATE + 2 + + true + +
Errors may imply an issue with opt out and should be reviewed.
+ +
Unsubscribes | Errors
+ UnsubscribeLink/Unsubscribes_Errors_Roa +
+ 8 + 7 +
+ 12 + 36 +
+ SpecifiedUser + true + ethansnorris.fd4368263b35@agentforce.com + ethansnorris.fd4368263b35@agentforce.com + #000000 + Unsubscribe Link + #000000 + 12 +
diff --git a/force-app/main/default/flexipages/Unsubscribe_Link.flexipage-meta.xml b/force-app/main/default/flexipages/Unsubscribe_Link.flexipage-meta.xml new file mode 100644 index 0000000..8bbc813 --- /dev/null +++ b/force-app/main/default/flexipages/Unsubscribe_Link.flexipage-meta.xml @@ -0,0 +1,166 @@ + + + + + + + dashboardName + tkaMbgmTEZoKnENXvhvZGaktqUAOxo + + + hideOnError + true + + desktopDashboards:embeddedDashboard + desktopDashboards_embeddedDashboard + + + Facet-0ae6addb-beb4-4f22-ad2e-bc219862195a + Facet + + + + + + body + Facet-0ae6addb-beb4-4f22-ad2e-bc219862195a + + + title + Standard.Tab.dashboard + + flexipage:tab + flexipage_tab4 + + + Facet-2a67f7e2-f02d-4dc7-997b-dd7b1fdb5f8c + Facet + + + + + + tabs + Facet-2a67f7e2-f02d-4dc7-997b-dd7b1fdb5f8c + + flexipage:tabset + flexipage_tabset3 + + + region1 + Region + + + + + + decorate + true + + + richTextValue + <ul><li><a href="https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkfNUAT" rel="noopener noreferrer" target="_blank">Unsubscribe Link | AppExchange</a></li><li><a href="https://trailhead.salesforce.com/trailblazer-community/groups/0F94V000000bvHfSAI?t=&amp;tab=" rel="noopener noreferrer" target="_blank">Unsubscribe Link App Support | Trailhead Community</a></li><li><a href="https://docs.google.com/document/d/1saNpdkeTU17BbPGw5jTZpjUDt_bJ8HbexAULHxrj-xI/edit?usp=sharing" rel="noopener noreferrer" target="_blank">Set Up Instructions</a></li><li><a href="https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkfNUAT&amp;tab=d#:~:text=Webinars-,Demo%20Video,-Offer%20your%20solution" rel="noopener noreferrer" target="_blank">Demo Video</a></li><li><a href="https://github.com/SalesforceLabs/UnsubscribeLink/" rel="noopener noreferrer" target="_blank">Github Repository</a></li></ul> + + flexipage:richText + flexipage_richText2 + + + Facet-0ce1d2f4-7103-4a46-9e50-a73de4de1707 + Facet + + + + + + active + false + + + body + Facet-0ce1d2f4-7103-4a46-9e50-a73de4de1707 + + + title + Bookmarks + + flexipage:tab + flexipage_tab2 + + + Facet-5b355fb0-78f8-4882-b29e-eb931737736c + Facet + + + + + + tabs + Facet-5b355fb0-78f8-4882-b29e-eb931737736c + + flexipage:tabset + flexipage_tabset2 + + + region2 + Region + + + + + + flowLayout + oneColumn + + + flowName + Unsubscribe_Link_Setup + + flowruntime:interview + flowruntime_interview + + + Facet-568ef769-946e-4bc3-a53c-77cfb554d361 + Facet + + + + + + active + false + + + body + Facet-568ef769-946e-4bc3-a53c-77cfb554d361 + + + title + Setup + + flexipage:tab + flexipage_tab + + + Facet-3b352825-ecbf-4100-a114-be268e47b9b6 + Facet + + + + + + tabs + Facet-3b352825-ecbf-4100-a114-be268e47b9b6 + + flexipage:tabset + flexipage_tabset + + + region3 + Region + + Unsubscribe Link + + AppPage + diff --git a/force-app/main/default/flows/Unsubscribe_Link_Setup.flow-meta.xml b/force-app/main/default/flows/Unsubscribe_Link_Setup.flow-meta.xml index 9f92119..112f99f 100644 --- a/force-app/main/default/flows/Unsubscribe_Link_Setup.flow-meta.xml +++ b/force-app/main/default/flows/Unsubscribe_Link_Setup.flow-meta.xml @@ -3,8 +3,8 @@ Contact_Batch - 577 - 4010 + 0 + 0 UUIDBatchInvocable apex @@ -30,13 +30,12 @@ UUIDBatchInvocable - 1 LeadBatch - 577 - 4118 + 0 + 0 UUIDBatchInvocable apex @@ -62,14 +61,13 @@ UUIDBatchInvocable - 1 - 61.0 + 64.0 ass_final_value_of_sender_email - 445 - 1238 + 0 + 0 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -91,8 +89,8 @@ ass_final_value_of_sender_email_0 - 709 - 1022 + 0 + 0 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -115,8 +113,8 @@ Assign selections made on previous screens Assign_Modified_Value - 577 - 3494 + 0 + 0 var_FinalRecord.Screen_1_Part_2__c Assign @@ -188,8 +186,8 @@ Assign values to the default if this is their first time creating a record. Default_AssignValues - 709 - 506 + 0 + 0 var_FinalRecord.Screen_3__c Assign @@ -289,8 +287,8 @@ Assign values to the final variable if this is their second or later time filling this out. EXISTINGAssignValues - 445 - 398 + 0 + 0 var_FinalRecord.Screen_3__c Assign @@ -390,8 +388,8 @@ Assign values to the final variable based on answers to the initial screen. UpdateFinalValues - 578 - 1373 + 0 + 0 var_FinalRecord.Confirmation_Email_Text__c Assign @@ -460,8 +458,8 @@ Confirmation_EmailSend - 577 - 2978 + 0 + 0 Get_Experience_Site @@ -485,8 +483,8 @@ dec_Org_wide_confirmation_email_sender - 577 - 914 + 0 + 0 ass_final_value_of_sender_email_0 @@ -511,10 +509,10 @@ Does a setup record exist already ExistingRecordSameName_0 - 577 - 290 + 0 + 0 - CompanyName + Welcome_Screen No record @@ -528,7 +526,7 @@ - EXISTINGAssignValues + WelcomeBack @@ -537,8 +535,8 @@ Does a setup record exist already ExistingRecordSameName_0_0 - 577 - 3602 + 0 + 0 Create_Record @@ -562,8 +560,8 @@ Include_screen_1 - 577 - 2270 + 0 + 0 Screen2PreviewScreen_0 @@ -587,8 +585,8 @@ IncludeScreen3Decision - 577 - 2678 + 0 + 0 Confirmation_EmailSend @@ -609,7 +607,21 @@ - Included creating an org wide email address for confirmation email sender. And profile security. + Included creating an org wide email address for confirmation email sender. And profile security. + +July 2025 Updates: +added progress bar (issue #113)--activated progress bar (was not active in version connected to pull request) +added explanation of implications for company name (issue #93) +resolved unhandled faults related to org-wide email address creation by preventing users to back track to previous screens and updated the record choice set to include non-verified email addresses (issue #114) +updated final screen to clarify the flow is finished but can be run again if needed (issue #105) +added explanation text to all preview screens (issue #144) + +Jan 2026 Updates: +flow usability and design updates, fonts, button labels, flow element sizing consistent for display in Lightning Page (issue #147) +added welcome screens and instructions depending on first time or re-entry (issue #102) +added help text on Company Name to describe its use (issue #93) +next button language is now consistent, this was already resolved (issue #177) +added progress bar (issue #113) Pick another org wide email to get an error message. ErrorEmailAddress @@ -633,27 +645,13 @@ senderOrgWideEmails String - DisplayName - 1 AND (2 OR 3) - - IsVerified - EqualTo - - true - - - - Purpose - EqualTo - - DefaultNoreply - - + Address + and Purpose - EqualTo + NotEqualTo - UserSelectionAndDefaultNoReply + UserSelection OrgWideEmailAddress @@ -693,7 +691,7 @@ CanvasMode - FREE_FORM_CANVAS + AUTO_LAYOUT_CANVAS @@ -707,8 +705,8 @@ Create the Org wide email address used by the confirmation email as the sender. Create_Org_Wide_Email_0 - 445 - 1022 + 0 + 0 ass_final_value_of_sender_email @@ -743,8 +741,8 @@ Create the UL record. Create_Record - 709 - 3710 + 0 + 0 Create_Public_Ids @@ -754,8 +752,8 @@ Collect Experience Site informations Get_Experience_Site - 577 - 3278 + 0 + 0 false Get_My_Domain @@ -768,8 +766,8 @@ Collect URL from Experience Site Get_My_Domain - 577 - 3386 + 0 + 0 false Assign_Modified_Value @@ -789,8 +787,8 @@ getULSetup - 577 - 182 + 0 + 0 false ExistingRecordSameName_0 @@ -802,8 +800,8 @@ Update_existing_record - 445 - 3710 + 0 + 0 Create_Public_Ids @@ -812,8 +810,8 @@ CompanyName - 709 - 398 + 0 + 0 false true false @@ -821,43 +819,20 @@ Default_AssignValues - CompanyName_Section1 - RegionContainer - - CompanyName_Section1_Column1 - Region - - FinalOrgName - String - - $Organization.Name - - What is your organization or company name? - InputField - UseStoredValues - false - - - width - - 6 - - - false - - - CompanyName_Section1_Column2 - Region - - width - - 6 - - - false - + S01_T01_CompanyNameInstructions + <p><strong style="font-size: 16px;">Set Company Name</strong></p><p><br></p><p>When someone clicks the unsubscribe link they will see a confirmation page that includes your company's name.</p><p>We have pre-populated the text with the name listed in Setup under Company Info but you may customize it here, if desired.</p> + DisplayText + + + FinalOrgName + String + + $Organization.Name + + Company name as it will appear on the unsubscribe confirmation page: + InputField + UseStoredValues false - SectionWithoutHeader Next true @@ -866,25 +841,26 @@ completeScreen - 577 - 4226 - true + 0 + 0 + false true - true + false DonedisplayText - <p><span style="font-size: 20px;">You are done!</span></p> + <p><strong style="font-size: 16px;">You are done! </strong></p><p>Click 'Finish' to complete setup. If you need to make any changes, you can always come back to this flow and modify your configuration.</p> DisplayText + Finish true false ConfirmationEmailPreviewScreen - 445 - 3086 - true + 0 + 0 + false true false @@ -892,7 +868,7 @@ confirmationEmailDisplayText - <p><strong style="font-size: 20px;">PREVIEW</strong></p><p><em>The email recipient receives an email. </em></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px;">From: {!varT_OrgWideEmailDisplayName}</span></p><p><span style="font-size: 20px;">Email body: {!ConfirmEmailText}</span></p> + <p><strong style="font-size: 16px;">PREVIEW</strong></p><p><em>If you opted to send a confirmation email, the recipient receives a message that looks like this. </em></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px;">From: {!varT_OrgWideEmailDisplayName}</span></p><p><span style="font-size: 20px;">Email body: {!ConfirmEmailText}</span></p><p><br></p> DisplayText true @@ -901,9 +877,9 @@ Create_Public_Ids - 577 - 3902 - true + 0 + 0 + false true false @@ -911,19 +887,19 @@ displayPublicIds - <p><span style="font-size: 18px;">Great! That part is done.</span></p><p><br></p><p><span style="font-size: 18px;">Last step</span></p><p>The Unsubscribe Link uses a 64 digit random id on each contact and lead, called Public_Id__c.</p><p>This may take a little while. You will receive an email when it is done.</p><p>After this, two record triggered flows will automatically create public ids when new contacts and leads are created.</p><p><br></p><p><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">Click next to populate the public ids on all your records now.</span></p> + <p><strong style="font-size: 16px;">Great! That part is done.</strong></p><p><br></p><p><strong style="font-size: 16px;">Last step</strong></p><p><span style="color: rgb(0, 0, 0);">The Unsubscribe Link uses a 64 digit random id on each contact and lead, called Public_Id__c.</span></p><p><span style="color: rgb(0, 0, 0);">This may take a little while. You will receive an email when it is done.</span></p><p><span style="color: rgb(0, 0, 0);">After this, two record triggered flows will automatically create public ids when new contacts and leads are created.</span></p><p><br></p><p><span style="background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);">Click next to populate the public ids on all your records now.</span></p> DisplayText true - true + false A preview of the email with the option to modify the text of the link EmailModifyScreen - 578 - 1565 - true + 0 + 0 + false true false @@ -931,7 +907,7 @@ SampleEmailDisplayText_0 - <p><strong style="font-size: 22px;"><u></u>PREVIEW</strong></p><p><em>Your email recipient gets an email like this with an unsubscribe link at the bottom. </em></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px;">Dear Friend,</span></p><p><br></p><p><span style="font-size: 20px;">It's Thursday! You love to order a pizza on Thursdays! If you order before 5, I'll also throw in some free drinks!</span></p><p><br></p><p><span style="font-size: 20px;">Your friend,</span></p><p><span style="font-size: 20px;">Bob</span></p><p><br></p><p><u style="color: rgb(2, 54, 244); font-size: 20px;">{!var_FinalRecord.Link_Text__c}</u></p> + <p><strong style="font-size: 16px;"><u></u>PREVIEW</strong></p><p><em>Your email recipient gets an email like this with an unsubscribe link at the bottom. </em></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px;">Dear Friend,</span></p><p><br></p><p><span style="font-size: 20px;">It's Thursday! You love to order a pizza on Thursdays! If you order before 5, I'll also throw in some free drinks!</span></p><p><br></p><p><span style="font-size: 20px;">Your friend,</span></p><p><span style="font-size: 20px;">Bob</span></p><p><br></p><p><u style="color: rgb(2, 54, 244); font-size: 20px;">{!var_FinalRecord.Link_Text__c}</u></p> DisplayText @@ -957,9 +933,9 @@ Give the option to have a confirmation screen before Opt Out, but this is not recommended. Screen1Preview - 445 - 2378 - true + 0 + 0 + false true false @@ -967,7 +943,7 @@ Screen1PreviewDisplayText - <p><strong style="font-size: 20px;">PREVIEW</strong></p><p><em style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">This page allows the recipient to confirm before opting out. </em></p><p><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">{!horizontalLine1}</span></p><p><br></p><p><span style="font-size: 20px;">{!var_FinalRecord.Screen_1_Part_1__c} georgeB@bbbl.org </span><span style="font-size: 20px; background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);">{!var_FinalRecord.Screen_1_Part_2__c} </span></p> + <p><strong style="font-size: 16px;">PREVIEW</strong></p><p><em style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);">This page allows the recipient to confirm before opting out. </em></p><p><span style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);">{!horizontalLine1}</span></p><p><br></p><p><span style="font-size: 20px;">{!var_FinalRecord.Screen_1_Part_1__c} georgeB@bbbl.org </span><span style="font-size: 20px; color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">{!var_FinalRecord.Screen_1_Part_2__c} </span></p> DisplayText @@ -976,62 +952,23 @@ DisplayText - Screen1Preview_Section1 - RegionContainer - - Screen1Preview_Section1_Column1 - Region - - EnableOneClick - Yes - No - String - - var_FinalRecord.Confirmation_Page__c - - Do you want to include this confirmation page? - DropdownBox - UseStoredValues - true - - - width - - 4 - - - false - - - Screen1Preview_Section1_Column2 - Region - - width - - 4 - - - false - - - Screen1Preview_Section1_Column3 - Region - - width - - 4 - - - false - - false - SectionWithoutHeader + EnableOneClick + Yes + No + String + + var_FinalRecord.Confirmation_Page__c + + Do you want to include this confirmation page? + DropdownBox + UseStoredValues + true - Screen1Preview_Section2 + Screen1Preview_Section1 RegionContainer - Screen1Preview_Section2_Column1 + Screen1Preview_Section1_Column1 Region ModifyScreen1Part1 @@ -1053,7 +990,7 @@ false - Screen1Preview_Section2_Column2 + Screen1Preview_Section1_Column2 Region ModifyScreen1Part2 @@ -1075,7 +1012,7 @@ false - Screen1Preview_Section2_Column3 + Screen1Preview_Section1_Column3 Region width @@ -1105,9 +1042,9 @@ This screen will display the confirmation message you want the user to see Screen2PreviewScreen_0 - 577 - 2570 - true + 0 + 0 + false true false @@ -1115,12 +1052,12 @@ screen2previewDisplayText_0 - <p><strong style="font-size: 20px;">PREVIEW</strong><span style="font-size: 20px;"> </span></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px; color: rgb(0, 0, 0);">{!var_FinalRecord.Screen_2_Part_1__c} {!frm_screen2part2}</span></p> + <p><strong style="font-size: 16px;">PREVIEW</strong><span style="font-size: 16px;"> </span></p><p><em style="background-color: rgb(255, 255, 255);">This is what the email recipient will see on the confirmation page after they have been unsubscribed. </em></p><p>{!horizontalLine1}</p><p><br></p><p><span style="font-size: 20px; color: rgb(0, 0, 0);">{!var_FinalRecord.Screen_2_Part_1__c} {!frm_screen2part2}</span></p> DisplayText displayTextHozLine - <p><br></p><p><br></p><p><br></p><p><br></p><p><span style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);">{!horizontalLine1}</span></p> + <p><br></p><p><span style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68);">{!horizontalLine1}</span></p> DisplayText @@ -1192,17 +1129,17 @@ This is an optional screen to allow user to enter their email if not found in the database. Screen3PreviewScreen - 445 - 2786 - true + 0 + 0 + false true - true + false Confirmation_EmailSend screen3previewDisplayText - <p><strong style="font-size: 20px;">PREVIEW</strong></p><p><em>If the email recipient's ID was not found, they can enter their email address here. You can turn off this feature. </em></p><p>{!horizontalLine1}</p> + <p><strong style="font-size: 16px;">PREVIEW</strong></p><p><em>If the email recipient's ID was not found, they can enter their email address here. You can turn off this feature. </em></p><p>{!horizontalLine1}</p> DisplayText @@ -1269,130 +1206,108 @@ Select informations to set up the unsubscribe link Set_Up_Unsubscribe_Link_0 - 577 - 698 - true + 0 + 0 + false true false dec_Org_wide_confirmation_email_sender - Set_Up_Unsubscribe_Link_0_Section1 - RegionContainer - - Set_Up_Unsubscribe_Link_0_Section1_Column1 - Region - - Company_Name - String - - var_FinalRecord.Our_Organization__c - - Company Name - InputField - UseStoredValues - false - - and - - RecordExists - EqualTo - - true - - - - - - confirmEmailQ - Yes - No - String - - var_FinalRecord.Send_Confirmation_Email__c - - Do you want to send a confirmation email immediately after the email recipient opts out? - DropdownBox - UseStoredValues - true - - - OrgWideEmailQ - senderOrgWideEmails - Create_an_org_wide_email_now - String - - var_FinalRecord.Org_Wide_Email_Address__c - - Choose an organization wide email address for this email to appear from. - DropdownBox - UseStoredValues - true - - and - - confirmEmailQ - EqualTo - - Yes - - - - - - ConfirmEmailText - String - - var_FinalRecord.Confirmation_Email_Text__c - - What should the email say? - InputField - <p>Example text: You have successfully unsubscribed from all email from &lt;insert company name&gt;.</p> - UseStoredValues - false - - and - - confirmEmailQ - EqualTo - - Yes - - - - - - width - - 6 - - - false - - - Set_Up_Unsubscribe_Link_0_Section1_Column2 - Region - - width - - 6 - - - false - + dis_BasicSetup + <p><strong style="font-size: 16px;">Basic Settings</strong></p> + DisplayText + + + Company_Name + String + + var_FinalRecord.Our_Organization__c + + Company Name + InputField + <p>When someone clicks the unsubscribe link they will see a confirmation page that includes your company's name.</p> + UseStoredValues false - SectionWithoutHeader + + and + + RecordExists + EqualTo + + true + + + + + + confirmEmailQ + Yes + No + String + + var_FinalRecord.Send_Confirmation_Email__c + + Do you want to send a confirmation email immediately after the email recipient opts out? + DropdownBox + UseStoredValues + true - Set_Up_Unsubscribe_Link_0_Section2 + OrgWideEmailQ + senderOrgWideEmails + Create_an_org_wide_email_now + String + + var_FinalRecord.Org_Wide_Email_Address__c + + Choose an organization wide email address for this email to appear from. + DropdownBox + UseStoredValues + true + + and + + confirmEmailQ + EqualTo + + Yes + + + + + + ConfirmEmailText + String + + var_FinalRecord.Confirmation_Email_Text__c + + What should the email say? + InputField + <p>Example text: You have successfully unsubscribed from all email from &lt;insert company name&gt;.</p> + UseStoredValues + false + + and + + confirmEmailQ + EqualTo + + Yes + + + + + + Set_Up_Unsubscribe_Link_0_Section1 RegionContainer - Set_Up_Unsubscribe_Link_0_Section2_Column1 + Set_Up_Unsubscribe_Link_0_Section1_Column1 Region dis_CreateOrgWide - <p><strong><u>Create organization wide email address</u></strong></p> + <p><strong style="font-size: 16px;">Create Organization Wide Email Address</strong></p> DisplayText @@ -1436,18 +1351,7 @@ width - 6 - - - false - - - Set_Up_Unsubscribe_Link_0_Section2_Column2 - Region - - width - - 6 + 12 false @@ -1467,62 +1371,108 @@ OneClickdisplaytext - <p>{!horizontalLine1}</p><p><strong><u>Allow Recipients to Type-In Email Address</u></strong></p><p><span style="font-size: 14px; background-color: transparent;">The unsubscribe link passes the contact or lead's Salesforce id to a flow. Sometimes an email recipient's security settings block or scramble the ID. You can allow your recipients to type in their email addresses to unsubscribe in that situation. BE CAREFUL! This allows anyone who has the link and knows any email addresses in your database to unsubscribe them. For example, if a bad guy knows that joeschmoe@ymail.com loves your newsletters and that bad guy dislikes your organization, then he could potentially unsubscribe Joe Schmoe from your newsletter!&nbsp;</span></p> + <p>{!horizontalLine1}</p><p><strong style="font-size: 16px;">Allow Recipients to Type-In Email Address</strong></p><p><br></p><p>The unsubscribe link passes the contact or lead's Salesforce id to a flow. Sometimes an email recipient's security settings block or scramble the ID. You can allow your recipients to type in their email addresses to unsubscribe in that situation. BE CAREFUL! This allows anyone who has the link and knows any email addresses in your database to unsubscribe them. For example, if a bad guy knows that joeschmoe@ymail.com loves your newsletters and that bad guy dislikes your organization, then he could potentially unsubscribe Joe Schmoe from your newsletter!</p> DisplayText - Set_Up_Unsubscribe_Link_0_Section3 - RegionContainer - - Set_Up_Unsubscribe_Link_0_Section3_Column1 - Region - - type_in_unsubscribe - Yes - No - String - - var_FinalRecord.Enable_Type_in_Email_Address__c - - Allow recipient to type in email - DropdownBox - UseStoredValues - true - - - width - - 4 - - - false - - - Set_Up_Unsubscribe_Link_0_Section3_Column2 - Region - - width - - 8 - - - false - - false - SectionWithoutHeader + type_in_unsubscribe + Yes + No + String + + var_FinalRecord.Enable_Type_in_Email_Address__c + + Allow recipient to type in email + DropdownBox + UseStoredValues + true Next true false + + Welcome_Screen + + 0 + 0 + true + true + true + + CompanyName + + + S00_T00_Welcome + <p><strong style="font-size: 16px;">Welcome to Setup</strong></p><p><br></p><p>Please make sure you review and complete the <strong>Set Up Instructions</strong> before moving forward with this configuration. Once ready, this flow will walk you through the necessary steps to get started!</p> + DisplayText + + true + false + + + WelcomeBack + + 0 + 0 + false + true + false + + EXISTINGAssignValues + + + S00_T00_WelcomeBack + <p><strong style="font-size: 16px;">Welcome Back to Setup</strong></p><p><br></p><p>If you would like to update your configuration of Unsubscribe Link, you may continue to reconfigure settings.</p> + DisplayText + + true + false + + + Complete + true + + 25 + + + Confirmation + true + + 15 + + + Email_Preview + true + + 10 + + + Initial_Configuration + true + + 5 + + + Public_IDs + true + + 20 + + + Welcome + true + + 0 + - 451 - 48 + 0 + 0 getULSetup - Draft + Active horizontalLine1 true diff --git a/force-app/main/default/flows/Unsubscribe_Link_Setup_Maximum_of_One_Record.flow-meta.xml b/force-app/main/default/flows/Unsubscribe_Link_Setup_Maximum_of_One_Record.flow-meta.xml new file mode 100644 index 0000000..b4aff8c --- /dev/null +++ b/force-app/main/default/flows/Unsubscribe_Link_Setup_Maximum_of_One_Record.flow-meta.xml @@ -0,0 +1,92 @@ + + + 65.0 + + Error_Limit_of_1_Record + + 0 + 0 + + Only one Unsubscribe Link Setup record can exist at a time. Use the setup flow rather than creating a record manually. + false + + + + Record_Found + + 0 + 0 + Default Outcome + + Yes_Found + and + + Get_Existing_Unsubscribe_Link_Setups + IsNull + + false + + + + Error_Limit_of_1_Record + + + + + Before create, will check to see if any existing Unsubscribe Link Setup records exist, and throw an error if one already exists as only one should be in the org at a time. + Default + Unsubscribe Link Setup {!$Flow.CurrentDateTime} + + + BuilderType + + LightningFlowBuilder + + + + CanvasMode + + AUTO_LAYOUT_CANVAS + + + + OriginBuilderType + + LightningFlowBuilder + + + AutoLaunchedFlow + + Query for any existing Unsubscribe Link Setup records + Get_Existing_Unsubscribe_Link_Setups + + 0 + 0 + false + + Record_Found + + and + + Id + NotEqualTo + + $Record.Id + + + true + Unsubscribe_Link_Setup__c + true + + + 0 + 0 + + Get_Existing_Unsubscribe_Link_Setups + + Unsubscribe_Link_Setup__c + Create + RecordBeforeSave + + Active + diff --git a/force-app/main/default/reports/UnsubscribeLink.reportFolder-meta.xml b/force-app/main/default/reports/UnsubscribeLink.reportFolder-meta.xml new file mode 100644 index 0000000..669b9e5 --- /dev/null +++ b/force-app/main/default/reports/UnsubscribeLink.reportFolder-meta.xml @@ -0,0 +1,9 @@ + + + + Manage + ethansnorris.fd4368263b35@agentforce.com + User + + Unsubscribe Link + diff --git a/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_Errors_Roa.report-meta.xml b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_Errors_Roa.report-meta.xml new file mode 100644 index 0000000..bf9839d --- /dev/null +++ b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_Errors_Roa.report-meta.xml @@ -0,0 +1,47 @@ + + + + CUST_NAME + + + Unsubscribe__c.Unsubscribe_Email__c + + + Unsubscribe__c.Status__c + + + Unsubscribe__c.Contact__c + + + Unsubscribe__c.Lead__c + + + CUST_CREATED_DATE + + All Unsubscribe records with Status 'Error'. Errors should be reviewed as they may infer an issue with the opt out. + + + Unsubscribe__c.Status__c + false + true + equals + Error + + en_US + + Tabular + Unsubscribes | Errors + + co + 1 + + CustomEntity$Unsubscribe__c + organization + true + true + true + + CUST_CREATED_DATE + INTERVAL_CUSTOM + + diff --git a/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Month_du8.report-meta.xml b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Month_du8.report-meta.xml new file mode 100644 index 0000000..ce5250f --- /dev/null +++ b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Month_du8.report-meta.xml @@ -0,0 +1,64 @@ + + + + #FFFFFF + #FFFFFF + Diagonal + + y + RowCount + + Line + false + true + CUST_CREATED_DATE + CHART_BOTTOM + true + false + false + false + Medium + Auto + #000000 + 12 + All Unsubscribes by Month + #000000 + 18 + + + CUST_NAME + + + Unsubscribe__c.Unsubscribe_Email__c + + + Unsubscribe__c.Status__c + + + Unsubscribe__c.Contact__c + + + Unsubscribe__c.Lead__c + + All Unsubscribe records by Month + Summary + + Month + CUST_CREATED_DATE + Asc + + Unsubscribes by Month + + co + 1 + + CustomEntity$Unsubscribe__c + organization + true + true + true + + CUST_CREATED_DATE + INTERVAL_CUSTOM + + diff --git a/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Status_GpS.report-meta.xml b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Status_GpS.report-meta.xml new file mode 100644 index 0000000..02389be --- /dev/null +++ b/force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Status_GpS.report-meta.xml @@ -0,0 +1,65 @@ + + + + #FFFFFF + #FFFFFF + Diagonal + + y + RowCount + + Donut + false + false + Unsubscribe__c.Status__c + Right + CHART_BOTTOM + false + true + true + true + Medium + Auto + #000000 + 12 + All Unsubscribes by Month + #000000 + 18 + + + CUST_NAME + + + Unsubscribe__c.Unsubscribe_Email__c + + + Unsubscribe__c.Contact__c + + + Unsubscribe__c.Lead__c + + + CUST_CREATED_DATE + + All Unsubscribe records by Status + Summary + + Day + Unsubscribe__c.Status__c + Asc + + Unsubscribes by Status + + co + 1 + + CustomEntity$Unsubscribe__c + organization + true + true + true + + CUST_CREATED_DATE + INTERVAL_CUSTOM + +