Flow: How To Launch Your Flows And In What Context
If you have read through the article about different types of flows, the next question would be how each type of flow can be run, and in what context.
Summary
Flow type | Launch method | run CONTEXT |
---|---|---|
Screen Flow | – Lightning Page – Button – Action | – Depends on how the flow is launched – Always in system with sharing – Always in system without sharing |
Autolaunched Flow | – Lightning Page – Button – Action – With Process Builder | – Depends on how the flow is launched – Always in system with sharing – Always in system without sharing |
Record-Triggered Flow | – Record Changes | – System |
Schedule-Triggered Flow | – Schedule Met | – System |
Platform Event-Triggered Flow | – Platform Event Received | – System |
As the trigger for last three types can be configured directly in flow, in this article we will focus on how to launch flow in Lightning Page, Button, Action, and in Process Builder.
Launch On Lightning Page – Will Run In User Context
You can access the Lightning Page by going to Setup > Lightning App Builder, or simply go to a record of that object > Click on the gear > Edit Page.
Look for the flow component, and drag it to where you want.
When clicking on the placed component, you can configure the details of the flow, including the input variables and display layout.
Launch With Button – Will Run In User Context
Go to Object Manager and the object where you want to launch the flow > Buttons, Links, and Actions > New Button or Link on the upper right.
Choose detail page button and paste in the flow url. If you want to assign the input variables, type “?[Variable name] = xxxx“. Note that if you have two input variables, use “&” to connect them.
Example: /flow/Main_Flow_2_Task?variableA=”Yes”&variableB=”No”
Launch With Action – Will Run In User Context
Go to Object Manager and the object where you want to launch the flow > Buttons, Links, and Actions > New Action on the upper right.
Please note that you cannot paste in any other input variables except from ***recordId in actions.
Launch In Process Builder – Will Run In System Context
In the actions, click Add Action > Choose Flows as Action Type > Choose the flow you want to launch and configure the input variables below. Please note that only active autolaunched flow can be called from Process Builder.
What Is Context?
Think about it as “Who requests the actions to run”. Take withdrawing money from your bank account for example, for yourself you can withdraw as much as you want, but for a stranger they can get nothing (Hopefully!). You and the stranger are the different contexts here, and the result of actions will differ because you have different permissions.
It is the same in Salesforce. There are currently two context – system and user. System is like the super admin, so it can by pass any object or field permissions or sharing rules, while user context is restricted to the access of that current user who calls the action. However validation rules cannot be bypassed even in system context.
Let’s look at an example to make it clearer. There are two flows to update a case, flow A runs in system context and flow B in user context. Lulu is an user without permission to Case object. In this case, when Lulu triggers flow A, the case can be updated, but not when Lulu triggers flow B.
However, if there is a validation rule says “Lulu cannot edit any cases!” (Poor Lulu), then none of the flows will work.
How Can I Change The Context?
As mentioned above, the flows the are launched by Lightning Page, Buttons, and Actions are run in user context, and since Process Builder always runs in system context, the flows that are launched by PB is also in system context.
However, this is only true if you set the flows to run on default mode, which is “Depends on How Flow is Launched“
To change the default, after you save the flow, click the gear on the upper left.
Click Show Advanced > How to Run the Flow, then you have two extra options – System Context with or without sharing.
Check this table to learn the difference about the three:
Context Type | Can Flow access: RECORDS THAT USER HAS NO ACCESS | FIELDS THAT USER HAS NO ACCESS | OBJECTS THAT USER HAS NO ACCESS |
---|---|---|---|
User Context | |||
System Context With Sharing | |||
System Context Without Sharing |
Hi Melody,
Thank you for the awesome content. Quick question – In System Context with Sharing, Wouldn’t having no access to the record be redundant if the user has access to the field? Any DML operation wouldn’t work.
Can you give me a contextual example to understand or extend this?
Thanks!
Hi Piyush, I am not sure if I understand your question 100%, but the use case for system context with sharing could be you want the users to be able to update some fields “only” through flows, on the records they have access to. For example, it could be a timestamp that you don’t want users to update on the record page.
Is there a way to launch a screen flow based on criteria? I need to launch a screen flow after my user Logs a call and chooses certain “Call outcomes” from our Call outcome pick list.
Is this possible?
Hi Ismael, to my knowledge Screen Flows can only be launched by user interaction, meaning they always have to manually kickstart the flow. Launching a screen flow automatically after a record-triggered flow is no feasible at the moment.
Hi, Melody,
Thanks for posting this. I now understand Context, but can you explain how the Spring ’23 Release Update “Run Flows in User Context via REST API” changes how my Flows run?
I have one record trigger flow I’m not able to see the option How to run the Flow under Advanced options?