Recuperar propiedades de perfil de usuario usando el modelo de objetos de cliente .NET en SharePoint

Aprenda a recuperar propiedades de perfil de usuario mediante programación usando el modelo de objetos de cliente .NET de SharePoint.

¿Qué son las propiedades de perfil de usuario en 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.

El objeto PeopleManager incluye los métodos siguientes que puede usar para recuperar propiedades de usuario y propiedades de perfil de usuario mediante el modelo de objetos de cliente de .NET:

Las propiedades de perfil de usuario de las API de cliente son de solo lectura (excepto la imagen de perfil, que se puede cambiar mediante el método PeopleManager.SetMyProfilePicture ). Si quiere cambiar otras propiedades de perfil de usuario, tiene que usar el modelo de objetos de servidor.

Nota:

La versión de cliente del objeto UserProfile no contiene todas las propiedades de usuario como versión del lado servidor. Pero la versión del lado cliente proporciona los métodos necesarios para crear un sitio personal para el usuario actual. Si quiere recuperar el objeto UserProfile del lado cliente para el usuario actual, use el método ProfileLoader.GetUserProfile.

Para obtener más información sobre cómo trabajar con perfiles, vea Trabajar con perfiles de usuario en 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 SharePoint

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:

  • SharePoint con perfiles creados para el usuario actual y un usuario de destino

  • Visual 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.

Nota:

Si no está desarrollando en el equipo que ejecuta SharePoint, obtenga la descarga componentes de cliente de SharePoint que contiene ensamblados de cliente de SharePoint.

Crear la aplicación de consola que recupera las propiedades de perfil de usuario mediante el modelo de objetos de cliente de .NET de SharePoint

  1. En el PC de desarrollo, abra Visual Studio y elija Archivo, Nuevo, Proyecto.

  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.

  3. En las plantillas del proyecto, elija Windows y luego elija Aplicación de consola.

  4. Ponga al proyecto el nombre CSOMPerfilesDeUsuario y luego elija el botón Aceptar.

  5. Agregue referencias a los ensamblados siguientes:

  • Microsoft.SharePoint.Client
  • Microsoft.SharePoint.ClientRuntime
  • Microsoft.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.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";

Nota: Recuerde reemplazar los valores de http://serverName/ marcador de posición y domainName\\\\userName antes de ejecutar el código.

  1. Inicialice el contexto de cliente de SharePoint, como se muestra en el código siguiente.
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.
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.

  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.
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.

Sugerencia: Para reducir el tráfico de red, solicite solo las propiedades con las que quiere trabajar al llamar al método Load. 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.

  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.
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 SharePoint

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.

Nota:

Reemplace los valores de http://serverName/ marcador de posición y domainName\\\\userName antes de ejecutar el código.


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 SharePoint

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.


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 SharePoint

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.

Nota:

Para recuperar el valor de una sola propiedad de perfil de usuario, use el método GetUserProfilePropertyFor .

A diferencia del ejemplo de código anterior que recupera un objeto PersonProperties para el usuario de destino, este ejemplo llama al método PeopleManager.GetUserProfilePropertiesFor y pasa un objeto UserProfilePropertiesForUser que especifica el usuario de destino y las propiedades del perfil de usuario que se van a recuperar. GetUserProfilePropertiesFor devuelve una colección de cadenas> IEnumerable< que contiene los valores de las propiedades que especifique.

Nota:

Reemplace los valores de http://serverName/ marcador de posición y domainName\\\\userName antes de ejecutar el código.


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én