How to Get a Particular User's Properties Using CSOM in SharePoint 2013

In this article we will see how to programmatically get a particular user's properties using CSOM in SharePoint 2013.
 
Introduction

In SharePoint 2010 using the client-side object model we will be unable to retrieve the user profile properties whereas in SharePoint 2013 they have added a new assembly for user profile service. Using Microsoft.SharePoint.Client.UserProfiles.dll located in the 15 hive ISAPI folder we are able to retrieve the user profile properties using CSOM.

(Client-Side Object Model). In this article we will see how to programmatically get a particular user's properties using CSOM in SharePoint 2013.

Prerequisites

The following are the prerequisites:

  1. SharePoint 2013.
  2. Visual Studio 2012.
  3. User Profile Service application provisioned.
  4. User profiles should be created.

I have created a user profile whose account name is "Pai". In this article we will see how to retrieve the user properties (Account Name, Display Name and Work Email) for the user "Pai" using the Client-side Object Model.
 
Creating the application

Create a console application in Visual Studio 2012 using the following procedure:

  1. Open Visual Studio 2012 (Run as administrator).
     
  2. Go to "File" => "New" => "Project...".
     
  3. Select "Console Application" in the "Visual C#" node from the installed templates.

    CSOM-in-SharePoint-1.jpg
     
  4. Enter the Name and click on "Ok".
     
  5. In the Solution Explorer, right-click on the "References" folder and then click on "Add Reference".
     
  6. Add the following assemblies from the 15 hive (C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI).

        a.  Microsoft.SharePoint.Client.dll
        b.  Microsoft.SharePoint.Client.Runtime.dll
        c.  Microsoft.SharePoint.Client.UserProfiles.dll
     
  7. Open Program.cs file and replace the code with the following:
     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using Microsoft.SharePoint.Client;

    using Microsoft.SharePoint.Client.UserProfiles;

     

    namespace UserProfileService

    {

       class Program

        {

           static void Main(string[] args)

            {

                //// String Variable to store the siteURL

               string siteURL = "http://c4968397007:3695/";

     

                //// String Variable to store the account name

               string accountName ="Pai";

     

                //// To get the context of the SharePoint site to access the data

                ClientContext clientContext = new ClientContext(siteURL);

     

                //// PeopleManager class provides the methods for operations related to people

                PeopleManager peopleManager = new PeopleManager(clientContext);

     

                //// PersonProperties class is used to represent the user properties

                //// GetPropertiesFor method is used to get the user properties for a particular user

                PersonProperties personProperties = peopleManager.GetPropertiesFor(accountName);

                clientContext.Load(personProperties, p => p.AccountName, p => p.Email, p => p.DisplayName);

                clientContext.ExecuteQuery();

     

                //// Display the user profile properties - AccountName, Email,  DisplayName

               Console.WriteLine("Account Name: " + personProperties.AccountName);

               Console.WriteLine("Email: " + personProperties.Email);

               Console.WriteLine("Display Name: " + personProperties.DisplayName);

               Console.ReadLine();

            }

        }

    } 

Note

In the code snippet the ExecuteQuery() method sends the request to the server until the ExecuteQuery() method is called; only the requests are registered by the application. The Load() method does not actually load anything; the loading occurs only when the ExecuteQuery() method is called, it specifies the property values that should be loaded for the object. In the Load() method lamda expressions are used to specify which property should be loaded instead of loading all the properties.
 
Run the console application

Hit F5. The output will be displayed as shown below :

CSOM-in-SharePoint-2.jpg

Summary

Thus in this article we have seen programmatically how to get a particular user's properties using CSOM in SharePoint 2013.