Welcome to another post in the “How I Solved This” series. In this series, we do a deep dive into a specific business problem and share how one #AwesomeAdmin chose to solve it. Once you learn how they solved their specific problem, you’ll be inspired to try their solution yourself! Watch how Selina Choy was able to use Flow to streamline reservations and redemption surveys for the Read to Reef Book Club at the National Aquarium, and then read all the details in the post below.
Key business problem
Community program managers at the National Aquarium needed a system to efficiently collect and report redemption data in order to continue and improve community programs like the Read to Reef Book Club.
Background
The Read to Reef Book Club is National Aquarium's partnership program with the Baltimore-area libraries, encouraging kids to grow their reading habit and rewarding them with free admission to the aquarium with their families. In the early seasons, the libraries would pass out bookmarks so students could start reading away. Once they'd complete the reading requirements, they'd fill out the quick survey on their bookmark and trade their bookmark for an aquarium voucher at the library. Because the program launched before the release of Flow Builder, our staff had relied on handwritten survey responses to report demographics. Not only was the manual data entry time-consuming, but it increased the chances of human-error mixing into the data collection.
How I solved it
I created a simple user experience for participants (Site Users) to make a reservation to visit the aquarium. This also collects firsthand data for our staff to analyze the impact of the free program, and it was accomplished by building three major components:
Custom objects to track voucher, date, time, and reservations
Screen flow to validate voucher information and enable Site Users to create new Read to Reef reservations
Experience Cloud site with public access enabled, which allows any Site User to see and run the screen flow without logging into the org
Create custom objects to track voucher, date, time, and reservations
The foundation of the reservation process revolves around four custom objects that serve the following purposes:
Vouchers- This object stores voucher data for various reservation programs at the aquarium. For Read to Reef reservations, the flow will validate information on these records from voucher fields, such as Voucher Name (bookmark code), Program, and Expiration Date. From the voucher records, the flow will also display the value from the Max Reservation Date within a screen message (more details below when we diver deeper into the flow).
Reservation Dates & Reservation Time Slots - These two objects (master-detail relationship) work together to establish dates and entry times with capacity, which enables the flow to show current availability in real time during the reservation process.
Reservations - The Read to Reef participant (Site User) will create a reservation record, which is a junction object between their voucher code entered and time slot they select in the flow.
Create Read to Reef reservation flow
The flow walks the Site User through the reservation steps with five screens to create the reservation record, while accessing voucher and time slot records between screen prompts. It also includes decision and assignment elements to determine next steps based on various outcomes within the flow.
1. Voucher screen
Prompts the guest to enter the voucher code found on their bookmark
Input Text (bookmark code/voucher code)
A text-field component is placed here for the Site User to enter their 4-character voucher code on the first screen to start the reservation process. Keep in mind to use an API Name that’s simple to distinguish and identify this component from another flow step.
Display Text (conditional)
A) A Display Text component is placed above the text-entry field to display when the flow is not able to find the bookmark code (voucher record). Under “Set Component Visibility,” the component is configured to display when the condition in blue (variable created in step B) is met.
B) A new variable (Boolean data type) is created to define the condition in step A. I like to add “var” in front of my variable name so it’s distinguished as a variable when I search for it.
A)
B)
2. Get records from Voucher object
The following filters are set to search for the voucher code that the Site User entered on the first screen. Disposition field and Program field are set to specific picklist values from the Voucher object. The Name field is set to equal “Voucher_Number”, which is the variable resource created in the previous step.
3. Decision - Voucher Found / Not Found
In this step, we set up the criteria for each expected result. The outcome criteria in this case will check if the Get_Voucher step found any records.
Outcome criteria - Found
Set the Resource field to look at the Get_Voucher component. “Is Null” is another way to say “is blank,” therefore pairing this operator with false creates a double negative statement; the logic for this condition determines that the number of records returned is not blank.
If Found → Assignment - Max Reservation Date variable
For the Voucher Found outcome, the flow moves the Site User to the Date Selection screen that displays the Max Reservation Date value from that voucher record. (A) New variable (date data type) needs to be created to (B) assign this value to be used in the flow.
A)
B)
Outcome criteria - Not Found
Because this is the complete opposite of “Voucher Found,” we can use the last default “No conditions needed” to specify that Get_Voucher wasn’t able to find any records.
Assignment - Voucher Not Found variable
For the Voucher Not Found outcome, the flow moves the Site User back to the Voucher screen to display the conditional statement. The Voucher Not Found variable needs to be assigned as True to trigger the conditional statement.
4. Date Selection screen
When the voucher code is found, the next screen confirms that the guest will be making a reservation through the Read to Reef program. This is where the guest will choose the date they would like to visit and the number of guests expected.
Display Text (conditional)
A) Multiple Display Text components are placed on this screen; the following figures demonstrate the component visibility setting and variable assigned to display when there are no time slots for the date selected.
B) New variable (Boolean data type) is created to define the condition in step A.
A)
B)
Input components
In addition to text format, input components are available in other formats like date and numbers, which are used on this screen to inquire the visit date, number of adults, and number of children. Besides collecting readable data, using the appropriate field format adds consistency to the data we collect from different Site Users.
5. Get records from Reservation Time Slot object
The following filters are set to search for available reservation time slots for the visit date entered in the previous screen. The value frmTotalReserved is a formula variable (number data type) that’s the sum of adults and children, also from the previous screen. Additional condition requirements look at current values saved in reservation time slot records.
6. Decision - Time Slots Available
This step is similar to the Voucher Found Decision step; however, the outcome criteria in this case will check if the Get_Time_Slots step found any records.
Outcome criteria - Yes Availability → proceeds flow to next screen (Time Slot Selection)
Set the Resource field to look at the Get_Time_Slots component. “Is Null” is another way to say “is blank,” therefore pairing this operator with false creates a double negative statement; the logic for this condition determines that the number of records returned is not blank.
Outcome criteria - No Availability
Because this is the complete opposite of Yes Availability, we can use the last default “No conditions needed” to specify that Get_Time_Slots was not able to find any records.
Assignment - No Time Slot
For the No Availability outcome, the flow moves the Site User back to the Date Selection screen to display the conditional statement. The No Availabilityvariable needs to be assigned as True to trigger the conditional statement.
7. Time Slot Selection screen
On this screen, the guest will select an entry time from the time slots with available capacity. They are also asked to confirm their agreement to follow the aquarium's health and safety procedures when they visit.
Record Choice Set
A) The Radio Buttons component is used here to display the list of time slot records. Under “Configure Choices,” the choices can be a set of records (new resource created in step B).
B) Record Choice Set is a new resource created to generate a set of choices using a filtered list of records. In this case, the condition requirements to generate this Record Choice Set are the same as the condition requirements on the Get Time Slot (Get Records) step.
A)
B)
8. Reservation Details screen
This screen collects contact details of the adult chaperone and demographics details about the Read to Reef participant. Input component fields on this screen collect text, email address, and picklist value data that will be saved on the new record created on the next step.
9. Create records under Reservation object
In this step, values submitted by the Site User are mapped to fields in the Reservation object to create a new Read to Reef reservation record.
10. Get records from Reservation object
The filter set on this step is the record ID of the new reservation record created within this flow.
11. Confirmation screen
The final screen displays the confirmation details after the new reservation is created.
The Confirmation screen uses a single Display Text component to display data from the new reservation created.
12. Error screen
You may have noticed some dotted red lines that all point to a single screen component titled “Error Screen.” In case the flow faults due to an unknown error, the screen flow will navigate to this screen to show customer service information for quick assistance. Since we have other screen flows that include the Central Reservations line, this is inserted as a variable in flow to pull this data from custom metadata. This way, if this phone number changes, we’ll need to update it only in one custom metadata record instead of multiple flows.
Create Experience Cloud site with public access enabled
Placing the screen flow here allows any Site User to see and run it without logging into the org.
Permissions for Guest User Profile
In Experience Builder, apply public access. Then follow the Guest User Profile link to update system permissions; enable profile to run flow.
Business results
Applying the reservation flow to the Read to Reef process has resulted in data that’s more reliable and accurate than before, which makes it easier for the National Aquarium to continue this program with the Baltimore-area libraries. In the past year, the aquarium has been able to reward 7,000 free tickets to 2,000 students who completed the book club, for reading an average of 5 books each season. Moreover, the reservation flow has provided a positive experience for Read to Reef participants to schedule their free visit with their families at the aquarium!
Welcome to another “How I Solved It.” In this series, we do a deep dive into a specific business problem and share how one Awesome Admin chose to solve it. Once you learn how they solved their specific problem, you’ll be inspired to try their solution yourself! Watch how Deanne Walters uses Flow to create […]
Welcome to another “How I Solved It.” In this series, we do a deep dive into a specific business problem and share how one Awesome Admin chose to solve it. Once you learn how they solved their specific problem, you’ll be inspired to try their solution yourself! Watch how Dee Ervin searched unsearchable field data […]
Welcome to another How I Solved It. In this series, we do a deep dive into a specific business problem and share how one Awesome Admin chose to solve it. Once you learn how they solved their specific problem, you’ll be inspired to try their solution yourself! Watch how Brandon Walton helped Family Bred Puppies […]