From 2daa0be656828cda652d393a94b8a58e8876972d Mon Sep 17 00:00:00 2001 From: Sarah Pilzer Date: Thu, 31 Jul 2025 14:36:28 -0400 Subject: [PATCH 1/6] Usability and design updates to unsubscribe link setup flow --- .../Unsubscribe_Link_Setup.flow-meta.xml | 263 +++++++++--------- 1 file changed, 130 insertions(+), 133 deletions(-) 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..cd5132e 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 + 182 + 3122 UUIDBatchInvocable apex @@ -30,13 +30,12 @@ UUIDBatchInvocable - 1 LeadBatch - 577 - 4118 + 182 + 3230 UUIDBatchInvocable apex @@ -62,14 +61,13 @@ UUIDBatchInvocable - 1 61.0 ass_final_value_of_sender_email - 445 - 1238 + 50 + 974 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -91,8 +89,8 @@ ass_final_value_of_sender_email_0 - 709 - 1022 + 314 + 866 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -115,8 +113,8 @@ Assign selections made on previous screens Assign_Modified_Value - 577 - 3494 + 182 + 2606 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 + 314 + 458 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 + 50 + 350 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 + 182 + 1166 var_FinalRecord.Confirmation_Email_Text__c Assign @@ -460,8 +458,8 @@ Confirmation_EmailSend - 577 - 2978 + 182 + 2090 Get_Experience_Site @@ -485,8 +483,8 @@ dec_Org_wide_confirmation_email_sender - 577 - 914 + 182 + 758 ass_final_value_of_sender_email_0 @@ -511,8 +509,8 @@ Does a setup record exist already ExistingRecordSameName_0 - 577 - 290 + 182 + 242 CompanyName @@ -537,8 +535,8 @@ Does a setup record exist already ExistingRecordSameName_0_0 - 577 - 3602 + 182 + 2714 Create_Record @@ -562,8 +560,8 @@ Include_screen_1 - 577 - 2270 + 182 + 1382 Screen2PreviewScreen_0 @@ -587,8 +585,8 @@ IncludeScreen3Decision - 577 - 2678 + 182 + 1790 Confirmation_EmailSend @@ -609,7 +607,14 @@ - 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) +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) Pick another org wide email to get an error message. ErrorEmailAddress @@ -633,27 +638,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 +684,7 @@ CanvasMode - FREE_FORM_CANVAS + AUTO_LAYOUT_CANVAS @@ -707,8 +698,8 @@ Create the Org wide email address used by the confirmation email as the sender. Create_Org_Wide_Email_0 - 445 - 1022 + 50 + 866 ass_final_value_of_sender_email @@ -743,8 +734,8 @@ Create the UL record. Create_Record - 709 - 3710 + 314 + 2822 Create_Public_Ids @@ -754,8 +745,8 @@ Collect Experience Site informations Get_Experience_Site - 577 - 3278 + 182 + 2390 false Get_My_Domain @@ -768,8 +759,8 @@ Collect URL from Experience Site Get_My_Domain - 577 - 3386 + 182 + 2498 false Assign_Modified_Value @@ -789,8 +780,8 @@ getULSetup - 577 - 182 + 182 + 134 false ExistingRecordSameName_0 @@ -802,8 +793,8 @@ Update_existing_record - 445 - 3710 + 50 + 2822 Create_Public_Ids @@ -812,8 +803,8 @@ CompanyName - 709 - 398 + 314 + 350 false true false @@ -821,43 +812,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 +834,26 @@ completeScreen - 577 - 4226 - true + 182 + 3338 + false true - true + false DonedisplayText - <p><span style="font-size: 20px;">You are done!</span></p> + <p><span style="font-size: 20px;">You are done! </span></p><p><br></p><p><span style="font-size: 20px;">If you need to make any changes, click Run Again. </span><span style="font-size: 20px; background-color: rgb(255, 255, 255);">Otherwise, just close this window.</span></p> DisplayText + Run Again true false ConfirmationEmailPreviewScreen - 445 - 3086 - true + 50 + 2198 + false true false @@ -892,7 +861,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: 20px;">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> DisplayText true @@ -901,9 +870,9 @@ Create_Public_Ids - 577 - 3902 - true + 182 + 3014 + false true false @@ -921,9 +890,9 @@ A preview of the email with the option to modify the text of the link EmailModifyScreen - 578 - 1565 - true + 182 + 1274 + false true false @@ -931,7 +900,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: 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="font-size: 20px; color: rgb(2, 54, 244);">{!var_FinalRecord.Link_Text__c}</u></p> DisplayText @@ -957,9 +926,9 @@ Give the option to have a confirmation screen before Opt Out, but this is not recommended. Screen1Preview - 445 - 2378 - true + 50 + 1490 + false true false @@ -1105,9 +1074,9 @@ This screen will display the confirmation message you want the user to see Screen2PreviewScreen_0 - 577 - 2570 - true + 182 + 1682 + false true false @@ -1115,7 +1084,7 @@ 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: 20px;">PREVIEW</strong><span style="font-size: 20px;"> </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="color: rgb(0, 0, 0); font-size: 20px;">{!var_FinalRecord.Screen_2_Part_1__c} {!frm_screen2part2}</span></p> DisplayText @@ -1192,11 +1161,11 @@ This is an optional screen to allow user to enter their email if not found in the database. Screen3PreviewScreen - 445 - 2786 - true + 50 + 1898 + false true - true + false Confirmation_EmailSend @@ -1269,9 +1238,9 @@ Select informations to set up the unsubscribe link Set_Up_Unsubscribe_Link_0 - 577 - 698 - true + 182 + 650 + false true false @@ -1515,14 +1484,42 @@ true false + + Set the company name and unsubscribe configurations and then create the Unsubscribe Link Setup record. + STG01_InitialConfiguration + true + + 1 + + + Preview the text for the experience cloud flow pages and the confirmation email. + STG02_Previews + true + + 2 + + + Stage for creating the required public IDs for the contact and lead objects. + STG03_PublicIDs + true + + 3 + + + The final confirmation screen. + STG04_Done + true + + 4 + - 451 - 48 + 56 + 0 getULSetup - Draft + Active horizontalLine1 true From 456c68eed241beca34912d847b1986f96e531784 Mon Sep 17 00:00:00 2001 From: DKeatonDC <165526945+DKeatonDC@users.noreply.github.com> Date: Sat, 2 Aug 2025 09:48:10 -0400 Subject: [PATCH 2/6] Activates flow headers --- .../Unsubscribe_Link_Setup.flow-meta.xml | 122 +++++++++--------- 1 file changed, 61 insertions(+), 61 deletions(-) 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 cd5132e..4bb5f20 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 - 182 - 3122 + 0 + 0 UUIDBatchInvocable apex @@ -34,8 +34,8 @@ LeadBatch - 182 - 3230 + 0 + 0 UUIDBatchInvocable apex @@ -62,12 +62,12 @@ UUIDBatchInvocable - 61.0 + 64.0 ass_final_value_of_sender_email - 50 - 974 + 0 + 0 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -89,8 +89,8 @@ ass_final_value_of_sender_email_0 - 314 - 866 + 0 + 0 var_FinalRecord.Org_Wide_Email_Address__c Assign @@ -113,8 +113,8 @@ Assign selections made on previous screens Assign_Modified_Value - 182 - 2606 + 0 + 0 var_FinalRecord.Screen_1_Part_2__c Assign @@ -186,8 +186,8 @@ Assign values to the default if this is their first time creating a record. Default_AssignValues - 314 - 458 + 0 + 0 var_FinalRecord.Screen_3__c Assign @@ -287,8 +287,8 @@ Assign values to the final variable if this is their second or later time filling this out. EXISTINGAssignValues - 50 - 350 + 0 + 0 var_FinalRecord.Screen_3__c Assign @@ -388,8 +388,8 @@ Assign values to the final variable based on answers to the initial screen. UpdateFinalValues - 182 - 1166 + 0 + 0 var_FinalRecord.Confirmation_Email_Text__c Assign @@ -458,8 +458,8 @@ Confirmation_EmailSend - 182 - 2090 + 0 + 0 Get_Experience_Site @@ -483,8 +483,8 @@ dec_Org_wide_confirmation_email_sender - 182 - 758 + 0 + 0 ass_final_value_of_sender_email_0 @@ -509,8 +509,8 @@ Does a setup record exist already ExistingRecordSameName_0 - 182 - 242 + 0 + 0 CompanyName @@ -535,8 +535,8 @@ Does a setup record exist already ExistingRecordSameName_0_0 - 182 - 2714 + 0 + 0 Create_Record @@ -560,8 +560,8 @@ Include_screen_1 - 182 - 1382 + 0 + 0 Screen2PreviewScreen_0 @@ -585,8 +585,8 @@ IncludeScreen3Decision - 182 - 1790 + 0 + 0 Confirmation_EmailSend @@ -610,7 +610,7 @@ Included creating an org wide email address for confirmation email sender. And profile security. July 2025 Updates: -added progress bar (issue #113) +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) @@ -698,8 +698,8 @@ added explanation text to all preview screens (issue #144) Create the Org wide email address used by the confirmation email as the sender. Create_Org_Wide_Email_0 - 50 - 866 + 0 + 0 ass_final_value_of_sender_email @@ -734,8 +734,8 @@ added explanation text to all preview screens (issue #144) Create the UL record. Create_Record - 314 - 2822 + 0 + 0 Create_Public_Ids @@ -745,8 +745,8 @@ added explanation text to all preview screens (issue #144) Collect Experience Site informations Get_Experience_Site - 182 - 2390 + 0 + 0 false Get_My_Domain @@ -759,8 +759,8 @@ added explanation text to all preview screens (issue #144) Collect URL from Experience Site Get_My_Domain - 182 - 2498 + 0 + 0 false Assign_Modified_Value @@ -780,8 +780,8 @@ added explanation text to all preview screens (issue #144) getULSetup - 182 - 134 + 0 + 0 false ExistingRecordSameName_0 @@ -793,8 +793,8 @@ added explanation text to all preview screens (issue #144) Update_existing_record - 50 - 2822 + 0 + 0 Create_Public_Ids @@ -803,8 +803,8 @@ added explanation text to all preview screens (issue #144) CompanyName - 314 - 350 + 0 + 0 false true false @@ -834,8 +834,8 @@ added explanation text to all preview screens (issue #144) completeScreen - 182 - 3338 + 0 + 0 false true false @@ -851,8 +851,8 @@ added explanation text to all preview screens (issue #144) ConfirmationEmailPreviewScreen - 50 - 2198 + 0 + 0 false true false @@ -870,8 +870,8 @@ added explanation text to all preview screens (issue #144) Create_Public_Ids - 182 - 3014 + 0 + 0 false true false @@ -890,8 +890,8 @@ added explanation text to all preview screens (issue #144) A preview of the email with the option to modify the text of the link EmailModifyScreen - 182 - 1274 + 0 + 0 false true false @@ -926,8 +926,8 @@ added explanation text to all preview screens (issue #144) Give the option to have a confirmation screen before Opt Out, but this is not recommended. Screen1Preview - 50 - 1490 + 0 + 0 false true false @@ -1074,8 +1074,8 @@ added explanation text to all preview screens (issue #144) This screen will display the confirmation message you want the user to see Screen2PreviewScreen_0 - 182 - 1682 + 0 + 0 false true false @@ -1161,8 +1161,8 @@ added explanation text to all preview screens (issue #144) This is an optional screen to allow user to enter their email if not found in the database. Screen3PreviewScreen - 50 - 1898 + 0 + 0 false true false @@ -1238,8 +1238,8 @@ added explanation text to all preview screens (issue #144) Select informations to set up the unsubscribe link Set_Up_Unsubscribe_Link_0 - 182 - 650 + 0 + 0 false true false @@ -1513,7 +1513,7 @@ added explanation text to all preview screens (issue #144) 4 - 56 + 0 0 getULSetup From 79bf861ac88916d3db8c28222124e3da177c5b22 Mon Sep 17 00:00:00 2001 From: esnorris <99896740+esnorris@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:03:37 -0600 Subject: [PATCH 3/6] Created before create flow that 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. --- ..._Setup_Maximum_of_One_Record.flow-meta.xml | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 force-app/main/default/flows/Unsubscribe_Link_Setup_Maximum_of_One_Record.flow-meta.xml 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 + From f7b41526689405a1bb2328e0a38bb180c6e67175 Mon Sep 17 00:00:00 2001 From: esnorris <99896740+esnorris@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:19:38 -0600 Subject: [PATCH 4/6] Reports and Dashboard for admin or users to monitor Unsubscribes --- .../UnsubscribeLink.dashboardFolder-meta.xml | 9 ++ ...TEZoKnENXvhvZGaktqUAOxo.dashboard-meta.xml | 141 ++++++++++++++++++ .../UnsubscribeLink.reportFolder-meta.xml | 9 ++ .../Unsubscribes_Errors_Roa.report-meta.xml | 47 ++++++ .../Unsubscribes_by_Month_du8.report-meta.xml | 64 ++++++++ ...Unsubscribes_by_Status_GpS.report-meta.xml | 65 ++++++++ 6 files changed, 335 insertions(+) create mode 100644 force-app/main/default/dashboards/UnsubscribeLink.dashboardFolder-meta.xml create mode 100644 force-app/main/default/dashboards/UnsubscribeLink/tkaMbgmTEZoKnENXvhvZGaktqUAOxo.dashboard-meta.xml create mode 100644 force-app/main/default/reports/UnsubscribeLink.reportFolder-meta.xml create mode 100644 force-app/main/default/reports/UnsubscribeLink/Unsubscribes_Errors_Roa.report-meta.xml create mode 100644 force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Month_du8.report-meta.xml create mode 100644 force-app/main/default/reports/UnsubscribeLink/Unsubscribes_by_Status_GpS.report-meta.xml 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/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 + + From f15f77d86a5300d29547a7b8ab741fb737aea77a Mon Sep 17 00:00:00 2001 From: esnorris <99896740+esnorris@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:03:20 -0600 Subject: [PATCH 5/6] Several changes to the setup flow to address mutiple issues: 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) --- .../Unsubscribe_Link_Setup.flow-meta.xml | 435 ++++++++---------- 1 file changed, 194 insertions(+), 241 deletions(-) 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 4bb5f20..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 @@ -512,7 +512,7 @@ 0 0 - CompanyName + Welcome_Screen No record @@ -526,7 +526,7 @@ - EXISTINGAssignValues + WelcomeBack @@ -614,7 +614,14 @@ added progress bar (issue #113)--activated progress bar (was not active in versi 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) +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 @@ -841,10 +848,10 @@ added explanation text to all preview screens (issue #144) false DonedisplayText - <p><span style="font-size: 20px;">You are done! </span></p><p><br></p><p><span style="font-size: 20px;">If you need to make any changes, click Run Again. </span><span style="font-size: 20px; background-color: rgb(255, 255, 255);">Otherwise, just close this window.</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 - Run Again + Finish true false
@@ -861,7 +868,7 @@ added explanation text to all preview screens (issue #144)
confirmationEmailDisplayText - <p><strong style="font-size: 20px;">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><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 @@ -880,11 +887,11 @@ added explanation text to all preview screens (issue #144)
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 @@ -900,7 +907,7 @@ added explanation text to all preview screens (issue #144)
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="font-size: 20px; color: rgb(2, 54, 244);">{!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 @@ -936,7 +943,7 @@ added explanation text to all preview screens (issue #144)
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 @@ -945,62 +952,23 @@ added explanation text to all preview screens (issue #144) 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 @@ -1022,7 +990,7 @@ added explanation text to all preview screens (issue #144) false - Screen1Preview_Section2_Column2 + Screen1Preview_Section1_Column2 Region ModifyScreen1Part2 @@ -1044,7 +1012,7 @@ added explanation text to all preview screens (issue #144) false - Screen1Preview_Section2_Column3 + Screen1Preview_Section1_Column3 Region width @@ -1084,12 +1052,12 @@ added explanation text to all preview screens (issue #144) screen2previewDisplayText_0 - <p><strong style="font-size: 20px;">PREVIEW</strong><span style="font-size: 20px;"> </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="color: rgb(0, 0, 0); font-size: 20px;">{!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 @@ -1171,7 +1139,7 @@ added explanation text to all preview screens (issue #144) 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 @@ -1247,121 +1215,99 @@ added explanation text to all preview screens (issue #144) 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 + + + 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_Section2 + 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 @@ -1405,18 +1351,7 @@ added explanation text to all preview screens (issue #144) width - 6 - - - false - - - Set_Up_Unsubscribe_Link_0_Section2_Column2 - Region - - width - - 6 + 12 false @@ -1436,81 +1371,99 @@ added explanation text to all preview screens (issue #144) 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 + - Set the company name and unsubscribe configurations and then create the Unsubscribe Link Setup record. - STG01_InitialConfiguration + Email_Preview true - - 1 + + 10 - Preview the text for the experience cloud flow pages and the confirmation email. - STG02_Previews + Initial_Configuration true - - 2 + + 5 - Stage for creating the required public IDs for the contact and lead objects. - STG03_PublicIDs + Public_IDs true - 3 + 20 - The final confirmation screen. - STG04_Done + Welcome true - - 4 + + 0 0 From e220ecfcdabb400bd0c2eb848ef0967f3ed8017c Mon Sep 17 00:00:00 2001 From: esnorris <99896740+esnorris@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:08:10 -0600 Subject: [PATCH 6/6] Lightning App Flexipage for admin to setup and monitor app --- .../Unsubscribe_Link.flexipage-meta.xml | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 force-app/main/default/flexipages/Unsubscribe_Link.flexipage-meta.xml 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 +