0

We have the following:

  1. an record-triggered after-save flow on Opp, which depending on circumstances may do several DMLs, including an update to the triggering opp.
  2. a PB op Opp which calls a separate autolaunched flow that sends an email

One of the updates that #1 does to the triggering opp is a field change that would cause the opp to meet the conditions for #2. So what we'd expect is for both of them to run.

However, the behavior we're seeing is that when #1 runs, #2 does not run. It's not that the #2 PB is firing and not meeting the conditions. Based on debug logs, it's not firing at all. And we don't understand why.

We know about the recursion prevention features outlined here https://architect.salesforce.com/design/decision-guides/trigger-automation/ but those wouldn't seem to apply here. The key sentence seems to be this:

If that trigger has already previously fired in response to a previous DML operation ... and in doing so set off a chain of DML operations that has led to the current DML ... The trigger doesn't fire.

In our case the PB in #2 is firing before the flow in #1. But it's not meeting its conditions (since flow #1 hasn't set that field yet) so it does nothing. So while the PB in #2 "previously fired" it didn't "set off a chain of DML operations...". Am I misunderstanding this?

If not, can anyone think of other reasons why #2 would not be firing after #1 does its update?

BTW, we do understand that in most cases it's better to handle field updates on the triggering record in a before-save flow or trigger. But in this case the #1 flow is updating additional records, not just the triggering opp.

TIA for your help!

EDIT: we got this working already by changing how these flows are triggered. But we would still like to understand why it was behaving the way it was originally.

2
  • Is it not the case that the flow's update to the opp is not re-evaluated so the PB is not executed? Why not build this PB into the flow?
    – Phil W
    Aug 24, 2021 at 6:31
  • Well, why wouldn't it be re-evaluated? My understanding is that DMLs in an after trigger do in general trigger other automation, except in the case outlined in the article I quoted above, which doesn't seem to apply here. So while it certainly seems like it's not being re-evaluated, I would like to know why so I can better understand how this works.
    – mscholtz
    Aug 25, 2021 at 21:40

1 Answer 1

1

According to the order of execution (see this link: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm) processes and flows runs in the same step between before triggered flows and after triggered flows, so your Process Builder (2) is running before your after trigger Flow (1).

I suggest changing the after trigger Flow to a before trigger Flow or moving your after trigger Flow's actions to a Apex Trigger on After Insert/Update

1
  • Thanks! We actually already got it working, using an approach similar to this. At this point we just want to understand why it was behaving the way it was. I will update the original post to reflect that.
    – mscholtz
    Aug 25, 2021 at 22:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.