Recuperar propiedades de perfil de usuario usando el modelo de objetos de cliente .NET en SharePointRetrieve user profile properties by using the .NET client object model in SharePoint

Aprenda a recuperar propiedades de perfil de usuario mediante programación usando el modelo de objetos de cliente .NET de SharePoint.Learn how to retrieve user profile properties programmatically by using the SharePoint .NET client object model.

¿Qué son las propiedades de perfil de usuario en SharePoint?What are user profile properties in SharePoint?

Las propiedades de usuario y las propiedades de perfil de usuario ofrecen información sobre los usuarios de SharePoint, como el nombre para mostrar, el correo electrónico, el puesto y otros datos personales y de negocios. En las API del lado cliente, se obtiene acceso a estas propiedades desde el objeto PersonProperties y su propiedad UserProfileProperties . La propiedad UserProfileProperties contiene todas las propiedades de perfil de usuario, pero el objeto PersonProperties contiene propiedades usadas habitualmente (como AccountName , DisplayName y Email ) que son de más fácil acceso.User properties and user profile properties provide information about SharePoint users, such as display name, email, title, and other business and personal information. In client-side APIs, you access these properties from the PersonProperties object and its UserProfileProperties property. The UserProfileProperties property contains all user profile properties, but the PersonProperties object contains commonly used properties (such as AccountName , DisplayName , and Email ) that are easier to access.

El objeto PeopleManager incluye los siguientes métodos que se pueden usar para recuperar propiedades de usuario y propiedades de perfil de usuario usando el modelo de objetos .NET:The PeopleManager object includes the following methods that you can use to retrieve user properties and user profile properties by using the .NET client object model:

Las propiedades de perfil de usuario de las API de cliente son de solo lectura (excepto la imagen de perfil, que se puede cambiar usando el método PeopleManager.SetMyProfilePicture ). Si quiere cambiar otras propiedades de perfil de usuario, tiene que usar el modelo de objetos de servidor.User profile properties from client APIs are read-only (except the profile picture, which you can change by using the PeopleManager.SetMyProfilePicture method). If you want to change other user profile properties, you must use the server object model.

Nota

La versión del cliente del objeto UserProfile no contiene todas las propiedades de usuario que incluye la versión del lado servidor.The client version of the UserProfile object doesn't contain all of the user properties as the server-side version. Pero la versión del lado cliente proporciona los métodos necesarios para crear un sitio personal para el usuario actual.However, the client-side version does provide the methods for creating a personal site for the current user. Si quiere recuperar el objeto UserProfile del lado cliente para el usuario actual, use el método ProfileLoader.GetUserProfile.To retrieve the client-side UserProfile for the current user, use the ProfileLoader.GetUserProfile method.

Para obtener más información sobre cómo trabajar con perfiles, vea Work with user profiles in SharePoint (Trabajar con perfiles de usuario de SharePoint).For more information about working with profiles, see Work with user profiles in SharePoint.

Requisitos previos de configuración del entorno de desarrollo para recuperar propiedades de perfil de usuario usando el modelo de objetos de cliente .NET de SharePointPrerequisites for setting up your development environment to retrieve user profile properties by using the SharePoint .NET client object model

Para crear una aplicación de consola que usa el modelo de objetos de cliente de .NET para recuperar las propiedades de los perfiles de usuario, necesitará lo siguiente:To create a console application that uses the .NET client object model to retrieve user profile properties, you'll need the following:

  • SharePoint con perfiles creados para el usuario actual y un usuario de destinoSharePoint with profiles created for the current user and a target user

  • Visual Studio 2012Visual Studio 2012

  • Permisos de conexión de control total para tener acceso a la aplicación de servicio de perfiles de usuario del usuario actual.Full Control connection permissions to access the User Profile service application for the current user.

Nota

Si no está desarrollando en el equipo que ejecuta SharePoint, descargue los Componentes de cliente de SharePoint que contienen los ensamblados de cliente de SharePoint.If you're not developing on the computer that is running SharePoint, get the SharePoint Client Components download that contains SharePoint client assemblies.

Crear la aplicación de consola que recupera las propiedades de perfil de usuario mediante el modelo de objetos de cliente de .NET de SharePointCreate the console application that retrieves user profile properties by using the SharePoint .NET client object model

  1. En el PC de desarrollo, abra Visual Studio y elija Archivo, Nuevo, Proyecto.On your development computer, open Visual Studio and choose File, New, Project.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 4.5 en la lista desplegable situada en la parte superior del cuadro de diálogo.In the New Project dialog box, choose .NET Framework 4.5 from the drop-down list at the top of the dialog box.

  3. En las plantillas del proyecto, elija Windows y luego elija Aplicación de consola.From the project templates, choose Windows, and then choose Console Application.

  4. Ponga al proyecto el nombre CSOMPerfilesDeUsuario y luego elija el botón Aceptar.Name the project UserProfilesCSOM, and then choose the OK button.

  5. Agregue referencias a los ensamblados siguientes:Add references to the following assemblies:

  • Microsoft.SharePoint.ClientMicrosoft.SharePoint.Client
  • Microsoft.SharePoint.ClientRuntimeMicrosoft.SharePoint.ClientRuntime
  • Microsoft.SharePoint.Client.UserProfilesMicrosoft.SharePoint.Client.UserProfiles
  1. En el método Main, defina variables para la dirección URL del servidor y el nombre de usuario de destino, como se muestra en el código siguiente.In the Main method, define variables for the server URL and the target user name, as shown in the following code.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";

Nota: Recuerde reemplazar los valores de marcador de posición http://serverName/ y domainName\\\\userName antes de ejecutar el código.Note: Remember to replace the http://serverName/ and domainName\\\\userName placeholder values before you run the code.

  1. Inicialice el contexto de cliente de SharePoint, como se muestra en el código siguiente.Initialize the SharePoint client context, as shown in the following code.
ClientContext clientContext = new ClientContext(serverUrl);
  1. Obtenga las propiedades del usuario de destino a partir del objeto PeopleManager, tal como se ve en el código siguiente.Get the target user's properties from the PeopleManager object, as shown in the following code.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);

El objeto personProperties es un objeto de cliente. Algunos objetos de cliente no contienen datos hasta que se inicializan. Por ejemplo, no se puede obtener acceso a los valores de propiedad del objeto personProperties hasta que se inicializa. Si intenta obtener acceso a una propiedad antes de inicializarla, recibirá la excepción PropertyOrFieldNotInitializedException.The personProperties object is a client object. Some client objects contain no data until they are initialized. For example, you cannot access the property values of the personProperties object until you initialize it. If you try to access a property before it is initialized, you receive a PropertyOrFieldNotInitializedException exception.

  1. Para inicializar el objeto personProperties, registre la solicitud que quiere ejecutar y luego ejecute la solicitud en el servidor, como se ve en el código siguiente.To initialize the personProperties object, register the request that you want to run, and then run the request on the server, as shown in the following code.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();

Al llamar al método Load (o al método LoadQuery), se pasa el objeto que se quiere recuperar o cambiar. En este ejemplo, la llamada al método Load pasa parámetros opcionales para filtrar la solicitud. Los parámetros son expresiones lambda que solicitan solo la propiedad AccountName y la propiedad UserProfileProperties del objeto personProperties.When you call the Load method (or the LoadQuery method), you pass in the object that you want to retrieve or change. In this example, the call to the Load method passes in optional parameters to filter the request. The parameters are lambda expressions that request only the AccountName property and UserProfileProperties property of the personProperties object.

Sugerencia: Para reducir el tráfico de red, solicite solo las propiedades con las que quiere trabajar al llamar al método Load.Tip: To reduce network traffic, request only the properties that you want to work with when you call the Load method. Además, si va a trabajar con varios objetos, agrupe varias llamadas en el método Load siempre que sea posible antes de llamar al método ExecuteQuery.In addition, if you're working with multiple objects, group multiple calls to the Load method when possible before you call the ExecuteQuery method.

  1. Itere en las propiedades del perfil de usuario y lea el nombre y el valor de cada propiedad, como se muestra en el código siguiente.Iterate through the user profile properties and read the name and value of each property, as shown in the following code.
foreach (var property in personProperties.UserProfileProperties)
{
    Console.WriteLine(string.Format("{0}: {1}", 
        property.Key.ToString(), property.Value.ToString()));
}

Ejemplo de código: recuperar todas las propiedades de perfil de usuario usando el modelo de objetos de cliente .NET de SharePointCode example: Retrieving all user profile properties by using the SharePoint .NET client object model

En el siguiente ejemplo de código se ve cómo recuperar e iterar todas las propiedades de perfil de usuario de un usuario de destino, como se describe en el proceso anterior.The following code example shows how to retrieve and iterate through all the user profile properties of a target user, as described in the previous procedure.

Nota

Reemplace los valores de marcador de posición http://serverName/ y domainName\\\\userName antes de ejecutar el código.Replace the http://serverName/ and domainName\\\\userName placeholder values before you run the code.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;

namespace UserProfilesCSOM
{
    class Program
    {
        static void Main(string[] args)
        {

            // Replace the following placeholder values with the target SharePoint site and
            // target user.
            const string serverUrl = "http://serverName/";  
            const string targetUser = "domainName\\\\userName";  

            // Connect to the client context.
            ClientContext clientContext = new ClientContext(serverUrl);

            // Get the PeopleManager object and then get the target user's properties.
            PeopleManager peopleManager = new PeopleManager(clientContext);
            PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);

            // Load the request and run it on the server.
            // This example requests only the AccountName and UserProfileProperties
            // properties of the personProperties object.
            clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
            clientContext.ExecuteQuery();

            foreach (var property in personProperties.UserProfileProperties)
            {
                Console.WriteLine(string.Format("{0}: {1}", 
                    property.Key.ToString(), property.Value.ToString()));
            }
            Console.ReadKey(false);

            // TODO: Add error handling and input validation.
        }
    }
}

Ejemplo de código: recuperar las propiedades de perfil de usuario de las personas que me siguen mediante el modelo de objetos de cliente de .NET de SharePointCode example: Retrieving user profile properties of people who are following me by using the SharePoint .NET client object model

El siguiente ejemplo de código muestra cómo obtener, en una Complemento de SharePoint, las propiedades de perfiles de usuario de personas que le siguen.The following code example shows how to get, in a SharePoint Add-in, the user profile properties of people who are following you.


string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);

if (contextTokenString != null)
{
    Uri sharepointUrl = new Uri(Request.QueryString["SP.Url"]);

    ClientContext clientContext = TokenHelper.GetClientContextWithContextToken(sharepointUrl.ToString(), contextTokenString, Request.Url.Authority);

    PeopleManager peopleManager = new PeopleManager(clientContext);
    ClientObjectList<PersonProperties> peopleFollowedBy = peopleManager.GetMyFollowers();
    clientContext.Load(peopleFollowedBy, people => people.Include(person => person.PictureUrl, person => person.DisplayName));
    clientContext.ExecuteQuery();

    foreach (PersonProperties personFollowedBy in peopleFollowedBy)
    {
        if (!string.IsNullOrEmpty(personFollowedBy.PictureUrl))
        {
        Response.Write("<img src=\\"" + personFollowedBy.PictureUrl + "\\" alt=\\"" + personFollowedBy.DisplayName + "\\"/>");
        }
    }
    clientContext.Dispose();
}

Ejemplo de código: recuperar un conjunto de propiedades de perfil de usuario usando el modelo de objetos de cliente .NET de SharePointCode example: Retrieving a set of user profile properties by using the SharePoint .NET client object model

En el siguiente ejemplo de código se muestra cómo recuperar un conjunto específico de propiedades de perfil de un usuario de destino.The following code example shows how to retrieve a specific set of user profile properties for a target user.

Nota

Para recuperar el valor de una sola propiedad de perfil de usuario, use el método GetUserProfilePropertyFor.To retrieve the value for only one user profile property, use the GetUserProfilePropertyFor method.

A diferencia del ejemplo de código anterior, que recupera un objeto PersonProperties para el usuario de destino, en este ejemplo se llama al método PeopleManager.GetUserProfilePropertiesFor y se pasa un objeto UserProfilePropertiesForUser que especifica el usuario de destino y las propiedades de perfil de usuario que hay que recuperar. GetUserProfilePropertiesFor devuelve una colección IEnumerable que contiene los valores de las propiedades que especifique.Unlike the previous code example that retrieves a PersonProperties object for the target user, this example calls the PeopleManager.GetUserProfilePropertiesFor method and passes in a UserProfilePropertiesForUser object that specifies the target user and the user profile properties to retrieve. GetUserProfilePropertiesFor returns an IEnumerable collection that contains the values of the properties that you specify.

Nota

Reemplace los valores de marcador de posición http://serverName/ y domainName\\\\userName antes de ejecutar el código.Replace the http://serverName/ and domainName\\\\userName placeholder values before you run the code.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;

namespace UserProfilesCSOM
{
    class Program
    {
        static void Main(string[] args)
        {

            // Replace the following placeholder values with the target SharePoint site and the
            // target user.
            const string serverUrl = "http://serverName/";  
            const string targetUser = "domainName\\\\userName";  

            // Connect to the client context.
            ClientContext clientContext = new ClientContext(serverUrl);

            // Get the PeopleManager object.
            PeopleManager peopleManager = new PeopleManager(clientContext);

            // Retrieve specific properties by using the GetUserProfilePropertiesFor method. 
            // The returned collection contains only property values.
            string[] profilePropertyNames = new string[] { "PreferredName", "Department", "Title" };
            UserProfilePropertiesForUser profilePropertiesForUser = new UserProfilePropertiesForUser(
                clientContext, targetUser, profilePropertyNames);
            IEnumerable<string> profilePropertyValues = peopleManager.GetUserProfilePropertiesFor(profilePropertiesForUser);

            // Load the request and run it on the server.
            clientContext.Load(profilePropertiesForUser);
            clientContext.ExecuteQuery();

            // Iterate through the property values.
            foreach (var value in profilePropertyValues)
            {
                Console.Write(value + "\\n");
            }
            Console.ReadKey(false);

            // TO DO: Add error handling and input validation.
        }
    }
}

Vea tambiénSee also