Flow approvals are a fantastic feature of Flow where you can create quite complex approval workflows with not a lot of work and complexity. Flow does so much of the heavy lifting for us that we don’t have to worry much about difficult details like sending the approval emails, setting up buttons, waiting to aggregate the replies of multiple people, to name a few.
Set up a Workflow
Creating and setting up a workflow is quite simple. The flow can be of any type (“Automated,” “Instant,” or “Scheduled”) depending on the needs. For example:
- Automated can be useful when you have something changing in your system, like an item in a SharePoint list or a new row in an Excel file.
- Instant is useful for when you want to trigger the event yourself; for example, when a new employee arrives, it can propagate a series of authorizations for each of the departments.
- Scheduled can be used for recurring tasks that need approval, for example, annual events or renewal of software.
In the video, I’m creating an “Instant” event that allows for a simple holiday approval. The user that wants the holidays triggers the Flow with the desired days, and the manager receives an approval notification.
There are four types of workflows:
- Approve/Reject – Everyone must approve, meaning that if you send to 5 people, Flow will only move to the next step if all five reply with Approve/Reject. If the results are four approvals and one rejection, then the result will be a rejection.
- Approve/Reject – First to respond the flow will proceed as soon as it receives the first reply. If you send it to 5 people, the first approve, Flow ignores the other answers, even if they all reject.
- Custom Responses – Wait for all responses, this option will enable you to define custom responses. For the first and second case, the users will only be allowed to pick “Approve” or “Reject,” but with custom responses, you can define other options besides the default ones. Think, for example of a “Needs Validation From IT,” where you can set a different workflow and even include other approval processes in the middle. The flow will only proceed when all replies are in.
- Custom Responses – Wait for one response same as above but, as soon as the first reply is in, the flow continues.
The Approval step
In our case, we picked a simple Approve/Reject – Everyone must approve, and we send the request with the dates from the trigger. Nothing fancy.
As you can see, you can use markdown so that your email and requests are properly formatted.
Parsing the replies
As you can see, there’s no step between setting up the approval and telling flow to wait. All is automatic. We need to figure out what were the replies after. To do this look at the “Outcome” and see if it’s approved or not. Again, this approval is the result of all replies from the users.
Both approval and rejection, in our case, have the same result. Sending an email back to the requester with the comments of each person, hence the variable that we defined before. It’s also why we needed a “For Each“so that we could collect the feedback from each user. This is true even if we send it to just one person, so be aware of this.
Notice that the feedback is formatted, not in Markdown, but HTML, so that we can pass it directly to the email body. Be careful to check when you can / should use one or the other
Giving the good/bad news
After that, we need to collect the information and send it back to the requestor. Following this, an email is triggered automatically with all feedback to the person who triggered the Flow.
As you can see, it’s just a question of formatting an email and sending it. Other, more complex workflows could be achieved for each, as well as keeping a record of all replies. For now, let’s keep it simple.
Approvals can only be waiting for max 30 days. It’s quite a generous threshold so be aware that anything hanging for approval after that will break the workflow.