web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / HTTP with Microsoft En...
Power Apps
Unanswered

HTTP with Microsoft Entra ID (preauthorized) connector issue

(1) ShareShare
ReportReport
Posted on by 92

Hi folks,

 

I have a Power App that includes functionality where a user can search a large sharepoint document library. I followed Reza Dorrani's guide on using the Office365Groups connector and the httprequest functionality, but have now learned that this is deprecated and I wish to replace this before my app breaks.

I have attempted to transition my old code across to the HTTP with Microsoft Entra ID (preauthorized) connector and I'm attempting to perform an Invoke an HTTP Action but cannot figure out why I consistently get a "badRequest - the call failed, please try again" error.

I'm hoping one of you Power Apps geniuses can cast your eyes over this code and find my mistake(s):

 

 

UpdateContext({searchPerformed: false});

// Construct the request body JSON
Set(varRequestBody, "{
 ""requests"": [
 {
 ""entityTypes"": [
 ""driveItem""
 ],
 ""query"": {
 ""queryString"": ""title:\"""& txtSearchbox.Text &"\"" AND isDocument=false
 path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR
path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR 
path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"" OR 
path:\""https://xxxx.sharepoint.com/sites/xxxxx/Shared%20Documents/General/xxxx/xxxx\"""" 
 },
 ""fields"": [
 ""title"",
 ""url""
 ]
 }
 ]
}");

// Use HTTP with Microsoft Entra ID (preauthorized) connector
Set(searchResults, 'HTTPwithMicrosoftEntraID(preauthorized)'.InvokeHttp(
 "POST",
 "https://graph.microsoft.com/v1.0/search/query",
 {
 headers: Table(
 {key: "Content-type", value: "application/json"}
 ),
 body: varRequestBody
 }
));

UpdateContext({searchPerformed: true});

 

 

I have tested the varRequestBody JSON inside the graph explorer and it works and returns results correctly. So I believe it has something to do with the connector.


Any help would be greatly appreciated!

Categories:
I have the same question (0)
  • iAm_ManCat Profile Picture
    18,228 Most Valuable Professional on at

    Honestly I'm not sure this is it, but it looks like you've included a few line feeds / carriage returns into the querystring text - graph didn't like when I separated things with line feed / carriage return when using graph explorer

     

    Can't see it under default font size as it looks like they are all just wrapping due to length:

    image.png

     

    But substituting the linefeeds and carriage returns makes it more visible:

    image.png

  • Omainesi Profile Picture
    92 on at

    Thanks for taking the time to reply. 

    I've now tried amending the JSON to remove those line feeds and carriage returns (good catch by the way). Unfortunately, it has not solved the problem, but certainly may have been 1 of multiple problems, so I appreciate it!

     

    I'm including the updated code for reference:

    UpdateContext({searchPerformed: false});
    
    // Construct the request body JSON
    Set(varRequestBody, "{
     ""requests"": [
     {
     ""entityTypes"": [
     ""driveItem""
     ],
     ""query"": {
     ""queryString"": ""title:\"""& txtSearchbox.Text &"\"" AND isDocument=false path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\"" OR path:\""https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\""""
     },
     ""fields"": [
     ""title"",
     ""url""
     ]
     }
     ]
    }");
    
    // Use HTTP with Microsoft Entra ID (preauthorized) connector
    Set(searchResults, 'HTTPwithMicrosoftEntraID(preauthorized)'.InvokeHttp(
     "POST",
     "https://graph.microsoft.com/v1.0/search/query",
     {
     headers: Table(
     {key: "Content-type", value: "application/json"}
     ),
     body: varRequestBody
     }
    ));
    
    UpdateContext({searchPerformed: true});


    Also including the error in case it helps:
    Screenshot 2024-05-21 002323.png

     

  • Omainesi Profile Picture
    92 on at

    I've spent a bit more time on this today. I used the Power Apps monitor to take a look at what is going on under the hood and found this in the Properties > Request tab of the InvokeHttp operation:

     

     "body": {
     "method": "POST",
     "url": "https://graph.microsoft.com/v1.0/search/query",
     "headers": {
     "Content-Type": "application/json"
     },
     "body": null
     }
    }

     

    I'm assuming I'm getting a bad request error as the body is null. Any ideas as to why it is not passing through the body?

     

    In case it helps, here's what is returned in Monitor for the InvokeHttp > Details tab:


    {
     "status": 400,
     "duration": 70.29,
     "dataSource": "HTTPwithMicrosoftEntraID(preauthorized)",
     "responseSize": 207,
     "controlName": "btnSearch",
     "propertyName": "OnSelect",
     "nodeId": 26,
     "formulaData": {
     "script": "UpdateContext({locSearchPerformed: false});\r\n\r\n// Construct the request body JSON\r\nSet(varRequestBody, \"{\r\n \"\"requests\"\": [\r\n {\r\n \"\"entityTypes\"\": [\r\n \"\"driveItem\"\"\r\n ],\r\n \"\"query\"\": {\r\n \"\"queryString\"\": \"\"title:\\\"\"\"& txtSearchbox.Text &\"\\\"\" AND isDocument=false path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\"\"\"\r\n },\r\n \"\"fields\"\": [\r\n \"\"title\"\",\r\n \"\"url\"\"\r\n ]\r\n }\r\n ]\r\n}\");\r\n\r\n// Use HTTP with Microsoft Entra ID (preauthorized) connector\r\nSet(searchResults, 'HTTPwithMicrosoftEntraID(preauthorized)'.InvokeHttp(\r\n \"POST\",\r\n \"https://graph.microsoft.com/v1.0/search/query\",\r\n {\r\n headers: Table(\r\n {key: \"Content-Type\", value: \"application/json\"}\r\n ),\r\n body: varRequestBody\r\n }\r\n));\r\n\r\nUpdateContext({locSearchPerformed: true});\r\n",
     "spanStart": 1353,
     "spanEnd": 1619
     },
     "data": {
     "context": {
     "entityName": "btnSearch",
     "propertyName": "OnSelect",
     "id": 11501,
     "nodeId": 26,
     "diagnosticContext": {
     "span": {
     "start": 1353,
     "end": 1619
     },
     "dataOperation": {
     "protocol": "rest",
     "operation": "InvokeHttp",
     "dataSource": "HTTPwithMicrosoftEntraID(preauthorized)"
     },
     "formula": "UpdateContext({locSearchPerformed: false});\r\n\r\n// Construct the request body JSON\r\nSet(varRequestBody, \"{\r\n \"\"requests\"\": [\r\n {\r\n \"\"entityTypes\"\": [\r\n \"\"driveItem\"\"\r\n ],\r\n \"\"query\"\": {\r\n \"\"queryString\"\": \"\"title:\\\"\"\"& txtSearchbox.Text &\"\\\"\" AND isDocument=false path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\" OR path:\\\"\"https://xxxx.sharepoint.com/sites/xxxx/Shared%20Documents/General/xxxx/xxxx\\\"\"\"\"\r\n },\r\n \"\"fields\"\": [\r\n \"\"title\"\",\r\n \"\"url\"\"\r\n ]\r\n }\r\n ]\r\n}\");\r\n\r\n// Use HTTP with Microsoft Entra ID (preauthorized) connector\r\nSet(searchResults, 'HTTPwithMicrosoftEntraID(preauthorized)'.InvokeHttp(\r\n \"POST\",\r\n \"https://graph.microsoft.com/v1.0/search/query\",\r\n {\r\n headers: Table(\r\n {key: \"Content-Type\", value: \"application/json\"}\r\n ),\r\n body: varRequestBody\r\n }\r\n));\r\n\r\nUpdateContext({locSearchPerformed: true});\r\n"
     }
     },
     "request": {
     "url": "https://uk-001.azure-apim.net/apim/webcontents/xxxx/codeless/InvokeHttp",
     "method": "POST",
     "headers": {
     "x-ms-user-agent": "PowerApps/3.24051.23 (Web AuthoringTool; AppName=xxxx)",
     "x-ms-client-session-id": "xxxx",
     "x-ms-client-request-id": "xxxx",
     "x-ms-client-environment-id": "/providers/Microsoft.PowerApps/environments/xxxx",
     "x-ms-client-app-id": "/providers/Microsoft.PowerApps/apps/xxxx",
     "x-ms-client-tenant-id": "xxxx",
     "x-ms-client-object-id": "xxxx",
     "Accept-Language": "en-GB",
     "Accept": "*/*",
     "Cache-Control": "no-cache, no-store",
     "Content-Type": "application/json",
     "x-ms-request-method": "POST",
     "x-ms-request-url": "/apim/webcontents/xxxx/codeless/InvokeHttp"
     },
     "body": {
     "method": "POST",
     "url": "https://graph.microsoft.com/v1.0/search/query",
     "headers": {
     "Content-Type": "application/json"
     },
     "body": null
     }
     },
     "response": {
     "duration": 70.29,
     "size": 207,
     "status": 400,
     "headers": {
     "Cache-Control": "no-store, no-cache",
     "client-request-id": "xxxx",
     "content-encoding": "gzip",
     "Content-Type": "application/json",
     "Date": "Tue, 21 May 2024 23:41:01 GMT",
     "Request-Id": "xxxx",
     "strict-transport-security": "max-age=31536000",
     "timing-allow-origin": "*",
     "x-ms-ags-diagnostic": {
     "ServerInfo": {
     "DataCenter": "UK South",
     "Slice": "E",
     "Ring": 5,
     "ScaleUnit": "003",
     "RoleInstance": "xxxx"
     }
     },
     "x-ms-apihub-cached-response": true,
     "x-ms-apihub-obo": true,
     "x-ms-environment-id": "xxxx",
     "x-ms-client-request-id": "xxxx"
     },
     "body": {
     "error": {
     "code": "BadRequest",
     "message": "The call failed, please try again.",
     "target": ""
     },
     "Instrumentation": {
     "TraceId": "xxxx"
     }
     },
     "responseType": "text"
     },
     "startTime": 5365934.9,
     "name": "https://uk-001.azure-apim.net/invoke",
     "fetchStart": 5365935.1,
     "domainLookupStart": 5365935.1,
     "domainLookupEnd": 5365935.1,
     "connectStart": 5365935.1,
     "connectEnd": 5365935.1,
     "secureConnectionStart": 5365935.1,
     "requestStart": 5365936.1,
     "responseStart": 5366002.8,
     "responseEnd": 5366003.7,
     "transferSize": 470,
     "nextHopProtocol": "h2"
     }
    }
  • iAm_ManCat Profile Picture
    18,228 Most Valuable Professional on at

    try break it down to using only one path for testing - did it succeed? Then add another path, etc etc - that way you can see if its the multiple paths or if its a specific path that is causing the issue

  • Omainesi Profile Picture
    92 on at

    Thanks for your reply. I have spent a stupid amount of time on this and still have been unable to get it to work. I can successfully perform a GET request using this connector, but even the simplest POST request fails with a body: null error.

     

    I have been working directly with Power Apps premium support on this issue and so far they have been unable to find a solution. I hope to know more later this week.

    This might be a lot to ask, but if you have a bit of time spare could you try creating a POST request using this connector in a canvas app? Something simple like this: https://learn.microsoft.com/en-us/graph/api/driveitem-post-children?view=graph-rest-1.0&tabs=http 

    POST https://graph.microsoft.com/v1.0/me/drive/root/children
    Content-Type: application/json
    
    {
     "name": "New Folder",
     "folder": { },
     "@microsoft.graph.conflictBehavior": "rename"
    }

     

    And if you're able to get it to work, could you reply with the code you have used. I'm certain that once I see a working implementation of this connector then I could figure it out, but the documentation is poor and I've been unable to find any examples of this connector being used to send a POST request using Power Apps (plenty in Power Automate, but I too can get my code to work in Power Automate).

  • Ana Almeida Profile Picture
    on at
    Can you share the Reza video that you mentioned?
  • Omainesi Profile Picture
    92 on at

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Forum hierarchy changes are complete!

In our never-ending quest to improve we are simplifying the forum hierarchy…

Ajay Kumar Gannamaneni – Community Spotlight

We are honored to recognize Ajay Kumar Gannamaneni as our Community Spotlight for December…

Leaderboard > Power Apps

#1
WarrenBelz Profile Picture

WarrenBelz 711 Most Valuable Professional

#2
Michael E. Gernaey Profile Picture

Michael E. Gernaey 319 Super User 2025 Season 2

#3
Power Platform 1919 Profile Picture

Power Platform 1919 268

Last 30 days Overall leaderboard