Winter ’23 Sneak Preview – Flow Builder, Flow Orchestrator, Flow in Slack

Check out this sneak preview of what’s slated to come in the Winter ‘23 release! 

Note that this is not a complete list of changes and you should carefully check the Release Notes for changes that may impact your org.

Data Table (Beta) Arrives!

You know it, you love it, you need it – an out-of-the box Data Table comes to Flow! Select your fields, your records you want to display, and let your users act on those records in any way you want.

Data Table (Beta) Features

  • Table Header: Create an accessible label for your table and hide it from users so that it remains accessible.
  • Single Record & Record Collection Outputs: Selected records from the Datatable will be available as both a Record Collection and a Record Resource. 
    • Note: One key feature we built in is the ability to have ‘uncommitted’ records not in the database displayed on a table – A great way to implement confirmation screens where your users build collections of data in Flow before creating them in the database!
  • Selection Modes: Change the table selection mode to Multi-select (Checkbox), Single Select (Radio), or No Selection (View only)
  • Required Selection Options (Min and Max): Ensure your users select the records you want by enforcing a minimum or maximum selection of records. When in Single Select mode, this changes to a ‘Required Selection’ checkbox.
  • Default Selection: Provide a record collection to act as a default selection upon entering the screen
  • Column Configuration
    • Drag/Drop Fields: Select the fields you want to display from the Record Collection’s object you choose in your table and drag and drop the column order all within the property editor 
    • Custom Header Labels: You can provide an alternative field label for any field you display to your users. This is especially important when displaying data to external users. 
    • Wrap/Clip Text: You can choose whether a field will wrap or clip its contents within the table. The default is Clip. 
  • Rich Text Field Support: The base lightning-datatable component does not support rendering rich text, but we built it in! You’ll be able to create beautiful looking tables that contain images and bulleted lists for richer screen experiences, including formula fields!

For much more about Data Table, see The Three Musketeers Arrive in Winter ’23: Data Table (Beta), IN Operator, and Record Type Filtering for Picklists

IN / NOT IN Operator Support for Get, Update, Delete Elements

At long last, the ‘IN’/’NOT IN’ Operators arrive to Get Records, Delete Records, and Update Records elements. Get rid of those nasty queries within your loops and scale with higher data volumes with these new operators. For those unfamiliar with an IN operator, the best way of describing it in words is something to the effect of “I want to retrieve or do something on a collection of records based on this set of values”. You’ll now be able to do a query like “Get me all Contact Records IN this collection of country names” or “Get me a list of all Accounts using the AccountIds of these opportunities”.

How It Works

In this first release, you can use any non record-collection on the right hand side of an IN statement – examples include a Text Collection, Date Collection, or a Number collection. The best way of describing ‘IN’ functionality is something to the effect of  “I want to retrieve or do something on a collection of records based on a set of values”. It is the best friend of Junction Objects. 

In a screen flow scenario, imagine running a screen flow where you want to display a Data Table of Contact records based on the Related Contacts for an Account. Those relationships are actually stored in the Account Contact Relationship junction object. In other words, what you actually want is “Show a list of Contacts that are in the list of Active Contact Relationships related to the account.” With IN, this is now possible without doing queries within loops.

Speaking of loops, you often hear “don’t put queries in your loops”. Until now, you really didn’t have a way to avoid that. Imagine a record-triggered flow scenario where an Opportunity closes and you want to update a field on a set of Account Team records for each person on the Opportunity Team. Before, you had to loop over the Opportunity Team and within the loop, query for a related Account Team member record. With ‘IN’, you aren’t forced into querying within your loop and can just query for the relevant Account Team members directly.

For more about IN Operator, see The Three Musketeers Arrive in Winter ’23: Data Table (Beta), IN Operator, and Record Type Filtering for Picklists

Record Type Filtering for Picklists in Dynamic Forms for Flow

Picklists in Dynamic Forms for Flow are now record type aware upon entering the screen!

If a record resource has its RecordTypeId field set when entering a screen, any picklist values that are dependent on a record type will now display the correct picklist values. If no record type id is set, the picklist will display all values. This addresses a 12,000+ IdeaExchange idea and long-standing Flow request that we are excited to deliver for you.

For more about picklists with record-type awareness, see The Three Musketeers Arrive in Winter ’23: Data Table (Beta), IN Operator, and Record Type Filtering for Picklists 

Formula Checking Now Available Everywhere in Flow Builder

We released our new Formula checker in Summer ‘22 for Record Triggered flow Entry Criteria and have now expanded it to formula resources and Collection Filter! Validate that your formulas are in the correct format before saving your flow for a fantastic time-saver and peace of mind.  

Flow Builder

Search When Adding an Element in Auto-Layout

When adding new elements in Auto-Layout, you’ll now be able to search across all flow elements and actions to quickly find what you need. Note that it even shows custom actions (like those found here on UnofficialSF)! 

Cut and Paste Single Elements in Auto-Layout

Need to move an element in Auto-layout? Take advantage of cutting and pasting individual elements in Flow without switching into free form.

Ability to Hide Resource Panel / Hidden by Default

When in Auto-layout, the resource panel will now be hidden by default and can be expanded/collapsed to save screen real estate when you need to view more of your Flow.

Screen Flows

Dynamic Forms for Flow Goes GA

Drag in your record fields directly into screen flows with Dynamic Forms for Flow, now GA! We spent this release polishing up under-the-hood with some added features, discussed below and will continue to bring more field types to Dynamic Forms over time. 

Record Type-Aware Picklists

As noted in The Three Musketeers Arrive in Winter ’23: Data Table (Beta), IN Operator, and Record Type Filtering for Picklists, Picklists from records in Dynamic Forms for Flow will now be filtered by record type if the record resource has a valid record type Id set. 

Easier Record Resource Creation

When creating a new record resource from the Fields tab, we now automatically jump you to the right resource (Variable -> Record) type. Before, you had to go through a number of hoops before getting to the right resource type. This will make the process far easier for newer users and far faster for experienced builders.

Before Winter ’23

Winter ’23

Field Visibility Now Fully Supported

Before this release, conditional field visibility did not react to conditions that referenced components or fields that were on the same screen. Now, conditional field visibility in Dynamic Forms for Flow now behaves as expected.

Bigger Screen Editor

Open up the screen flow editor – notice anything? Yep – we’ve now made the screen editor significantly larger, giving you more space to create awesome Screen Flows. 

Before Winter ‘23

After Winter ‘23

Lookup Enhanced to Support Multiple Records

Ever wish your users could select multiple records with the Lookup component? Is a Data Table too much for some basic use cases? Users can now select multiple records with the Lookup screen component! You’ll now notice two new inputs: Maximum Selections and Record ID Collection

  • To enable multi-select, you need to set the new ‘Maximum Selections’ input to a number greater than 1.
  • The Record ID Collection input is used to set a default selection or ensure values persist if a user resumes the flow or navigates back to the screen. 
  • The component now outputs the selected Ids into a Text Collection – Record ID Collection.

Pair with ‘IN’ Operator

This new multi-select capability pairs nicely with the new ‘IN’ operator – Just perform a Get Records to convert the user’s selection (a Text Collection of Ids output) into a workable record collection:

Choices Now Support External Data (Apex-Defined Types)

The Apex-defined data type affords you a flexible way to represent complex data that isn’t well-modeled by the sObjects in your organization.  Customers often use the Apex-defined data type to represent external web objects, so that they can integrate with external web services either entirely declaratively through Flow and External Services, or with a mixed code & clicks pattern through Flow and invocable Apex.

Now, you can represent your external data as Choices using Collection Choice Sets that are Apex-Defined Types.

Embed Screen Flows from LWC Components With the New ‘lightning-flow’ Component

You can now embed Flows directly from LWCs! Reduce your Aura footprint and offload pieces of your custom components to Flow with the new lightning-flow component. 

The component behaves virtually the same as the aura lightning:flow component with one exception – in the LWC version we’ve resolved an issue with finish behavior that consumed unnecessary FlowInterview instances under certain conditions.

Record-Triggered Flows

‘Update Related Records’ Comes to Record-Triggered Flows

One of the few remaining gaps with Process Builder is the ability to easily update Related Records of the triggering record. While it was possible before, users coming from Process Builder may find this method more at home.

Now, you can select a new option in an Update element in a record triggered flow: Update records related to the [object] record that triggered the flow

From there, you can then select the relationship, or children, you want to update:

As with Process Builder, you will also be able to specify criteria for which children to update. Take for example a situation where you wanted to update all of the child accounts of an account where the Account Source = Advertisement below:

Workflow Rule Creation Now Disabled

The Create New Workflow Rules button will be removed for most people in Winter ‘23. It’s time to move to Flow!

No-Code Testing Goes GA 

No-code testing is now Generally Available, and with it, comes support for creating Scheduled Path tests and packaging compatibility. 

Admins can now create automated tests to ensure their Flows don’t break when other members of their team (or their future selves) make changes.

Flow Tests allow you to set up assertions or ‘assumptions’ about your results that you want to always stay the same. Those assertions protect your future self or others on the team from making costly mistakes in the future. 

Flow Orchestrator

Create Reports on Flow Orchestration Objects

Gain insight into pending and completed work items to gauge how well your Orchestration is performing by creating reports. Users with the appropriate permissions can now create reports that include Orchestration Runs, Stages, Steps, and Work Items.

Work Guide Now Refreshes Page When an Interactive Step Finishes

When a user with an assigned step finishes the screen flow, the screen will automatically refresh and progress to the next step (or finish, depending on the orchestration). Before, they had to manually refresh the page. 

Work Guide Now Available in Experience Cloud Sites

Place the work guide component in your Experience Cloud site record pages to enable your credentialed external users to complete work guide steps. 

Use Subflows in Evaluation Flows

When using evaluation flows to control your entry/exit criteria between stages, you can now use the Subflow element to re-use common evaluation criteria. Note that only other evaluation flows can be used as a Subflow.

Sharing Rules for Orchestrator Objects (Release Update)

You can now determine who can see Flow Orchestration objects by creating sharing rules! After enabling the release update, the Manage Flow user permission no longer grants users access to Flow Orchestration objects. Users who run orchestrations and execute work items must still have the Run Flows user permission.

Record Owners for Orchestration Objects

Now that many of Orchestrator’s objects are available we also made it so that they all have appropriate record owners. For more details, check the release notes when they arrive.

Flow & Slack Integrations

Screen Flows in Slack Can Now Take Simple Text Inputs & Support More Data Types

Screen Flows launched in Slack can now take basic input parameters such as recordIds, making it far easier to tailor your screen flows that you send to users in Slack!

Additionally, Screen Flows in Slack can now use Date, Date Time, Checkbox, and Checkbox Group input types.

Other

Call Invocable Actions from Apex Goes GA

Previously a developer preview, Apex developers now have the ability to call a subset of standard and custom actions directly from their Apex code, bringing the diverse capabilities of invocable actions to Apex developers.

Considerations

Invocable actions that do their own commit operations cannot be called from Apex. The following standard actions are callable from Apex in Winter ‘23:

  • apex, flow
  • chatterPost
  • runExpressionSet, runDecisionMatrix
  • activateSessionPermSet, deactivateSessionPermSet
  • getAssessmentSummary

Additional standard actions will be callable from Apex in future releases!

New Action Dialogue Load Time Improved

Internal changes to how we determine and store the list of available invocable actions in an org will decrease the time it takes to load the New Action dialog in Flow Builder. You may see a significant decrease in the time it takes to open a new action if your org has a significant amount of Apex code.