Have you tried using terminate in the middle of an apply to each? Did you get The operation terminate cannot be used inside a for each?

Cancel Flow Run instead of Terminate in the middle of an apply to each in Power Automate

Terminate

The terminate action is so often misused. As I mentioned a while back the terminate action should really not be used. But if you are inside an apply to each processing 1000s of records then cancelling out might be something that you want to do.

Cancel flow runs

There is now an option to cancel a flow run. As shown in the following example, I want to terminate my flow when the value of the item being processes is set to 4.

Cancel Flow Run

Using the Cancel Flow Run action you can now cancel your flow runs.

Yes, you could use this to cancel other flows( e.g. get a parent flow to cancel a child flow. Or the other way around. But you can also use this to cancel the current flow run.

Configure the cancel Flow Run action

To cancel the current run all we have to do is configure the actions as shown below:

Cancel Flow Run action

For the Environment we can use:

workflow().tags.environmentName

For the Flow can use:

workflow().name

For the Run ID we can use:

workflow().run.name

So just with a few simple expressions, we can cancel the current flow run, even inside an apply to each or do until step.


Discover more from SharePains by Microsoft MVP Pieter Veenstra

Subscribe to get the latest posts sent to your email.

9 thoughts on “Cancel Flow Run instead of Terminate in the middle of an apply to each in Power Automate”
  1. hello, what is the name of cancel flow run on power automate, I can’t find it when I type cancel flow run.

  2. After taking Bernard’s advice – and using Pieter’s guide… I cannot stress my gratitude for helping isolate trouble spots in large iterations. Thank you!! ~S

  3. Hi Pieter When you cancel the flow (which is the only way so far I have found to stop a Apply to Each) the flow has stopped but there are no results so you cannot see what lead up to the Stop. Regards Nigel

    1. Hi Nigel,

      There is another way, but I wouldn’t recommend it for long running Apply to each steps.

      Have inside your apply to each a variable that is checked to be true or false and only run the steps inside the apply to each if this variable is set. Then set that variable instead of doing a terminate.

      That way your apply to each will not run any steps anymore and it will finish cleanly.

      Variables inside Apply to each steps however are a bad idea for performance reasons as you can’t run with higher concurrency than 1 as the variables are locking each instance of the apply to each.

      What you could do of course is use a record (in Dataverse or SharePoint) instead of a variable. Read this record and update the record instead of the terminate, but that will probably not perform very well either.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from SharePains by Microsoft MVP Pieter Veenstra

Subscribe now to keep reading and get access to the full archive.

Continue reading