Before-Save Flow Triggers are a quite different way of thinking than Process Builders which run in the After Save context. You will use far-fewer IsChanged scenarios, you will use Formulas more.
I’m trying to make rules for my scenarios so here’s an attempt
Before-Create
Before-Update
For when the value ALWAYS has to be the latest updated value
Eg if the Manager Name changes, the next time the record is updated it will display the correct Manager Name
Also handles if the Manager is not set
Formula fManagerName
Assign to Manager Name field
IF(NOT(ISBLANK({!$Record.Manager__c})),{!$Record.Manager__r.FirstName} & " " & {!$Record.Manager__r.LastName} ,"") |
Will this set if the Manager is set by Default?
For when there is an ID on a related record and it needs to be on this record.
This is due to maxing out my spanning limits so I can’t do formulas.
Checks if the Schedule lookup field has been set
Formula fScheduleID
Assign to ScheduleID field
IF(NOT(ISBLANK({!$Record.Schedule__c})), {!$Record.Schedule__r.ID__c},null) |
Before-Create
Before-Update
If the user already enters the value you need to keep that
Otherwise set the default based on the related record.
Formula fManager
Assign to Manager field
IF(NOT(ISBLANK({!$Record.Manager__c})),{!$Record.Manager__c},{!$Record.Account__r.Manager__c}) |
Before-Create (if a record can be created as Active)
Before-Update
Formula fClient
Assign to Client Field
IF(ISPICKVAL({!$Record.Status__c},"Draft"),{!Record.Account__r.Client__c},{!$Record.Client__c}) |
Before-Update
Eg I have a picklist that is a Preset… depending on that Preset it sets a number of other values. However the user can set the Preset, THEN override the other values manually.
create variable varAutomaticOption
set default value on varAutomaticOption to {!$Record.AutomaticOption__c}
Create a Decision Element
Outcome Name SettingA
{!$Record.Preset__c} = “Setting A”
AND
{!$Record__Prior.Preset__c} Not Equal To {!$Record.Preset__c}
Create an Assignment after the Outcome for SettingA
Assign {!varAutomaticOption} to “Automatic” (the default for that preset).
In the final Assignment
Assign {!$Record.AutomaticOption__c} field {!varAutomaticOption}
That way the varAutomaticOption will be the current value unless the preset is changed, then it will be set to the new value and the AutomaticOption will be saved.
Note my Presets set 8 fields in this way, so I’m not sure I would do it this way if it was just one field.