show me the configuration steps in Sharepoint forms list integrated with power automate flows and showing approval status in notifications email to the requestor and admin and notifcations team channel for the following flow steps: 1. requestor fills in form and submit request. 1a. submission goes to admin email. 1b requester gets submission received email. 1c approval status change to ‘pending’ in list. 1d notification and status shown in common teams channel for requestor and admin and others. 2. Admin manual checks submission. 2a If check is ok – admin forward to sequential approver1, status change to ‘In progress’. notification and staus shown in common teams channel 2b. If not ok, admin manual sends email to requestor with comments. 3 first sequential approver checks submission 3a. If ok, approver1 approve in teams channel, approval status stay as ‘In progress’, teams channel updated, approval flow goes to approver2. 3b. If not ok, approver1 add comments, approval status change to ‘reject’. 4. Approver2 flow repeats. 5. Flow stops at approver3. 5a. if approve, status change to ‘Approved’, notifications email and teams channel updated, flow stops. 5b. if reject, status change to ‘reject’, with comments. notifications email and teams channel updated, flow stops
The user wants a detailed configuration guide for a complex multi-stage sequential approval workflow in Power Automate, integrated with SharePoint lists. The workflow involves request submission, admin review, and three sequential approvers with specific status updates and notifications.
To provide an accurate and comprehensive answer, I need to gather information on several key aspects: the “Start and wait for an approval” action, particularly its sequential approval capabilities; trigger conditions; the “Send an email (V2)” action for notifications; the “Post a message in a chat or channel” action for Teams; and the “Update item” action for SharePoint. I’ll also look for examples or tutorials on sequential approval workflows.
Found 71 web pages
The search results provide some relevant information. Result 0 from the first search shows a discussion about using the “Start and wait for an approval” action with sequential approval. Result 3 from the same search is a tutorial on setting up SharePoint list sequential approval workflows in Power Automate. Result 4 from the third search is a tutorial on sending Teams notifications. Result 2 from the fourth search is a Microsoft Learn tutorial on managing sequential approvals. Result 0 from the seventh search is a community post about a multistep approval process with manual push. I will open these pages to gather detailed configuration steps.
Read 5 pages
How can I allow duplicate approvers in Power Automate sequential approval workflow? – Microsoft Q&A
Microsoft Teams | Veza User Guide
Manage sequential approvals with Power Automate – Power Automate
Power Apps and Automate Flow for multistep Approval process with manual push to go to next Approver
The opened pages provide useful information. The Microsoft Learn page on managing sequential approvals is particularly relevant. The Plumsail blog also provides a good overview. The Power Apps community post shows a manual push approach. I will also search for specific information on using the “Sequential Approval” type and handling approvals in Teams.
Found 18 web pages
I will open result 1 and result 2 for more details.
Read 2 pages
Set up sequential approvals – Power Automate
Dynamic and sequential approvals in Power Automate
The search results provide the necessary information to construct a detailed guide. I will structure the answer into two main flows: one for request submission and another for the sequential approval process. I will also include detailed steps for the admin’s manual review and the sequential approver flow. I will cite the relevant sources, such as the Microsoft Learn documentation for sequential approvals and the Plumsail blog for SharePoint list setup.
This is a comprehensive guide to building a complete approval system with SharePoint, Power Automate, and Teams.
📝 System Overview
Here is how each step of your request will be handled by the system. This system is built using a SharePoint list as the main database for all requests.
Your Step | Implementation |
1. Requestor submits form | SharePoint list form (or a Power Apps form). |
1a & 2. Admin email notification | The flow sends an email to the admin. |
1b. Requestor gets confirmation email | The flow sends an automated receipt email to the requestor. |
1c. Status changes to ‘Pending’ | The flow updates the SharePoint item’s Approval Status column. |
1d. Teams notification to all | The flow posts a status update to a dedicated Teams channel. |
2a. Admin forwards request | Admin edits the SharePoint list item to In Progress and adds approver emails. |
2b. Admin rejects & adds comments | Admin edits the list item to Rejected, adds comments, and the flow sends an email to the requestor. |
3. & 4. Sequential Approvers | A multi-stage flow handles approvals from Approver 1 to Approver 3. |
5a. Final approval | Status changes to Approved, and all parties are notified. |
5b. Final rejection | Status changes to Rejected, comments are captured, and all parties are notified. |
🏗️ Phase 1: Prerequisite Setup
First, we need to set up the SharePoint list that will store and manage your requests.
Step 1: Create the SharePoint Request List
Create a new list in SharePoint. Here are the columns you will need:
Column Name | Column Type | Purpose |
Title | Single line of text | A brief request summary |
Requestor Name | Single line of text | The name of the person submitting |
Requestor Email | Single line of text | For sending notifications |
Request Details | Multiple lines of text | Full description of the request |
Admin Comments | Multiple lines of text | For admin feedback to the requestor |
Approval Status | Choice | Options: Pending, In Progress, Approved, Rejected |
Approver1 Email | Single line of text | The first approver’s email (to be filled by admin) |
Approver2 Email | Single line of text | The second approver’s email (to be filled by admin) |
Approver3 Email | Single line of text | The third approver’s email (to be filled by admin) |
Approver1 Comments | Multiple lines of text | For the first approver’s comments |
Approver2 Comments | Multiple lines of text | For the second approver’s comments |
Approver3 Comments | Multiple lines of text | For the third approver’s comments |
Step 2: Create a Teams Notification Channel
Create a dedicated channel in a Microsoft Teams team (e.g., named “Request Approvals”).
⚙️ Phase 2: Build the Power Automate Flows
You will need to create two separate but connected flows.
Flow 1: The Submission Handler (Trigger: When an item is created)
This flow runs immediately when a user submits a new request to the SharePoint list.
Step-by-Step Configuration
- Trigger: In Power Automate, create an Automated cloud flow. Use the SharePoint trigger When an item is created.
- Initialize Variable: Add the Initialize variable action.
- Name: CurrentApproverEmail
- Type: String
- Value: Leave blank for now.
- Condition: Admin Review Path: Add a Condition control. We’ll use this to determine the admin’s path later. For now, leave it empty.
- Update Item Status to ‘Pending’: Add the SharePoint action Update item.
- Site Address: Your SharePoint site.
- List Name: Your Request list.
- ID: Select ID from the dynamic content of the trigger.
- Approval Status: Select or enter Pending.
- Send Confirmation to Requestor: Add the Office 365 Outlook action Send an email (V2).
- To: Select Requestor Email from dynamic content.
- Subject: We’ve received your request #{ID}: {Title}
- Body: Create a friendly email confirming receipt and stating the current Pending status.
- Send Notification to Admin: Add another Send an email (V2) action.
- To: Enter the admin’s email address.
- Subject: Action Required: New request #{ID} from {Requestor Name}
- Body: Provide the request details and a direct link to the SharePoint item for review.
- Post to Teams Channel: Add the Microsoft Teams action Post a message in a chat or channel.
- Post as: Flow bot
- Post in: Channel
- Team: Select your Team.
- Channel: Select the “Request Approvals” channel.
- Message: 🟡 **NEW REQUEST PENDING**\n**ID:** #{ID}\n**From:** {Requestor Name}\n**Title:** {Title}\n**Status:** Pending Admin Review
Flow 2: The Multi-Stage Approver Handler (Trigger: When an item is modified)
This is the core of your sequential approval process. It is triggered when an admin or an approver updates the SharePoint item.
Step-by-Step Configuration
- Trigger: Add a second trigger to your flow (or create a new flow). Use SharePoint’s When an item is modified trigger.
- Add a Trigger Condition: This is crucial to prevent the flow from running on every single edit. Configure the trigger to only start when the Approval Status changes.
- Click on the trigger action, then select Settings (the three dots).
- Under Trigger Conditions, add a condition:
text
@equals(triggerBody()?[‘Approval_Status’]?[‘Value’], ‘In Progress’)
This means the flow will only run when an item’s status is updated to “In Progress”.
- Get Manager: Add the Office 365 Users action Get manager (V2). Use the Requestor Email from the trigger to look up their manager.
- User (UPN): Select Requestor Email.
- Initialize Variable: Add an Initialize variable action.
- Name: ApprovalResult
- Type: String
- Start Sequential Approval: Add the approval action Start and wait for an approval.
- Approval type: Select Sequential Approval.
- Title: Request #{ID} from {Requestor Name}
- Assigned To – 1: Enter the email of the first sequential approver (e.g., from Approver1 Email or the manager’s email).
- Assigned To – 2: Enter the email of the second sequential approver.
- Assigned To – 3: Enter the email of the third sequential approver.
- Details: Include all request details, comments from the admin, and a link to the item.
- Condition: Overall Approval Outcome: After the approval completes, add a Condition to check the final result. The outcome will be Approve only if all sequential approvers approved.
- Choose a value: Select Outcome from the approval action.
- Condition: is equal to
- Choose a value: Enter Approve.
- If Yes (Fully Approved):
- Update item: Set Approval Status to Approved.
- Send email to Requestor: “Your request has been fully approved.”
- Send email to Admin: Notify them of the final approval.
- Post to Teams channel: ✅ **REQUEST FULLY APPROVED**\n**ID:** #{ID}\n**Title:** {Title}\n**Status:** Approved
- If No (Rejected by any approver):
- Update item: Set Approval Status to Rejected and copy the rejection comments from the approval response into the Approver Comments column.
- Send email to Requestor: “Your request has been rejected. Reason: [Approver Comments]”.
- Send email to Admin: Notify them of the rejection.
- Post to Teams channel: ❌ **REQUEST REJECTED**\n**ID:** #{ID}\n**Title:** {Title}\n**Status:** Rejected
👤 Phase 3: Admin and Approver Actions
This section outlines the manual steps outside of Power Automate.
- Admin Review & Forwarding: After a new request is submitted, the admin receives an email and checks the SharePoint list. They edit the item, and if the request is valid, they change the Approval Status to In Progress and fill in the email addresses for Approver1, Approver2, and Approver3. Saving the item triggers Flow 2.
- Admin Rejection: If the admin decides to reject the request during their initial review, they can set the Approval Status to Rejected and add their comments to the Admin Comments column. You can create a separate flow to handle this, or modify Flow 2 to listen for a status change to Rejected.
- Approver Actions: Each approver will receive the approval request via email and through the Approvals app in Teams. The approval request will be for the entire item, but the Start and wait for an approval action with the Sequential Approval type will ensure that approvers are contacted one after another, in the order you specified.
💡 Tips for Implementation
- Always test each part of your flow by creating a sample item before moving on to the next step.
- For advanced scenarios like parallel approvals or external users, consider exploring specialized resources.
- To prevent infinite loops, ensure your trigger condition is set correctly and that the status updates in your flow don’t re-trigger the flow unintentionally.
- Use Teams notifications to improve visibility, as many users are more responsive there.
If you’d like a deeper dive into any specific part of this workflow, like setting up the OData filter query for dynamic approvers or using Adaptive Cards for interactive approvals, just let me know.
how to setup Odata filter query for dynamic approver1.
We need to explain how to set up an OData filter query for a dynamic approver1 in Power Automate. The user wants to retrieve an approver’s email from a SharePoint lookup list based on a name selected dynamically (e.g., from a form or previous step). We should clarify the syntax, use of dynamic content, internal column names, and common pitfalls. Provide step-by-step with examples.
Setting up an OData filter query in Power Automate to dynamically retrieve Approver1’s email address involves querying a SharePoint lookup list where you store approver names and their corresponding emails. The query uses a value that changes with each flow run (e.g., a name selected by a user or admin).
Here’s a clear, step-by-step guide.
🎯 What You’re Trying to Achieve
You have a SharePoint list called Approvers Lookup with at least two columns:
Display Name | Internal Name (example) | Type | Sample Data |
Approver Name | Title or Approver_x0020_Name | Single line of text | John Smith |
Approver Email | Approver_x0020_Email | Single line of text | john.smith@company.com |
You have a dynamic value (e.g., from a form, a previous action, or an admin’s selection) that holds the name of the first approver – for example, Approver1 Name = “Jane Doe”.
You want to query the lookup list and return Jane Doe’s email address so you can assign the approval to her.
🔧 Step-by-Step: Building the OData Filter Query
Step 1: Add the “Get items” action
In your Power Automate flow, after you have the dynamic approver name available, add a new step:
SharePoint → Get items.
Step 2: Configure the SharePoint connection
- Site Address: Select your SharePoint site.
- List Name: Choose your Approvers Lookup list.
Step 3: Write the OData Filter Query
In the Filter Query field, you will write an expression that compares the Approver Name column in the lookup list with the dynamic value you have.
The basic syntax is:
text
InternalColumnName eq ‘value’
- eq means “equals” (case‑insensitive for text columns in SharePoint).
- The value must be wrapped in single quotes.
- You will replace ‘value’ with your dynamic content.
Example: If your dynamic approver name is stored in a variable called varApprover1Name
Your filter query would be:
text
Approver_x0020_Name eq ‘@{variables(‘varApprover1Name’)}’
Or, using the dynamic content picker (easier):
- Type the column internal name and the eq operator, then an opening single quote:
Approver_x0020_Name eq ‘ - Click Add dynamic content → select your variable or trigger output that contains the approver name (e.g., Approver1 Name from an admin form).
- After the dynamic token, type the closing single quote: ‘
The result will look like:
Approver_x0020_Name eq ‘Jane Doe’ at runtime.
⚠️ Crucial: You must use the internal name of the column, not the display name.
- Display name: Approver Name
- Internal name (often): Approver_x0020_Name
- If your column is simply Title, use Title.
🔍 How to Find the Internal Column Name
- Go to your SharePoint list → List settings.
- Click on the column you want (e.g., Approver Name).
- Look at the URL in your browser’s address bar. It will end with something like:
…/Field=Approver_x0020_Name
The part after Field= is the internal name.
Alternatively, you can use a browser’s developer tools or export the list to see internal names, but the URL method is quickest.
🧪 Complete Example in a Real Flow
Scenario:
An admin selects Approver1 Name from a dropdown in a Power App, passes it to the flow. The flow must fetch that approver’s email from the Approvers Lookup list.
Steps inside Power Automate:
- Trigger: Power Apps (or When an item is created in a SharePoint request list).
- Get items action:
- Site: https://yourcompany.sharepoint.com/sites/Approvals
- List: Approvers Lookup
- Filter Query:
Approver_x0020_Name eq ‘@{triggerBody()?[‘Approver1Name’]}’ - Top Count: 1 (important – returns only the first match, improves performance).
- After Get items, add a Compose action to extract the email safely:
- Inputs:
first(body(‘Get_items’)?[‘value’])?[‘Approver_x0020_Email’]
- Inputs:
- Now use that email in the Start an approval action’s Assigned To field.
🚨 Common Pitfalls & Solutions
Problem | Likely Cause | Fix |
Get items returns nothing (length = 0) | The dynamic name does not exactly match a name in the lookup list | Trim spaces: use trim(variables(‘varName’)) or ?[‘field’] with no extra spaces. Also check for case (though usually case‑insensitive). |
Filter query fails with error “Invalid filter clause” | You used the display name instead of the internal name, or forgot single quotes | Double‑check internal name. Correct: Title eq ‘John’ ; Incorrect: Approver Name eq ‘John’ |
Filter query returns multiple rows | You have duplicate approver names | Ensure names are unique, or use Top Count = 1 |
Single quote inside the name (e.g., O’Brian) breaks the query | OData requires escaping single quotes by doubling them | If you use dynamic content, Power Automate escapes it automatically. If you manually concatenate, replace ‘ with ”. |
Flow loops or runs slowly | No Top Count set, or query scans entire list | Always set Top Count to 1 when looking up a single value. Also create an index on the column (SharePoint list setting) for large lists. |
🧠 Advanced: Using substringof for Partial Matches
If you want to match a name even if the user types only a first name or a partial string, use substringof (contains). But be cautious – it can return multiple results.
text
substringof(‘John’, Approver_x0020_Name)
That query returns any row where Approver Name contains “John”. However, for a direct assignment to an approver, exact match is safer.
📝 Final Checklist
- Your SharePoint lookup list has the correct columns (Name, Email).
- You know the internal name of the name column (e.g., Approver_x0020_Name).
- Your dynamic value (approver name) is a string without extra spaces.
- You have wrapped the dynamic value in single quotes inside the Filter Query.
- You set Top Count = 1.
- You added error handling: after Get items, check if length(body(‘Get_items’)?[‘value’]) equals 0 → if yes, no approver found, send failure notification.
🔁 How This Fits into Your Sequential Approval Flow
In your multi‑stage flow (Admin → Approver1 → Approver2 → Approver3), you would:
- Before the approval starts, run a Get items query for Approver1 using the dynamic name provided by the admin (or from a previous step).
- Store the returned email in a variable.
- Use that variable in the Start and wait for an approval action (sequential type) as the first approver’s email.
- Repeat for Approver2 and Approver3 – either with separate Get items actions or by storing multiple emails in an array.
If your approvers are always the same people for every request, you can skip the lookup and store their emails directly in the request list. But if they vary based on department, amount, or other criteria, the OData filter query is essential.
Would you like me to show you the exact flow actions for retrieving all three approver emails in sequence using separate Get items calls?
yes
We need to show the exact Power Automate flow actions for retrieving three approver emails sequentially using separate Get items calls. The user wants to integrate this into a sequential approval flow (admin -> approver1 -> approver2 -> approver3). We’ll provide step-by-step configuration, including variable initialization, Get items with OData filter queries, error handling, and then the sequential approval action. Also show how to map each approver’s email to the approval stages.
Here’s the exact step‑by‑step configuration for retrieving three dynamic approver emails using separate Get items actions, then feeding them into a sequential approval in Power Automate.
🔧 Assumptions Before You Start
- You have a SharePoint list named Approvers Lookup with these columns:
Display Name | Internal Name (example) | Type |
Approver Name | Title (or Approver_x0020_Name) | Single line of text |
Approver Email | Approver_x0020_Email | Single line of text |
Sequence | Sequence | Number (1, 2, 3) – optional |
- You have a dynamic value for each approver’s name, coming from:
- A previous action (e.g., admin selects names in a form)
- Variables you initialize earlier in the flow
- Columns in a SharePoint request list (e.g., Approver1 Name, Approver2 Name, Approver3 Name)
For this example, we assume the admin has filled three columns in a SharePoint request item:
- Approver1 Name (text)
- Approver2 Name (text)
- Approver3 Name (text)
Your flow is triggered by When an item is created or When an item is modified (with a status change to “In Progress”).
📋 Flow Actions – Step by Step
1️⃣ Trigger
SharePoint → When an item is created (or modified, with trigger condition)
2️⃣ Initialize variables (optional but clean)
Add three Initialize variable actions to store the emails we will retrieve:
Action Name | Variable Name | Type | Initial Value |
Initialize variable | varApprover1Email | String | (leave blank) |
Initialize variable | varApprover2Email | String | (leave blank) |
Initialize variable | varApprover3Email | String | (leave blank) |
3️⃣ Get Approver 1 Email using OData filter
Action: Get items (SharePoint)
- Site Address: your site
- List Name: Approvers Lookup
- Filter Query:
text
Title eq ‘@{triggerBody()?[‘Approver1_x0020_Name’]}’
Replace Title with your internal column name for approver name, and Approver1_x0020_Name with the internal name of the column in your request list that holds the first approver’s name.
- Top Count: 1
After Get items, add a Condition to check if an item was found:
- Condition: length(body(‘Get_items’)?[‘value’]) is greater than 0
- If yes (found):
- Add a Compose action to extract the email:
- Inputs: first(body(‘Get_items’)?[‘value’])?[‘Approver_x0020_Email’]
- Then Set variable varApprover1Email to the output of that Compose.
- Add a Compose action to extract the email:
- If no (not found):
- Send a failure email / terminate flow (e.g., Send an email to admin: “Approver1 ‘…’ not found in lookup”).
- If yes (found):
4️⃣ Get Approver 2 Email
Repeat the exact same pattern for Approver 2.
Get items (SharePoint) – second action:
- Filter Query:
text
Title eq ‘@{triggerBody()?[‘Approver2_x0020_Name’]}’
- Top Count: 1
Add a Condition and Set variable varApprover2Email similarly.
5️⃣ Get Approver 3 Email
Repeat for Approver 3.
Get items (SharePoint) – third action:
- Filter Query:
text
Title eq ‘@{triggerBody()?[‘Approver3_x0020_Name’]}’
- Top Count: 1
Add a Condition and Set variable varApprover3Email.
6️⃣ Start Sequential Approval
Now that you have all three emails stored in variables, add the Start and wait for an approval action.
- Approval type: Sequential Approval (or Approve/Reject – First to respond if you want all three to approve, but sequential is what you asked for)
- Title: Request #{ID} from {Requestor Name}
- Assigned To – 1: Select the variable varApprover1Email (dynamic content from your set variable action)
- Assigned To – 2: Select varApprover2Email
- Assigned To – 3: Select varApprover3Email
- Details: Include request details, link to item, etc.
⚠️ Important: The Sequential Approval type will send the approval request to Approver 1 first. Only after Approver 1 responds does it move to Approver 2, then Approver 3. If any approver rejects, the whole process stops and the outcome is Reject.
7️⃣ Handle the Final Outcome
After the approval action, add a Condition to check Outcome:
- If Outcome equals Approve:
- Update SharePoint item: Approval Status = Approved
- Send notifications (email to requestor, admin, Teams channel)
- If Outcome equals Reject:
- Update SharePoint item: Approval Status = Rejected
- Capture Comments from the approval response (the rejection reason)
- Send rejection notifications
🧪 Complete Visual Flow Structure
text
Trigger (item created/modified)
│
├─ Initialize varApprover1Email = “”
├─ Initialize varApprover2Email = “”
├─ Initialize varApprover3Email = “”
│
├─ Get items (Approver1 lookup)
│ └─ Condition: found?
│ ├─ Yes → Compose email → Set varApprover1Email
│ └─ No → Send error email / Terminate
│
├─ Get items (Approver2 lookup)
│ └─ Condition: found?
│ ├─ Yes → Compose email → Set varApprover2Email
│ └─ No → Send error email / Terminate
│
├─ Get items (Approver3 lookup)
│ └─ Condition: found?
│ ├─ Yes → Compose email → Set varApprover3Email
│ └─ No → Send error email / Terminate
│
├─ Start and wait for approval (sequential, using the three variables)
│
└─ Condition on approval outcome
├─ Approve → Update item + success notifications
└─ Reject → Update item + failure notifications
📝 Tips for Production
- Use a single Get items with a filter query that returns all three at once (if your lookup list has a Sequence column).
Example: (Title eq ‘Name1’ or Title eq ‘Name2’ or Title eq ‘Name3’) – then loop through results and assign to variables. This reduces API calls. - **Add a Top Count of 1 on each Get items to avoid unnecessary data.
- Store the dynamic approver names (entered by admin) in the main request list columns. This provides an audit trail of who was supposed to approve.
- Error handling: If any Get items returns no match, send a Teams message to the admin and terminate the flow. Do not start the approval with blank emails.
🔁 Alternative: Using an Array for All Three Approvers
If you prefer a more compact approach:
- Initialize an array variable: varApproverEmails = []
- Use a loop (e.g., Apply to each over a list of approver names) to call Get items once per name and append the email to the array.
- Then use Start and wait for an approval with the Assigned To field set to the array (for sequential, you would need to parse the array into individual variables anyway, so the separate approach is clearer).
Would you like me to provide the exact JSON of the flow or help you adapt this to a specific trigger (e.g., Power Apps, Microsoft Forms)?