Written by

Arut Selvan

Share

  

Category

see all categories
Request Demo

Update SharePoint Online User Profile properties using SPFx

SharePoint is a content collaboration platform where we can able to create, share the contents. The user profile service applications are used in managing the user profiles inside SharePoint tenant. User Profile services uses data from the Active Directory Services and keeps the user data and AD user data in sync. SharePoint Online has 80+ default User Profile properties. To update the values of User Profile properties, SharePoint has no explicit place rather than the SharePoint Admin center and Delve. Delve is limited to some of the User Profile properties and it is not allowing properties created by the user to be edited.

SPFx is the new Microsoft Office development framework which is used in building customized applications. SPFx applications is installed on the SharePoint site and it will run in the SharePoint user context. So, it is very easy to integrate it with the SharePoint environment. SharePoint has exposed its APIs which is helpful in working closer with its environment. In this article, you can able to update your user profile data.

Prerequisite:

Our first thing is to configure the development environment. You can follow here to create and deploy SPFx webparts. After configuring follow the below steps to update the User Profile properties using SPFx.

leaderboard

 

User Profile Properties:

There are lot of user properties and user profile properties in SharePoint Online site. Before starting with you have to know about what are all the user profile properties available in SharePoint. Below is the list of user profile properties.

AboutMe
- SPS-LastKeywordAdded
- AccountName
- SPS-Locale
- ADGuid
- SPS-Location
- Assistant
- SPS-MasterAccountName
- CellPhone
- SPS-MemberOf
- Department
- SPS-MUILanguages
- EduExternalSyncState
- SPS-MySiteUpgrade
- EduOAuthTokenProviders
- SPS-O15FirstRunExperience
- EduPersonalSiteState
- SPS-ObjectExists
- EduUserRole
- SPS-OWAUrl
- Fax
- SPS-PastProjects
- FirstName
- SPS-Peers
- HomePhone
- SPS-PersonalSiteCapabilities
- LastName
- SPS-PersonalSiteInstantiationState
- Manager
- SPS-PhoneticDisplayName
- Office
- SPS-PhoneticFirstName
- PersonalSpace
- SPS-PhoneticLastName
- PictureURL
- SPS-PrivacyActivity
- PreferredName
- SPS-PrivacyPeople
- PublicSiteRedirect
- SPS-ProxyAddresses
- QuickLinks
- SPS-RegionalSettings-FollowWeb
- SID
- SPS-RegionalSettings-Initialized
- SISUserId
- SPS-ResourceAccountName
- SPS-AdjustHijriDays
- SPS-ResourceSID
- SPS-AltCalendarType
- SPS-Responsibility
- SPS-Birthday
- SPS-SavedAccountName
- SPS-CalendarType
- SPS-SavedSID
- SPS-ClaimID
- SPS-School
- SPS-ClaimProviderID
- SPS-ShowWeeks
- SPS-ClaimProviderType
- SPS-SipAddress
- SPS-ContentLanguages
- SPS-Skills
- SPS-DataSource
- SPS-SourceObjectDN
- SPS-Department
- SPS-StatusNotes
- SPS-DisplayOrder
- SPS-Time24
- SPS-DistinguishedName
- SPS-TimeZone
- SPS-DontSuggestList
- SPS-UserPrincipalName
- SPS-Dotted-line
- SPS-WorkDayEndHour
- SPS-EmailOptin
- SPS-WorkDayStartHour
- SPS-FeedIdentifier
- SPS-WorkDays
- SPS-FirstDayOfWeek
- Title
- SPS-FirstWeekOfYear
- UserName
- SPS-HashTags
- UserProfile_GUID
- SPS-HireDate
- WebSite
- SPS-Interests
- WorkEmail
- SPS-JobTitle
- WorkPhone
- SPS-LastColleagueAdded

Some of these properties are read-only by default. Also, admins can able to mark these properties read-only. To read the properties from SharePoint you can use the below API Endpoint.

To get all user properties for current user:

https://<your_site_collection_url>/_api/SP.UserProfiles.PeopleManager/GetMyProperties

To get the user profile properties for specific user

https://<your_site_collection_url>/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|username@yourtenant.onmicrosoft.com'

To get all the user profiles property for a single specific user:

https://<your_site_collection_url>/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor(accountName=@v, propertyName='<property_name>')?@v='i:0%23.f|membership|username@yourtenant.onmicrosoft.com'

User profile properties are classified as single and multi-valued. For example, WorkEmail is a single valued property and the SPS-School is a multi-valued property. To update these kinds of values we are going to use the below API end points

https://<your_site_collection_url>/_api/SP.UserProfiles.PeopleManager/SetSingleValueProfileProperty

 https://<your_site_collection_url>/_api/SP.UserProfiles.PeopleManager/SetMultiValuedProfileProperty

SPFX application to interact with User Profile properties:

            In our SPFx application, we are going to have a text box to get the property name input from the user. Then a get button to perform the get operation which gets the current value from the User Profile.

Then, an update button which updates the value of the user profile property which we have chosen.

sharepoint user profile

Below is the code snippet to get the user profile property which is chosen through textbox.

private getValue() {

    let pptName: any = this.domElement.querySelector('#txtPropertyName');

    this.propertyName = pptName.value;

    let apiUrl = this.context.pageContext.web.absoluteUrl +

      "/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor(accountName=@v, propertyName='" +

      this.propertyName + "')?@v='" + encodeURIComponent("i:0#.f|membership|") + this.userdetails.loginName + "'";

    let httpClient: SPHttpClient = this.context.spHttpClient;

    httpClient.get(apiUrl, SPHttpClient.configurations.v1).then(response => {

      response.json().then(responseJson => {

        let newValue: any = this.domElement.querySelector('#txtPropertyValue');

        newValue.value = responseJson.value;

      });

    });

  }

Below is the code snippet to update the user profile property value. I am differentiating the multi value and single valued property’s using a separator “|”. So if you want to update a multivalued property using this below code, make sure that you have given “|” at the suffix like this “Engineering|”.

private updateValue() {

    let newValue: any = this.domElement.querySelector('#txtPropertyValue');

    this.value = newValue.value;

    if (this.value.indexOf("|") !== -1) {

      this.updateMultiUPValue();

    }

    else {

      this.updateSingleUPValue();

    }

  }

  updateMultiUPValue() {

    let apiUrl = this.context.pageContext.web.absoluteUrl + "/_api/SP.UserProfiles.PeopleManager/SetMultiValuedProfileProperty";

    let userData = {

      'accountName': "i:0#.f|membership|" + this.userdetails.loginName,

      'propertyName': this.propertyName, //can also be used to set custom single value profile properties

      'propertyValues': this.value.split("|")

    }

    let httpClient: SPHttpClient = this.context.spHttpClient;

    let spOpts = {

      headers: {

        'Accept': 'application/json;odata=nometadata',

        'Content-type': 'application/json;odata=verbose',

        'odata-version': '',

      },

      body: JSON.stringify(userData)

    };

    httpClient.post(apiUrl, SPHttpClient.configurations.v1, spOpts).then(response => {

      alert("Updated");

    });

  }

  updateSingleUPValue() {

    let apiUrl = this.context.pageContext.web.absoluteUrl + "/_api/SP.UserProfiles.PeopleManager/SetSingleValueProfileProperty";

    let userData = {

      'accountName': "i:0#.f|membership|" + this.userdetails.loginName,

      'propertyName': this.propertyName, //can also be used to set custom single value profile properties

      'propertyValue': this.value

    }

    let httpClient: SPHttpClient = this.context.spHttpClient;

    let spOpts = {

      headers: {

        'Accept': 'application/json;odata=nometadata',

        'Content-type': 'application/json;odata=verbose',

        'odata-version': '',

      },

      body: JSON.stringify(userData)

    };

    httpClient.post(apiUrl, SPHttpClient.configurations.v1, spOpts).then(response => {

      alert("Updated");

    });

  }

I hope you have understood how to update user profile properties using SPFx and Rest API. Don’t hesitate to post your thoughts and doubts in the comment box below.

Happy SharePointing!!!

Arut Selvan

Written by Arut Selvan

A technology enthusiast keen in learning & exploring new Microsoft technologies. Predominantly working on Microsoft 365, SharePoint & Azure. Currently working with "Hubfly - A unified digital workplace" as a Product Engineer, Arut brings in the new flavors of the technology to the product. He ensures we are always on the edge in our technology stack. He brings in innovation to the product with his out of the box thinking. He is also a Microsoft certified professional.