Skip to main content

Notifications

Build long-running Approval Flows

Flows make it easy to automate workflows that request approvals and act on responses to them. Currently, flow runs time-out after 30 days, causing any pending steps (like approvals) to time-out as well. While this isn’t a problem for most approvals, there are cases where responding to an approval can take longer than 30 days.

Creating long running approval flows

With approvals stored in the Common Data Service, you can now create flows that act on responses to approval requests, even after the original flow run has timed-out. To do this, we will use two flows – one to send an approval request and the other to run business logic on the outcome of the approval once responses to it have been received.

Step 1:  Build a flow that sends an approval.

Begin by adding the ‘Create an Approval’ action in your first flow . This action, in addition to sending approval requests, also creates a record in the Approval entity of the Common Data Service. This record is what enables us to run business logic based on the outcome of the approval, even after the flow run ends.

In the screenshot below, the definition of our first flow contains just two steps - one to manually trigger the flow using a flow button, and the second to create an approval. Note that once the approval is created, the flow run ends.

Flow 1: Create an approvalFlow 1: Create an approval

Step 2:  Build a flow to run business logic on the outcome of an approval

In this step, we’ll build a Flow that runs when an approval record in the Common Data Service is updated, checks the Result field of the approval (which stores the Outcome of the approval request) and executes business logic accordingly.

Begin by creating a new Flow that starts with the ‘When a record is updated’ trigger of the Common Data Service connector and set the Entity Name field to ‘Approvals’. To make sure we only run this flow when the Result field of the approval updated, select the 'msdyn_flow_approval_result' in the dropdown for the Attribute Filters Item

Flow 2: Trigger the flow when the result field of an approval record is updatedFlow 2: Trigger the flow when the result field of an approval record is updated

Let's say that onve the flow is triggered (i.e., an approval has been responded to and has an outcome), we want to do the following:

  1. Get the email address of the requestor
  2. Send an email notifying them of the outcome.

To get the user that requested the approval, we use the ‘Get record’ action of the Common Data Service connector, set Entity Name field to ‘Users’ and the Item identifier field to the Owner field from the list of dynamics values of the ‘When a record is updated’ trigger

Flow 2: Get information about the requesterFlow 2: Get information about the requester

To send them an email that’s worded based on the outcome of the approval, we add a condition that checks if the value in the Result field is ‘Approve’ and then use the ‘Send an email’ action to craft messages for when a request is approved and rejected respectively

Flow 2: Send an email based on the approval outcomeFlow 2: Send an email based on the approval outcome

Here's our complete flow definition that runs when an approval has been responded to, and sends an email to the requestor based on its outcome:

Flow 2: Flow to run business logic based on an approvals outcomeFlow 2: Flow to run business logic based on an approvals outcome

Comments

*This post is locked for comments

  • bsene Profile Picture bsene 4
    Posted at
    Build long-running Approval Flows

    @kudorje in my understanding, you build a first flow to start the approval. The approval result and status are stored in the Dataverse table (CDS). This will be used in the second flow that is not bound to the 30-Day Timeout issue.

     

    Regards 

  • kudorje Profile Picture kudorje 121
    Posted at
    Build long-running Approval Flows

    Hello  @Karan_MSFT - In your comment above, you mention to build a second flow, do you mean having the same workflow twice? 

  • kudorje Profile Picture kudorje 121
    Posted at
    Build long-running Approval Flows

    Hello! Can you help confirm which part of the flow actually re-triggers the workflow? 

  • Nao_ Profile Picture Nao_ 121
    Posted at
    Build long-running Approval Flows

    Is it possible to have this post using dataverse ?

  • donalmc Profile Picture donalmc 284
    Posted at
    Build long-running Approval Flows

    Am I correct in my assumption that this will only really work for single user Approvals?

     

  • kvdudley Profile Picture kvdudley
    Posted at
    Build long-running Approval Flows

    Can you please rewrite this post using Dataverse?

  • Himanjan Profile Picture Himanjan 6
    Posted at
    Build long-running Approval Flows

    Hi @Karan_MSFT 

     

    I have a small query here with regards to the above illustration and I had validated this approach before some months.

     

    as you stated "It's worth noting that this is possible because with the V2 approval connectors, approval data is stored in CDS for as long as you need it"

     

    - My understanding is the 1st approval flow is triggred and sent the approval email to approver that flow will get timed out after 29 days so as the approval process and if the approver will try to action on that after 30 days it will not allow as the token might have expired and it can not establish the conenction with the 1st flow to bind the outcome.

    - I understood the 2nd part the CDS workflow will be triggered based upon the 1st flow outcome. But what we are looking for is the 1st flow will not generate any outcome within 30 days.

    - Here is the simple query

    Is that create V2 approval action runs/ remains valid for the approval for more than 30 days/indefinite time OR in other way if the approver will try to action the approval email after 30 days will it work?

  • Build long-running Approval Flows

    Hello @Karan_MSFT 

     

    When a record is updated flow get triggered every time a approval action happens in any of the approval workflows. 

    1) Is there a attribute in approval entity to find out which flow triggered the approval

    2) If I have several approval actions in the workflow how do I differentiate which approval action caused the trigger. I am currently using get items and then title to filter the record that caused the trigger.

  • Jaystechtips Profile Picture Jaystechtips 100
    Posted at
    Build long-running Approval Flows

    I'd like to know too. I just found out that the approval process takes on average 3 to 6 months in my company. Is there any way to do these without using CDS? Its a premium feature and we have to pay more for this.

     

    And on top of that I have to recreate the flow again. Knowing flow, i cannot just paste a subflow into my flow

     

    Hope you have a solution for this without using CDS

  • ChadVKealey Profile Picture ChadVKealey 1,387
    Posted at
    Build long-running Approval Flows

    @Karan_MSFT , is there a way to do this without the use of CDS? We have a couple of P2 licenses for testing and evaluation, but I need to build production Approval Flows (NOT using CDS) that may run for longer than 30 days.