Check out the latest Datatable improvements!

Welcome to the next major release of Datatable.  There are a couple of amazing new features along with a few minor bug fixes.

There is now a new Remove Row Action available that allows the removal of individual rows from the Datatable. This can be useful in scenarios such as using the Datatable to display a list of items in a shopping cart and needing to provide users with the ability to remove items from the list.

In addition to setting a maximum number of records, you can specify the icon and color to be used for the action and put the action column on the left or the right of the Datatable.

New outputs are the collection of removed records, the collection of remaining records and the number of records removed.   This functionality works for both Salesforce objects and Apex Defined records.

Remove Row Action – Removed Rows & Remaining Rows are Reactive Outputs

You can even use this action to “select” records and specify a limit on the number of records that can be acted on.  This allows you to remove records from the Datatable once they have been selected.

Remove Row Action – Used for Selections with a Limit on the Number of Row Actions

As a time-saving bonus, even if you are not including a remove row action, the new Remaining Rows output collection will contain all the Datatable records including all Edits that were made to the records.  You no longer must add extra steps to your flow to combine the edited records with the original records. (How to use both the Selected and the Edited records in a Datatable)

Remaining Rows attribute can be used to output All Records with Edits

• There is a new option to display the number of Selected Records in the table header.  Even better, with this release, selected records are now PERSISTENT once selected.  Performing table actions such as Pagination, Sorting, Searching, Filtering and Removing Rows will always persist all previously selected records.

Selected Record Persistence with Pagination, Sort, Search, Filter, and Remove Row

• To help with debugging flows where you have multiple Datatables on the same screen, the Console Log outputs will identify the Datatable Header value for each console log statement.  To help protect sensitive information, record and field values will no longer show in the console log or debug log outputs.  You can still choose to override this behavior in your sandboxes with a couple simple attribute changes in the source code.

Override behavior showing record data
Default behavior with data hidden

Find the new package install links here.

Using Field Generation Prompt Builder and Flow to generate a recommendation

The recent addition of Prompt Builder to the Salesforce admin toolbelt allows admins to use Einstein generative AI with Salesforce data.

I set out to learn some of this new functionality with a fun little use case: generate an outfit recommendation based on the current weather conditions for the current contact’s mailing city and use the generated output to populate a field on the contact called: What Should I Wear? The current weather information is obtained by using a flow that makes an HTTP callout to a weather API. The flow will be triggered when the template is run, and will return the current weather and temperature back to the prompt based on the input of the contact mailing city.

The first thing you need to do is get access to a special Salesforce trial org, that is enabled for Einstein AI. The easiest way to get access is to go to any of the quick start projects for Einstein AI found in Trailhead. From there you can create a special Einstein AI playground. Keep in mind that the trial org comes with an expiration date and you will lose access to it and all your configurations once it expires.

After logging into the org, you need to Turn on Einstein from the Einstein Setup page. 

Only after you do that, will you be able to access Prompt Builder from the setup menu.


The first thing I did was to create a receptacle field for my generated content. I created a Long Text Area field on the contact object called What Should I Wear?

Before starting on my template I created a new Template-Triggered Prompt Flow. In this flow I created an HTTP callout to a publicly available weather API to get the current weather for the inputted city. There are multiple other resources available that explain on how to create and use an HTTP callout action in a flow so I will not add details here.

There are two things unique about this new flow type:

  1. You need to specify the type of prompt template this flow will fit, and also specify the object available for input. The input object must match the input object specified in the prompt template. This introduces 2 new global variables in the flow called $Input, and $Output. You can use them to interact with the calling prompt.
  1. There is a new element for returning output instructions back to the prompt, called Add Prompt Instructions. It will send text back to the prompt and you can merge fields from the flow in it. It is important to handle both positive and negative instructions in case an error occurs and the desired output cannot be generated. In my case I added an instruction saying that an error occurred while getting the weather and also added a formula in my flow that will send a dummy city in case there was no mailing city on the contact record. This handled flow errors from the callout missing a required input parameter. Another option to handle errors would be to have a decision that skips sending a callout if there is no mailing city available.

Here is the configuration of the flow


After the flow is created and activated it can be used as a resource in the prompt instructions.

When you click New Prompt Template, you need to select one of the available templates that fit your use case and the starting object it will use as input. I chose a field generation template, the contact object, and the field I created to hold the output.

the builder workspace will open and it is there that you enter the prompt instructions and test generated responses 

This is my Field generation text instructions, using both contact merge fields and the flow that makes the callout

You’re a sales representative who needs to create an outfit recommendation for {!$Input:Contact.FirstName} based on his location {!$Input:Contact.MailingCity}

When I ask you to create a recommendation, you must strictly follow my instructions below.

Instructions: 

“””

Generate an outfit recommendation in one paragraph no longer than 1000 characters.

Use clear, concise, and straightforward language using the active voice and strictly avoiding the use of filler words and phrases and redundant language. 

Start the paragraph with a line mentioning the contact’s mailing city and describing the current weather and the current temperature in the contact’s mailing city.

If no value is available for the mailing city , say you cannot recommend an outfit currently.

Based on the weather and temperature, recommend an appropriate outfit to wear.

The recommended outfit should be gender neutral. You can mention accessories such as an umbrella or a hat in the recommendation.

Use the following information to get the current weather: {!$Flow:Contact_GetWeatherByCity_PromptTriggered.Prompt}

If an error was returned for the current weather, say you cannot recommend an outfit currently.

Do not attribute any positive or negative traits in the recommendation.

“””

Now create the recommendation.

Before activating a new prompt template it is important to test it out repeatedly using various input records to see how it generates the response text, and make any adjustments to the instructions.

Again it is important to handle negative scenarios, in my case if no mailing city is found I instructed the prompt to say a recommendation could not be made.

The last step after activating the prompt template is to add it to the field on the Lightning record page. This will only work with dynamic record pages.

Finally this is a demo of the field generation prompt in action

From James Barker: Using Flows with Prompt Builder

The Interaction Between Flows & Prompts


Late last year, Salesforce announced Prompt Builder. Prompts are the mediums that are used to communicate with the large language models (LLM) such as ChatGPT from OpenAI. Prompt Builder gives Salesforce Admins the capability to create, test, revise, customize, and manage prompt templates ensuring high quality outputs that are protected by the Salesforce Trust Layer.

But what is the impact of this all? Being able to use summaries and fuzzy logic as part of your flows is a huge productivity gain for admins and end users. 

This article will go over three key areas: 

  1. Leveraging Flows Within A Prompt Builder
  2. Calling A Prompt Template From A Record Triggered Flow 
  3. Creating A Dynamic Prompt Template With A Screen Flow

A great resource for the nuances about writing prompt templates is a blog by Raveesh Raina: The Ultimate Guide to Prompt Builder.

Prompt Builder, Prompt Templates, Template-Triggered Prompt Flow – Where do we Begin? 

Prompt Builder is the solution to create and manage all of your prompt templates using configuration methods. Prompt Templates are what you build to be re-used as part of a variety of use-cases for field generation, Flows (Record-Triggered, Template-Triggered, & Screen Flows), and Einstein Copilot. 

Finally, Template-Triggered Prompt Flows are a new type of flow that is built to enhance, or bring in more, specific data into your prompt template. 

You can see the official help article for the prompt template types here. I find visual examples to be the most helpful so here is a quick overview of each in action. These are the first three prompt template types that are currently available with more coming by Salesforce and by customers. 

User Triggered Field Generation For Any Summary 

As a Seller, I want a way to stamp a current overview of an account regarding any deals or support requests and comments from both. Specifically, I want a way to adjust the output for what is relevant rather than just use a predefined template. Field Generation is a great method to generate content for record fields with the user clicking a button to run the prompt, allowing for adjustments, then populating the field with the output.

Sending An Email Grounded With CRM Data

Rather than using an email template that pulls in merge fields, use the Sales Email template type to create a personalized email in a way that scales, especially with high velocity sellers. 

Where static email templates can pull in merge fields, and we can extend this by adding in formula fields on a record – they will always feel like a template. That is where Sales Email (via Generative AI) comes in to provide that human-like messaging.

Go Beyond Field Generations & Sales Emails

Beyond these two types of prompt templates, we have Flex which we will explore today with a screen flow, and record summary, which is part of Einstein Copilot. 

  • Flex: Generate content for any business purposes that other templates don’t cover. Flex prompt templates let you define your own resources. Think of Flex Templates as a regular flow, you can set up any inputs manually and the resulting output is a one-off.
  • Record Summary: Summarize record data for a comprehensive view of a record. Record summary prompt templates are used by the Summarize Record standard invocable action. In Einstein Copilot, they’re used by the Summarize Record standard copilot action.


Leveraging Template-Triggered Prompt Flows Within A Prompt Template

First let’s see a side-by-side of when you use a flow vs when you don’t within a prompt output. For this example, I’ve created a prompt that provides the user with an overview of all opportunities related to the account. 

Using A Related List

As you can see here, we can use the prompt to call out CRM data and using our Trust Layer, send it to the LLM to provide a quick summary back to the user. So what’s the limitation? Without flows we cannot control specifically what information to enhance the prompt with, use formulas, calculate logic, or make a callout to a web service. For example we can’t add in just the Open Cases or only Closed Won Opportunities. 

The fact that we have Prompt Builder to quickly adapt and adjust our prompts to ensure a high quality is endless in terms of its value. Remember, we are retrieving and sending information using natural language; there can be times that we pull the wrong records. By adding another line “Display the next steps” to the prompt, I’ve now pulled in more records by accident. 

Now, let’s use a flow to retrieve the exact records that we want and push only the fields that we want. Introducing the Template-Triggered Prompt Flow; This launches from a prompt template and allows us to specify what information to enhance the prompt with. 

Summary: 

  • Without Flows: Use this prompt and related information, with little control over the specific records/data to provide a response. 
  • With Flows: use this prompt with the exact records and fields with complete control to provide a response.

Retrieving Information That Isn’t Available In Prompt Builder, But Accessible Via Flows.

Another example of using a flow to retrieve specific information is when data is not available in prompt builder to begin with. For example, pulling in emails that were manually logged into the CRM. 

Salesforce stores manually logged emails from Cases and Inbox as records in an object called Email Message which cannot be accessed by Prompt Builder. So we can use a flow to retrieve these to then enhance the prompt for a response. 

In this example we are using a flow to bring in more data into the prompt that lives directly on the record itself; but we can also use flows to use formulas, run calculations on business logic, and make callouts to web services. 


Calling A Prompt Template From A Record Triggered Flow

Rather than our users having to manually choose to fill in a field, let’s now automatically update the account description field when an opportunity is created/updated. 

When you activate a prompt template, you can call it as an action from a Flow, this starts to make things interesting when it comes to extending the Generative AI capabilities within Salesforce. 

While calling to prompt templates with your flows, you can also define custom variables that don’t have to map to a specific object and can be free text. 

These can be pulled in our Flow Builder and we can use variables or data from the record to import here to make these even more flexible. 


Creating A Dynamic Prompt Template With A Screen Flow

If we can call out to a prompt template through a flow to stamp into a field or use a user initiated field generation; why would we want to use a screen flow as part of the user experience? 

So far, I found that companies want a way to make a prompt template “dynamic” so we can re-use the same prompt template for a lot of different questions. 

The video below will go over the capability of asking questions about meeting notes and using a screen flow to be the method of experience. 

Another use-case that is coming up more often is helping service teams troubleshoot an issue and adjust the steps based on feedback from the customer. In the below example, we are using a screen flow to showcase the answer and also how the search prompt is being adjusted each time around. 


Matching On Natural Language Criteria 

Back when I was a Salesforce Administrator, to Consulting on Salesforce, to now working at Salesforce, a constant requirement has always come up for users, “How can I find the right records based on some criteria?” This is something that I built originally with Data Fetcher and Screen Flows for logic that was “hard-coded”, but what if we want to match based on reasoning? 

The use case that we have here is to identify the best lender for a business request based on a variety of factors, primarily previous use-cases/reasons that were approved that use natural language that we can’t filter on. 

Now with Flows & Prompt Builder we can open up way more possibilities. 


Considerations That I’ve Identified So Far

  • The get records and loop in a Template-Triggered Prompt Flow works for only 1 level of the record information. For example, if I get a collection of events, I can add the event name to the prompt; however I cannot add the related WhoId name or the Owner name unless I use two more get elements. 
  • Template-Triggered Prompt Flows (today, July 2024) are mapped to a specific Prompt Template; meaning I cannot re-use the same flow in multiple prompt templates. 
  • It takes time to load a Generative AI response regardless of the user experience layer we use (field generation, record-triggered flow, screen flow, etc) but we are still saving our users considerable amounts of time – adjust the model being used to change the output and time taken for each prompt to run in Prompt Builder. 
  • When we use flows to enhance a prompt, it is so easy to do so that we often forget LLMs have limits; prompt builder for building the prompt templates currently (today, July 2024) has a character limit of 128,000 characters.

Thank you for following along with this article; my hope is that you have a basic understanding of how we can use Flows to bring even more value and impact to Generative AI within Salesforce. 

To learn more about automating generative AI responses in your existing workflows, check out this other blog by Raveesh Raina on embedding AI responses through 3 simple techniques.

Please comment if you have any questions! 

Updates to Flow Flex Cards

You can now choose the field used in the card name and add specific field styling to card headers. I’ve updated the Custom Property Editor with more help text in the banner help and reorganized some sections. Also huge shout out to Brian Paul with an update to the actions that will update the cards if your action makes an update to the record associated with the card. For example, if my action updates the address on an Account and I have the address on my card, it will show the change in the UI without having to navigate back and forth in my flow.

An image of a flow screen canvas in builder with an arrow pointing to a new property called Header Field in the Customer Property Editor
This is a GIF image showing real time updates to the flex cards in a flow when a user clicks the action button.

Full Flow Flex Card Details

Install/Update as part of Flow Screen Components Basepacks

New Datatable Features

The new v4.2.0 release of Datatable is now available!

Updates

The newest feature is Pagination. You can now specify how many records to show at a time and allow the user to page back and forth through the table.

A reactive Table Header is another new addition to this release. You can use a Text Temple, Formula or any other reactive component as part of your table header.

Based on feedback on how users were configuring the component, I moved the Configure Columns button from the top to the bottom of the Table Formatting section of the Property Editor.


Bug Fixes

The following bugs have been addressed in this release.

  • Fixed a bug where the maximum number of rows to be displayed gets cleared
  • Fixed a bug where an invalid link would show when an Apex Defined Lookup field was empty (@spyros-michailidisspyros-michailidis PR#1524)
  • Fixed an install issue with ers_DatatableController.cls if the target org has a class named “Test”
  • Fixed a bug where Date fields from External Objects would show as blank (@philipnovak-pentair PR#1529)

Notes

If you also update the FlowActionsBasePack to v3.16 or later and the FlowScreenComponentsBasePack to v3.3.3 or later, the object selector for Datatable and many other USF components will now support standard objects released since API version 53.0. The most recent supported version is now API 60.0.

This release of Datatable will not yet retain selected rows when changing Search Terms, Column Filters, Sorting or Pagination. This support is planned for a future release.

Convert Text to Base64 Invocable Flow Action

Convert Text to Base64 Invocable Flow Action

Created by Eric Smith


This Post was most recently updated on: 4/7/24
Current Version: 1.0.0


Recently I was trying to convert a JavaScript button from Salesforce Classic to Lightning that was designed to take the user to an external link for the DocuWare application.

JavaScript Button

window.open(‘https://ami.docuware.cloud:443/DocuWare/Platform/WebClient/3024/Integration?p=RLV&rl=98c8d544-9b8a-48f0-b8a7-c8287d509e5f&fc=3f857eb7-7752-4aea-afdf-5c29a5843515&q=’+btoa(‘[FIELD_10] = “{!Case.CaseNumber}”‘));

Normally, for this type of link, I like to create a Screen Flow with a custom button and the Navigate Everywhere component and use a Text Template to define the URL to navigate to.

This project was a bit trickier because the button was referencing a deprecated JavaScript function (btoa) that’s designed to encode a String as a Base64 representation.

There is no standard function in Flow that will handle this type of conversion so I created a new Invocable Flow Action that will convert any Text to Base64.  With this new action I was able to create my Text Template URL for the navigation action.

My input to the ConvertTextToBase64 action was a text template which identified the string I needed to convert.

ttCaseNumber

[FIELD_10] = “{!recordId.CaseNumber}”

The URL text template used as the input to the Navigate Everywhere action was then able to reference the output of the ConvertTextToBase64 action.

ttButton1URL

https://ami.docuware.cloud:443/DocuWare/Platform/WebClient/3024/Integration?p=RLV&rl=98c8d544-9b8a-48f0-b8a7-c8287d509e5f&fc=3f857eb7-7752-4aea-afdf-5c29a5843515&q={!Convert_to_Base64.base64Output}


Attributes

AttributeTypeNotes
INPUT
Text Value for ConversionStringThe text to convert
OUTPUT
Base64 ValueStringThe converted Base64 value

Installation

Production or Developer Version 1.0.0

Sandbox Version 1.0.0


Release Notes

4/7/24 – Eric Smith – v1.0.0
Initial Release


View Source

Source Code

Invocable Actions – A Great New Overview Presentation and Video

I was able to join with Eric Smith and Rubin Roy to do a 40 minute breakout on Invocable Actions at TDX24. It gave us the chance to really put some fresh updated content together. Check out the video and the deck, below.


TDX24-Extending-Flow-with-Invocable-Actions-and-HTTP-Callouts-1


Invocable Actions Resources

Invocable Action Resources Home Page

From James Barker: Using Formulas with Data Fetcher to Reactively Push the Envelope’s Edge


With all of the news and updates with Reactive Screen Flow Components in tandem with Data Fetcher on the AppExchange, we can take multi-screen processes and simplify the user experience with less clicks and more real-time changes.

This article will go through examples in-depth on creating a Data Table with multiple levels of complexity:

  1. Single Dimension
  2. Multidimensional
  3. Multidimensional Criteria With Reactive Components
  4. Extending Our Criteria With SOSL

Before We Start – How Data Fetcher and Reactivity Work Together

The solutions discussed here make use of and require the Data Fetcher component. Data Fetcher enables you to dynamically query Salesforce records using SOQL and SOSL to return records in a collection variable based on user interaction on a screen flow. For example, a user can select a specific query from a picklist and return those records to a data table.

For a deeper understanding of Data Fetcher, see Data Fetcher on the AppExchange. In addition, see  Take Your Screen Flows to the Next Level with Reactivity | Automate This! on YouTube.

Primary Use-Case

As a project manager, I need to be able to identify which consultants are a good fit for the project that I am staffing using the individual’s department..


Data Fetcher Eliminates Steps

Prior to this package, this would have to be built using separate screens with a GET RECORDS between them. With reactive screen flow components we could dynamically show the criteria on the first screen, but the GET RECORDS would still be in between. 

Note that in this scenario, to adjust the Department we had to go back to change the value then repeat the GET RECORDS.

When we add the  Data Fetcher component to the screen, we’re able to query for our record data without leaving the screen. To do this we tap into screen reactivity and so need to use reactive components. , I have switched the Picklist component to Quick Choice for the reactivity with Data Fetcher and the Data Table. 


Building Simple Formulas for Data Fetcher

To connect our QuickChoice component to our DataTable, we’ll load Data Fetcher with this formula:

Formula

“SELECT Id, Name, Department, Tenure__c FROM Contact WHERE Department= ” + {!DepartmentQuickChoice.value}

See the components that were used below as well as a video walking through the logic for this.


Multidimensional

Sub Use-Case

As a project manager, I need to be able to identify which consultants are a good fit for the project that I am staffing using a list of different types of criteria.

Now we have our single-screen experience to identify the best resource. Our sub-use case requires another dimension for different types of criteria. 

In this version we are using two different types of input fields, Quick Choice and Slider. We are using these because we need to be able to pull the “value” into the formula.

Now we have two dimensions in our query for Data Fetcher and thus the Data Table. Note in the formula that we couldn’t just use the value from the Tenure input, but had to convert it to TEXT first.

Formula

“SELECT Id, Name, Department, Tenure__c FROM Contact WHERE Department= ” + {!DepartmentQuickChoice.value} + “AND Tenure__c>=” +TEXT({!Tenure.value})


Aggregated Queries

Data Fetcher is not only great for managing the queries for a Data Table, but also for getting aggregations such as SUM or COUNT.

With what is available OOTB today with Flows, you are not able to do any sort of aggregation for search results. At best, we use assignments to handle a similar count, but this would require splitting up this experience into multiple screens/sections. 

This is another reason why SOQL and SOSL are so powerful to use with Data Fetcher as part of our user experience. 

Below you can see the Total Results reacting as the Tenure slider moves up and down.

Formula

“SELECT Count(Id) FROM Contact WHERE Department= ” + {!DepartmentQuickChoice.value} + “AND Tenure__c>=” +TEXT({!Tenure.value})


Multidimensional Criteria With Reactive Components

Our original use-case was: As a project manager, I need to be able to identify which consultants are a good fit for the project that I am staffing using a list of different types of criteria.

Now with a combination of reactive components, we have the following all embedded in a single experience:

Label Formula

<div class=”slds-box”>Feedback Notes: <br>{!Results.firstSelectedRow.Notes__c}</div>

Formula

“SELECT Id, Name, Department, Tenure__c, Notes__c, Title,Ptnr_Onbd_Fmwk__Onboarding_Status__c FROM Contact WHERE Department= ” + {!DepartmentQuickChoice.value} + “AND Tenure__c>=” +TEXT({!Tenure.value})


Extending Our Criteria With SOSL

Suppose you want to solve for multiple attributes within a single criteria. This could be multiple skills for a contact, where skills are stored as a custom object and are based on records. 

With SOQL statements, we would require the data to be structured to the point where each skill would require its own lookup to map to a specific field on the contact. This is not an optimal experience. 

With SOSL, you would be able to extend the search capabilities across multiple attributes within the criteria and not need the data to reside in specific mapped fields. 

Here, I wanted to build a way to use a list of skills that our Project Manager in the original use-case can use to further filter their talent.

So, how do we do this with SOSL and Data Fetcher?

First, we need a multi-select option to select our skills that will output all of the records in a consistent format. Enabling multi-select for the standard lookup input will work well as a simple UI for a user to interact with. 

Once we have the output, then we need to be able to do a query off of it.

The output of the lookup component looks like:

a7cHs0000006Bp8IAE,a7cHs0000006BpDIAU

The challenge with this is that a SOSL statement requires the use of “ OR” in order to add multiple search terms. So we need to clean the output before passing it to the actual SOSL statement. To do this, I used the Substitute formula. 

Original SUBSTITUTE function:

SUBSTITUTE({!Skills.recordIds}, “,”, ” AND “)

The next challenge with this is that this will only substitute the first “ ,” and not any subsequent. So we need to iterate on this to match the number of records we allow the user to search for in the lookup. 

The first iteration of the clean-up for the SUBSTITUTE is:

SUBSTITUTE({!CleanSkillsList1}, “,”, ” AND “)

Now our output from the lookup component is formatted the way we need it for our SOSL statement. 

Specifically for the SOSL query, we have:

“Find {” + {!CleanSkillsList} +”} IN ALL FIELDS RETURNING Contact(id,name)”

Now, I can write a simple query to get the right contacts with the right skills (there is a separate flow that when a skill is added to the contact, we stamp the ID onto the record detail directly for this search).


New Use Case: Multiple Data Tables & Related Lists For A Consumer Goods Brand

Let’s look at another use-case that  can be built with formulas and Data Fetcher. This solution also uses Flow Button Bar by David Fromstein.

As a Campaign Manager for a consumer goods brand, I want to make sure that every store (example Loblaws, Whole Foods, etc) has the right promotional setup so that we know that they are in compliance. 

Effectively, this role wants to see images from a Promotion and compare it to the images from multiple store Visits.Note that visits are related to the account and the account represents the store. 

SOQL query for Promotions

 “SELECT Id, Name, Image_1_Preview__c, Image_1_View__c, Image_2_Preview__c, Image_2_View__c FROM Promotion WHERE Name =” + {!PromotionChoice.value}

SOQL query for Visits 

“Find {” + {!DynamicStoreId} +”} IN ALL FIELDS RETURNING Visit(id,name,AccountId,cgcloud__Subject__c, Image_1__c ,Image_1_Preview__c,Image_1_View__c, Image_2__c, Image_2_Preview__c, Image_2_View__c WHERE cgcloud__Completed_Date__c > “+{!FromCleanDate}+” AND cgcloud__Completed_Date__c < “+{!ToCleanDate}+”)”

Example substitute formula to clean the lookup records

SUBSTITUTE({!Stores.recordIds}, “,”, ” OR “)

Date clean-up formula 

TEXT(YEAR({!From})) & “-” & {!FromMonthCleanup} & “-” & {!FromDayCleanup}

Day data clean-up formula for SOSL format

CASE(Day({!From}),

1,”01″,2,”02″,3,”03″,4,”04″,5,”05″,6,”06″,7,”07″,8,”08″,9,”09″,10,”10″,11,”11″,12,”12″,13,”13″,14,”14″,15,”15″,16,”16″,17,”17″,18,”18″,19,”19″,20,”20″,21,”21″,22,”22″,23,”23″,24,”24″,25,”25″,26,”26″,27,”27″,28,”28″,29,”29″,30,”30″,”31″)


Thank you so much for following along with this article. I hope that it helped give some great ideas for how you can be leveraging Data Fetcher and Reactive Screen Flow Components.

If you have any questions or feedback, please comment down below.


Related

Watch the Automation Roadmap from TDX 24

The Automation Roadmap breakout session has become a fixture at Dreamforce and TDX. It’s unquestionably the best view into work underway on Flow and Actions.

Watch it here:

and see the slides here:

TDX-24_-Automation-Roadmap