For several years, Experience Cloud has been developing an LWR-based foundation for Experience Sites. LWR stands for Lightning Web Runtime, and it uses Salesforce’s more modern Lightning Web Components instead of the older Aura technology.
Building sites in LWR makes sense because LWR provides a significantly faster page loading experience and because LWC is the future of Salesforce’s component strategy. Not everything that’s available to be added to Experience Cloud pages is available on the new LWR site foundation. That’s because one of the key rules of LWR that enables it to be high-performance is that you can only use it with LWC-based components. You can’t use older Lightning Components (all of which are written using Aura).
Salesforce is in the middle of a multi-release effort to bring LWR sites to feature parity with older Experience technology. One milestone was hit. Recently, in Summer ’22, Salesforce upgraded the Experience Cloud Flow lightning component (also referred as the Flow ‘runtime’) so that it works on LWR Sites. As a result of this, you can now embed flows freely in LWR-based sites as long as they don’t contain any Aura components or local actions.
At this point, all Salesforce ‘Out-of-the-box’ screen components except Image and File Upload have been converted to LWC. You may wish to use the Improved File Upload Component if you want to upload files in an LWR-hosted Flow.
There are many custom Flow screen components written in Aura. As an example, the UnofficialSF Lookup component was written in Aura and no one has yet created an LWC version of it, whereas Datatable and QuickChoice are currently LWC-based, and will work in LWR Sites.
If you try to embed a flow in a page that’s part of an LWR site, and the flow doesn’t work, check the screen components for the presence of custom components and inspect them to see if they’re Aura based.
Local Actions Do Not Yet Work in Flows Running in LWR Sites
Some useful extensions, including Navigate Everywhere, Open URL, and Update Screen, are implemented as Flow Local Actions. The current implementation of Flow Local Actions uses Aura technology and so, as you’d expect, Local Actions do not currently work in LWR Sites.
Salesforce is working on upgrading Local Actions to work with LWC. At that point, it will be possible to upgrade actions like Navigate Everywhere so that they’ll work in LWR.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Alex Edelsteinhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngAlex Edelstein2022-07-30 11:37:352022-08-01 06:09:03Flows Work with Experience LWR Sites (and why “Navigate Everywhere” and “Open URL” Don’t Work There Yet)
From Dean Fischesser, one of the nicest Orchestration demos I’ve seen:
In this great demo created by the business process involves a complex set of steps needed to onboard a Physician into a health system:
Completion of an initial Omniscript….
…triggers the underlying orchestration:
Note that the screen flow forming the first interactive step has embedded FlexCards in it!
By embedding Flexcards in Screen Flows, the Flexcards can be used as part of Orchestration Interactive Steps and be used from within the Orchestration Work Guide.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Alex Edelsteinhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngAlex Edelstein2022-07-22 15:49:392022-07-22 15:49:45Using Orchestrator with OmniScripts to Address Health Use Cases
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Eric Smithhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngEric Smith2022-07-04 12:18:142022-07-06 07:55:05New Version of Datatable Released (v4.0.6)
Until now, your only option, using standard Flow components, was to follow a bad design pattern and perform a series of Get Records inside of a Loop. Not only is this a bad practice, oftentimes you could hit a limit of too many SOQL queries before your Flow could even finish.
With my new Get Records IN invocable Flow Action, you can now do a Get Records on an Object where the value of a field in that Object is IN a collection of other values.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Eric Smithhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngEric Smith2022-06-27 05:50:202022-06-30 12:30:13New from Eric Smith: “Get Records IN” Flow Action
Think of anย Orchestration stepย as a core flow surrounded by a layer that tracks who that flow is assigned to and what determines when that flow has been properly completed. Once the main orchestration flow starts, it will pause and go to sleep when all appropriate steps have been started. Then it will wake up when work on the steps is carried out, and reevaluate, determining if new steps should be started. Starting a step does not itself create a transaction. Let’s look at what happens with the step’s core flow: 1) If it’s an Interactive Step, the core flow is a screen flow, and the assignee is sent a notification. When the assignee starts that screen flow, it will obviously be in a new transaction. 2) If it’s a Background Step, the core flow is an auto-launched flow. It will normally run synchronously with the resumed Main Orchestration Flow. That means it’s part of the same transaction as the Main Orchestration Flow, and this ‘open DML’ situation prevents callouts, so Orchestrator provides an optional checkbox with the text ‘Contains external callouts or pause elements’ , that will force a new transaction for the step’s core flow. If your entry conditions for a step are advanced, you may want to use a flow to determine whether the step is ready to start. These are called Evaluation Flows, and they also execute in the same transaction as the resumed Main Orchestration Flow.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Alex Edelsteinhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngAlex Edelstein2022-06-24 11:40:132022-06-24 11:40:17Transactions and Flow Orchestration
Sean Fielding at Sproket Logic has just introduced Email-To-Flow on the AppExchange. Read on to see how you can have more control over how incoming emails can interface with Salesforce via Flow.
Before we dive into Email-To-Flow, letโs review Email Services.
What are Email Services?
Most simply put, Email Services are automated process that use an Apex class to process inbound email. Once an inbound email is received by the Email Service Apex class, any number of custom processes can be implemented. For example, an email service can generate a lead, update a customerโs invoice notes, or event route job site photos to a work order. The most well-known example of an out-of-the-box Salesforce email service? Oh, that has to be Email-To-Case.
Email-To-Case is an Email Service?
Yup. For incoming email, Email-To-Case is an email service. The email service receives the inbound email and processes the Email-To-Case logic via an Apex class. That logic includes the creation of (or addition to) a Case, the stamping of the related Contact record, the creation of an Email Message record, the creation of the text attachment, and much more.
Sweet. But, if email services work well, why Email-To-Flow?
Good question. Email Services are indeed a powerful tool. However, they require Apex development. In this enlightened age of low-code development, we thought, why canโt an email service be processed in Flow? Then we answered ourselves with, of course it can.
So, itโs 100% Flow?
Well no. Apex is still the work horse for functionality not yet available in Flow. Apex is still required to receive the email, process the based service and retrieve the email data. But these Apex pieces are prebuilt and delivered with Email-To-Flow. So, you only need to worry about the flow.
Interesting, do you have an example?
I sure do. Letโs take a look at Email-to-Case.
Really? But, Email-to-Case works fine, doesnโt it?
Email-to-Case is great out-of-the-box. With a couple of minutes of setup, you are up and running. But letโs image that you want to make a small tweak to the functionality. Maybe you need to modify the process and/or add an additional processing step. Maybe you need one of these use cases:
Populate a Case product field based on the content of the email
Route the Case differently based on the subject
Route the email differently based on the language detected
Route spam emails to the spam queue
Link email attachments to the Cases versus the Email Message record
Remove flagged email attachments from the process
Identify the Caseโs related contact with a different filter
Leverage Intelligent Document Processing to identify the queue based on the email attachment.
In each of these events, youโll need to create your own Email-to-Case. And youโll need an Apex developerโฆ.. until now. Letโs take a look at an Email-to-Case implementation with Email-to-Flow.
Email-To-Case with Email-to-Flow
Email-to-Flow starts with the Email-to-Flow installation. The package installation provides the required email service, flow template, and support apex actions to deliver the functionality. And best of all, the default functionality mimics Email-to-Case.
Step 1: Set up an Email Service with the EmailServiceToFlow email service provided by the package.
Step 2: Review the Email-to-Flow custom metadata type configuration. This tells the email service which flow to run for the specific email address. In this case, we are running the delivered Create Case Flow.
Step 3: Review the Create Case flow. Clone it and make your own, or leverage it as is.
Step 4:ย Enjoy Email-to-Flow knowing that your business requirements are easily obtainable via flow.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Eric Smithhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngEric Smith2022-06-22 10:52:332022-06-22 10:52:39Introducing Email-To-Flow, a low-code Email Service
Version 1.5 of Text Area Plus! Adds a new text input mode for rich text input along with a Custom Property Editor to make setup easier for Flow Admins and Devs. Not only does it support rich text or plain text but we brought in many of the great features in Nick Sauers original enhancement to the Rich Text Input Component. We fixed a few bugs and added some community requests like minimum character count and some custom messaging to how you display your characters remaining or characters used. For full details and a video walkthrough visit the updated post HERE.
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Josh Daymenthttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngJosh Dayment2022-06-09 08:39:162022-06-09 08:39:18Text Area Plus! now supports Rich Text and a ton of other features!
Now you can access External Services registered actions directly from Apex to tap into reusable functionality when writing Apex code. Previously, actions created through External Services were exposed exclusively for invocation through Flow or Einstein Bots.
If a registration is in use by a flow, now you can update it with a new, compatible API specification version. Previously, you couldnโt update a registered schema that was in use by a flow. If the new schema version isnโt compatible, the edit workflow notifies you which operations and schema objects are in use by which flows and by which Apex classes. With this information, you know which existing references are incompatible so that you can remove them before saving your updated registration.
Now you can register an external service without manually editing the schema before registration to conform to the 80-character limit for derived operation and object developer names. This enables you to register more APIs with less friction!
There is a new release (v4.0.5) of the Datatable component available.
The updates include:
Enhanced handling of saved Column Configuration files
Saved column configuration attributes can now be > 255 characters
A new output attribute (Selected Row Key Field Value)
This value is populated only when a single row is selected and is designed to support inputs to other components once Reactive Screens are implemented
Various bugs have been addressed as well:
Displayed dates should no longer be off by one day when the displayed date was not in the same Daylight Standard/Savings Time as the current date
Reselecting the Column Wizard button after saving a flow will no longer cause an error
Column Configuration files now save the column widths attribute
There will no longer be a test class failure on installation in an org without Orders enabled
BONUS UPDATES
The latest versions of the QuickChoice and QuickLookup flow screen components now will have the same spacing below the components as all standard flow screen input components.
Thank you and keep the feedback coming.
Eric Smith
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Eric Smithhttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngEric Smith2022-06-03 13:45:442022-06-03 13:45:44What’s new with Datatable
Weโve received lots of questions about an impending change related to how merge field syntax is rendered when it comes from record data in screen flows in Summer โ22. I thought it would be a good idea to talk a bit more about it using some scenarios to help clarify what is changing.
If data coming into a flow includes text that resembles a merge field, the merge field now shows the merge field notation instead of the merge fieldโs evaluated value. This change helps prevent unintentional data exposure and improves flow stability. In API version 54.0 and earlier, merge fields showed the evaluated value.
For example, your org has a flow that includes an account recordโs description in the text input of a display text component. The account recordโs description uses merge fields. The description is โ{!Account.Industry} company from {!Account.BillingCity}โ. In API version 54.0 and earlier, the two merge fields are evaluated, so the description would render as โEducation company from San Franciscoโ. From API version 55.0 onward, the two merge fields arenโt evaluated, so the description renders as โ{!Account.Industry} company from {!Account.BillingCity}โ.
Likewise, in API version 55.0 onward, if an end user enters the merge field {!Account.Name} in an input for a screen flow, it renders as {!Account.Name} and isnโt evaluated. In API version 54 and earlier, the account name is rendered. Essentially, if a merge field is used in an input in a way that surfaces data, the merge field isnโt evaluated.
If you have flows that rely on using the evaluated merge field values, a workaround is required. Create a custom Apex action that performs an equivalent merge field substitution and then call it in a flow with the Apex Action element.
Scenario 1: Merge Syntax and Record Data
tl;dr – If you try to display record data that has merge field syntax within it, we won’t try to resolve it to Flow data for any flow running on API Version 55 or greater. Note this does not affect all merge field syntax. If you have syntax specified as the input of an action, for example, you will not see any change in behavior. You also won’t see any change in behavior if you use merge syntax in display text on screens.
Letโs take a scenario and run through the before and after.
Say you have a field on the Case object called โCase Greeting Templateโ, and whenever a case is made, it gets some boilerplate standard text set as the value. Letโs say itโs something like the following
Thanks {!CaseVariable.FirstName} for reaching out! Weโll reach out to you in {!CaseVariable.SLA_DueDate__c}
If you look at the case in a standard record page, youโll see the merge syntax exactly as worded above.
Let’s say you then add {!CaseVariable.Case_Greeting_Template__c} to a flow screen in some Display Text.
Before Summer โ22 (API Version 55.0)
If you displayed {!CaseVariable.Case_Greeting_Template__c} in a Screen Flow, we would try to resolve the merge syntax and display the values on screen:
Thanks Jon for reaching out! Weโll reach out to you in 5 Days
After Summer ’22 (API Version 55.0)
Now in API Version 55 and later, we will no longer try to resolve runtime-entered merge field syntax or syntax coming from record data:
Thanks {!CaseVariable.FirstName} for reaching out! Weโll reach out to you in {!CaseVariable.SLA_DueDate__c}
What’s Not Changing
We’re not making any changes to direct merge fields in Display Text. If you used the following in Display Text, it would continue to pull in Case fields as it does today at runtime:
Display Text Value: Thanks {!CaseVariable.FirstName} for reaching out! Weโll reach out to you in {!CaseVariable.SLA_DueDate__c}
At Runtime: Thanks Jon for reaching out! Weโll reach out to you in 5 Days
Scenario 2: User-entered Merge Syntax Not Evaluated
Similar to record data, if a user is running a Flow and enters in correct merge field syntax into a text input, the Flow engine will no longer try to resolve it. I’ve seen some people get creative here in building ‘on the fly’ formulas at runtime – this will no longer work.
Example:
Before Summer โ22 (API Version 55.0)
After Summer โ22 (API Version 55.0)
What else will this affect – Get Records + EmailTemplate
One nice positive of this is a fix related to querying the EmailTemplate object’s Body field which stores the contents of an email template. Ever tried to do a Get Records on EmailTemplate and reference the template body in some Display Text? Youโll notice some unfortunate results if you have. Youโd get the following error:
Hmm, that didn’t work. Check your internet connection and try again, or refresh the page. If the problem continues, ask your Salesforce admin to contact Salesforce Customer Support.
Now in API Version 55 and above, youโd see the following:
Dear {!Contact.FirstName},
I really enjoyed speaking with you today. I think that {!Organization.Name} has a lot to offer {!Account.Name} and I look forward to our next meeting.
Regards, {!User.FirstName}
Why the Change?
Simply put, this will make your flows more secure. If you need the functionality back, you can hold off on upgrading your Flow version to API version 55 or use Apex to resolve the merge fields for you. You could pass in the data you want to parse and have Apex look for the merge fields, resolve and query those values for you, then pass in those values (or all of the data) back into the Flow. Perhaps this could be a great action for an adventurous person in the community to tackle!
https://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.png00Adam Whitehttps://unofficialsf.com/wp-content/uploads/2022/09/largeUCSF-300x133.pngAdam White2022-05-26 06:35:142022-05-26 06:35:18Clarifications on Merge Field Syntax Evaluation Change in Summer ’22