Introduction

This article explores a multi-flow design approach to resolving approval dependencies, where one flow initiates the approval process and another waits for and reacts to the approval result. By separating responsibilities and orchestrating communication between flows, this pattern enables better scalability, more apparent logic, and easier troubleshooting. Through this approach, you can build approval workflows that are more reusable and easier to extend as business requirements evolve.

Scenario Overview

An employee submits a leave request that requires manager approval. Based on the approval decision:

At the same time, specific actions - such as logging the request and updating team calendars - need to happen immediately after submission.

Problem

In a traditional single-flow design, the workflow must wait for the manager's approval response before moving to the next step. This waiting behaviour creates a Blockage.

Solution: Multi-Flow Design

To address this, the process is divided into multiple flows with clear responsibilities:

By separating approval handling from other tasks, the system continues to operate efficiently without being blocked by approval delays. This multi-flow design results in better performance.

Prerequisites

Before implementing this , ensure the following:

Below are the steps for Multi-Flow Design:

Flow 1:

Triggered when a new item is added to the Employee Leave Requests list, starts the approval process, and logs the request in the Leave Request Logs list.

Step 1. Trigger: When an item is created in Employee Leave Requests list

[Note: Your flow can be triggered in different ways: when a user creates a request in the list, when Power Apps calls the flow with an Employee ID, or when Power Apps creates a list entry that triggers the flow.]

18-12-2025-05-04-06

Step 2. Create an approval: Initiating the approval process

triggerOutputs()?['body/Title']
triggerOutputs()?['body/EmployeeID']
triggerOutputs()?['body/LeaveType/Value']
triggerOutputs()?['body/{Link}']
18-12-2025-05-04-44

Step 3. Create item: Create entry in the Leave Request Logs list

triggerOutputs()?['body/Title']
triggerOutputs()?['body/EmployeeID']
triggerOutputs()?['body/LeaveType/Value']
outputs('Create_an_approval')?['body/name']
18-12-2025-05-05-23

Flow 2:

When a new log is created, wait for approval, then update the request in both Leave Request Logs and Employee Leave Requests lists.

Step 1. Trigger: When an item is created in Leave Request Logs list

18-12-2025-05-06-01

Step 2. Wait for an approval: Waits for the approval response

triggerBody()?['ApprovalID']
18-12-2025-05-06-29

Step 3. Update item: Updates the Leave Request Logs list with approval details, such as who, when, what is outcome and comments of approval.

triggerOutputs()?['body/ID']
concat('i:0#.f|membership|',first(outputs('Wait_for_an_approval')?['body/responses'])?['responder/email'])
utcNow()
if(equals(outputs('Wait_for_an_approval')?['body/outcome'],'Approve'),'Approved','Rejected')
first(outputs('Wait_for_an_approval')?['body/responses'])?['comments']
18-12-2025-05-06-47

Step 4. Get item: Gets the requester's employee ID

EmployeeID eq '@{outputs('Update_item')?['body/EmployeeID']}'
18-12-2025-05-07-23

Step 5. Update item: Updates the Employee Leave Requests list with approval details, such as who, when, what is outcome and comments of approval.

first(outputs('Get_items')?['body/value'])?['ID']
concat('i:0#.f|membership|',first(outputs('Wait_for_an_approval')?['body/responses'])?['responder/email'])
if(equals(outputs('Wait_for_an_approval')?['body/outcome'],'Approve'),true,false)
utcNow()
if(equals(outputs('Wait_for_an_approval')?['body/outcome'],'Approve'),'Approved','Rejected')
first(outputs('Wait_for_an_approval')?['body/responses'])?['comments']
18-12-2025-05-07-50

Conclusion

A multi-flow design processes leave requests efficiently, running parallel tasks immediately and handling approvals separately.