UPDATE: This post discusses how to make SOQL calls in Flow using apex code. However, there are also some installable components that let you create SOQL calls with point-and-click UI in flows. Learn more.
It’s surprisingly straightforward to add a complex SOQL query to your Lightning Flow.
The process involves creating a simple Apex class that carries out your query, and then ensuring that class shows up in Flow Builder as a declarative building block that can be dragged into your flow.
Invocable Actions is the key technology that enables you to publish your apex into flows . Learn more about Invocable Actions.
Here’s an example of an apex class I wrote to carry out a single, complex SOQL query.
Note that in this pattern, I create a Requests class to store the inputs that my SOQL query will need and a Results class to define the values that my flow action will return to the flow.
In this particular example, I carry out my SOQL query in two parts. I first retrieve the name of the user and then retrieve a count of all cases associated with that user name.
I then create a Result instance and pack it with the important values returned with my queries:
Results curResult = new Results();
curResult.severeCaseCount = severeCaseCount;
curResult.revenueTier = curUser.RevenueTier__c;
Finally, I create a List container and add my Result to it. I use a List even though I know I’ll only have a single Result. That’s just part of how the Invocable Actions interface works: each action is expected to return a List (this makes it possible for the interface to support collections and single value responses with a single method).
Because I’ve annotated a method in my AssessCustomerStatus class with @invocableMethod, this functionality will now appear in flow as a declarative building block:
If you can create advanced SOQL queries, you‘re enough of salesforce dev to expose them as declarative flow actions. This opens a lot of new applications up to you.