Redirecting SharePoint list's NewFormUrl and EditFormUrl to Power Apps
/In this scenario, we have a Power Apps app that takes a query param() “AssetID” and determines whether the app should create a new item or update an existing item.
We want to change the SharePoint default New or Edit items on a modern SharePoint list to go to our App. The app is a landscape canvas application and not an integrated portrait application (so we can’t use SharePoint form setting to switch this).
Because SharePoint’s New and Edit forms must be server relative pages, we can create a redirect page.
Steps
Use Param in Power Apps
Create a simple redirect page
Change SharePoint’s NewFormUrl and EditFormUrl to this redirect page
Test: Redirect to PowerApps
References
Use Param in Power Apps
https://powerapps.microsoft.com/en-us/blog/powerapps-deep-linking/
Create a simple redirect page
Create a redirect ASPX (HTML) page and upload it into the SitePage library. I saved this as "AssetEditForm.aspx"
<%@ Page Language="C#" %> <%@ Register tagprefix="SharePoint" namespace="Microsoft.SharePoint.WebControls" assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta name="WebPartPageExpansion" content="full" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Asset Form</title> <meta http-equiv="X-UA-Compatible" content="IE=10" /> <SharePoint:CssRegistration Name="default" runat="server"/> <script type="text/javascript"> function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } // console.log('Query variable %s not found', variable); } var play = "https://apps.powerapps.com/play/e3fdef18-2be5-4d25-ba04-3edf6411c0aa?tenantId=afa78dff-85bb-46f3-b036-b43bcf79c497"; var id = getQueryVariable("ID"); if (id) { window.location.replace(play+"&AssetID="+id); } else { window.location.replace(play); } </script> </head> <body> <form id="form1" runat="server"> </form> </body> </html>
Change SharePoint’s NewFormUrl and EditFormUrl with PnP-PowerShell
Connect-PnPOnline -url https://johnliu365.sharepoint.com/ $list = Get-PnPList "Asset" $list.ContentTypes[0] # assuming list content type 0 == Item # otherwise, you need to set this on the correct list content type $list.ContentTypes[0].EditFormUrl = "SitePages/AssetEditForm.aspx" $list.ContentTypes[0].NewFormUrl = "SitePages/AssetEditForm.aspx" $list.ContentTypes[0].Update($false) # no update child content types # you may have to set $true if you have content types in your list $context = Get-PnPContext $context.ExecuteQuery()
Redirecting Magic
This will change the “New”, “Edit” behaviour on the SharePoint modern or classic list. Also, this will work in the edit menu. So if you want to redirect your users to the new Power Apps experience, this is one way to change the link everywhere.
Reference Reading
Please also read April Dunnam’s two part series on how to customize SharePoint via modern ListView JSON