cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
AeronC
Level: Powered On

Sharepoint User Profile Details in PowerApps - SharePoint REST API

Hello Everyone!

 

I'm trying to retrieve Sharepoint Online (SPO) User Profile properties using the Sharepoint REST API via a custom connector in PowerApps.

 

For an easy example: the DisplayName property of the current User.

 

(Note: I am actually trying to retrieve custom defined user profile properties "PrimaryArea", "SecondaryArea" etc... from SPO, due to the fact that 'Term Sets' can be defined for these properties; something that I believe to not be possible for the Azure AD user resource (even through custom schema extensions) or the Office365 user profile.)

Therefore I do not think the Office365Users or AzureAD connectors are a suitable alternative. Please let me know If I am wrong about this as it would solve my problem quickly.

 

I have a custom connector that gives the following HTTP response to a GET request;

 

{
  "odata.metadata": "https://example.sharepoint.com/_api/$metadata#Edm.String",
  "value": "Aeron Campbell"
}

with the headers;

 

{
  "cache-control": "private, max-age=0",
  "content-encoding": "gzip",
  "content-type": "application/json;odata=minimalmetadata;streaming=true;charset=utf-8",
  "dataserviceversion": "3.0",
  "date": "Wed, 17 Jul 2019 23:08:06 GMT",
  "expires": "Tue, 02 Jul 2019 23:08:06 GMT",
  "last-modified": "Wed, 17 Jul 2019 23:08:06 GMT",
  "microsoftsharepointteamservices": "16.0.0.9103",
  "ms-cv": "nvFF46pwAJADMbkfRgFydA.0",
  "p3p": "CP=\"ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\"",
  "request-id": "e345f19e-70aa-9000-0331-b91f46017274",
  "spclientservicerequestduration": "281",
  "sprequestguid": "e345f19e-70aa-9000-0331-b91f46017274",
  "strict-transport-security": "max-age=31536000",
  "vary": "Accept-Encoding",
  "x-aspnet-version": "4.0.30319",
  "x-content-type-options": "nosniff",
  "x-frame-options": "SAMEORIGIN",
  "x-ms-invokeapp": "1; RequireReadOnly",
  "x-powered-by": "ASP.NET",
  "x-sharepointhealthscore": "0",
  "x-sp-serverstate": "ReadOnly=0"
}

Notice how expires is before the date. Could this be the issue?

The custom connector is defined as an OpenAPI file below:

{
  "swagger": "2.0",
  "info": {
    "version": "1.0",
    "title": "SharePointUsers",
    "description": "Access Sharepoint User details using this API", 
    "contact": {
    "name": "Aeron Campbell",
    "email": "Aeron.Campbell@example.co.uk"
    }
  },
  "host": "example.sharepoint.com",
  "basePath": "/",
  "schemes": [
    "https"
  ],
  "consumes": [
    "application/json;odata=verbose"
  ],
  "produces": [
    "application/json;odata=verbose"
  ],
  "securityDefinitions": {
    "AAD": {
      "type": "oauth2",
      "flow": "implicit",
      "authorizationUrl": "https://login.windows.net/common/oauth2/authorize",
      "scopes": {}
    }
  },
  "paths": {
    "/_api/SP.UserProfiles.PeopleManager/GetMyProperties/DisplayName": {
      "get": {
        "description": "Get current Sharepoint user properties",
        "summary": "Get My Properties",
        "operationId": "GetSharepointUser",
        "x-ms-visibility": "important",
        "consumes": ["application/json;odata=verbose"],
        "produces": ["application/json;odata=verbose"],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object",
              "properties": {
                "value": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "500": {
            "description": "Internal Server Error"
          },
          "default": {
            "description": "Operation Failed."
          }
        }
      }
    }
  }
}

However when using the custom connector within Powerapps I keep getting the following error. (See attachment)

 

SharePointUsers.GetSharepointUser() failed: The data returned in the response is invalid.

 

Could this be because of how I have defined the JSON schema in the OpenAPI file? or becasue the response is stale? or just because of how Powerapps expects to recieve data?

 

I am fairly new to PowerApps, OpenAPI, REST API, HTTP Requests and the whole Microsoft Eco System/Platform as a whole so I would greatly apprectiate any advice regarding what I am trying to achieve!

 

I have used the following resource to create the custom connector and app registrations in Azure and whatnot...

https://powerapps.microsoft.com/en-us/blog/implementing-role-based-permission/

 

I have also looked at achieving this through a Flow using the information in this thread:

https://powerusers.microsoft.com/t5/General-Discussion/Role-based-security-groups-in-Powerapps-using...
Is this the correct way to produce HTTP requests from Powerapps?

As a sidenote, during the App Registration Step in the Azure Portal I have given the following API Permissions under Sharepoint:

User.Read.All

User.ReadWrite.All

I don't believe this step to be neccessary as I dont think these permissions relate to the Sharepoint REST API. Does any have more info regarding what these permissions are and what they relate to? As google has been no help.

 

Please let me know if what I am trying to achieve is possible in Powerapps and is the best/optimal way to retrieve SPO User Properties, as even the built in Sharepoint Connector cannot access user profiles.

Also are there plans to depreciate the use of the Sharepoint REST API and User Profiles in the near future? as a lot of the documentation is no longer being updated.

 

 

2 REPLIES 2
AeronC
Level: Powered On

Re: Sharepoint User Profile Details in PowerApps - SharePoint REST API

As an update to this,

the reply actually recieved when in the Powerapp is XML.

I know the Sharepoint REST API defaults to XML, but why am I seeing a different result compared to when testing the connector in the powerapps edit connector screen?

 

<?xml version="1.0" encoding="utf-8"?>
<d:DisplayName xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
Aeron Campbell
</d:DisplayName>

Why does powerapps not supply the correct ACCEPT HTTP header with the request?

 

 

Highlighted
DeeTronSEAM
Level: Powered On

Re: Sharepoint User Profile Details in PowerApps - SharePoint REST API

@AeronC I hope this reply doesn't get your hopes up, but I wanted to tell you two things:

 

1) Your post has to be one of the most clear and well-laid out (and pre-researched before asking) posts I've seen in these forums.  I wish people did such a good job explaining their problem (and what they've tried already).

 

2) I am getting a "The data returned in the response is invalid" error in PowerApps from a Flow I built (which calls the MS Graph API).  I get the expected returned JSON back into PApps but PApps still compains and I cannot figure out why?

 

So, even though I am not using a custom connector (I'm using the Action menu in PApps to bind to my Flow), I'm doubly disappointed that there has been no answers to your post.  I.e. not only do you deserve one, but it might shed some light on my problem.  Best wishes!

Helpful resources

Announcements
thirdimage

Power Automate Community User Group Member Badge

Fill out a quick form to claim your user group badge now!

sixthImage

Power Platform World Tour

Find out where you can attend!

Power Platform 2019 release wave 2 plan

Power Platform 2019 release wave 2 plan

Features releasing from October 2019 through March 2020

fifthimage

Microsoft Learn

Learn how to build the business apps that you need.

Top Kudoed Authors
Users Online
Currently online: 331 members 6,246 guests
Please welcome our newest community members: