Recuperar propiedades de perfil de usuario mediante el modelo de objetos de JavaScript en SharePoint

Obtenga información para la recuperación de propiedades de usuario y propiedades de perfil de usuario mediante programación con el modelo de objetos de JavaScript de SharePoint.

Qué son las propiedades de usuario y las propiedades de perfil de usuario de SharePoint

Las propiedades de usuario y las propiedades de perfil de usuario proporcionan información sobre los usuarios de SharePoint, como nombre para mostrar, correo electrónico, tratamiento y otra información empresarial y personal. En las API de cliente, el acceso a estas propiedades se realiza desde el objeto PersonProperties y su propiedad userProfileProperties. La propiedad userProfileProperties contiene todas las propiedades de perfil de usuario, pero el objeto PersonProperties contiene las propiedades de uso común (como accountName, displayName y email) cuyo acceso es más sencillo.

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 JavaScript:

Las propiedades de perfil de usuario de las API cliente son de solo lectura (excepto la imagen del 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. Para obtener más información sobre el trabajo con perfiles de usuario, consulte Trabajar con perfiles de usuario en SharePoint.

Nota:

El objeto de cliente UserProfile no contiene todas las propiedades de usuario que tiene la versión de servidor. No obstante, la versión de cliente proporciona los métodos para crear un sitio personal para el usuario actual. Para recuperarlo, use el método ProfileLoader.getUserProfile.

Requisitos previos para configurar el entorno de desarrollo a fin de recuperar propiedades de usuario mediante el modelo de objetos de JavaScript de SharePoint

Para crear una página de la aplicación que use el modelo de objetos de JavaScript para recuperar las propiedades de usuario, necesitará:

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

  • Visual Studio 2012

  • Office Developer Tools para Visual Studio 2013

  • Permisos de conexión Control total para obtener acceso a la aplicación del servicio Perfil de usuario del usuario actual

Crear la página de aplicación en Visual Studio 2012

  1. En el servidor en el que se ejecuta SharePoint, abra Visual Studio y elija Archivo, Nuevo y Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, elija .NET Framework 4.5 en la lista desplegable situada en la parte superior del cuadro de diálogo.

  3. En la lista Plantillas, expanda Office/SharePoint, elija la categoría Soluciones de SharePoint y luego la plantilla Proyecto de SharePoint.

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

  5. En el cuadro de diálogo Asistente para la personalización de SharePoint, escriba la dirección URL del sitio de SharePoint de destino, elija Implementar como solución de granja de servidores y luego el botón Finalizar.

  6. En el Explorador de soluciones, abra el menú contextual del proyecto UserProfilesJSOM y agregue una carpeta asignada "Layouts" de SharePoint.

  7. En la carpeta Diseños, abra el menú contextual de la carpeta UserProfilesJSOM y agregue una nueva página de aplicación de SharePoint llamada UserProfiles.aspx.

    Nota: En los ejemplos de código de este artículo se define el código personalizado del marcado de página, pero no se usa el archivo de clase de código subyacente que crea Visual Studio para la página.

  8. Abra el menú contextual de la página UserProfiles.aspx y elija Establecer como elemento de inicio.

  9. En el marcado de la página UserProfiles.aspx, pegue el siguiente código dentro de las etiquetas "Main" asp:Content. Este código agrega un control span que muestra los resultados de la consulta, los controles SharePoint:ScriptLink que hacen referencia a los archivos de la biblioteca de clases de JavaScript de SharePoint y las etiquetas script que van a contener la lógica personalizada.

<span id="results"></span><br />
<SharePoint:ScriptLink ID="ScriptLink1" name="SP.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:ScriptLink ID="ScriptLink2" name="SP.UserProfiles.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<script type="text/javascript">
    // Replace this comment with the code for your scenario.
</script>
  1. Para agregar lógica para recuperar propiedades de perfil de usuario, sustituya el comentario entre las etiquetas script por el ejemplo de código de uno de los siguientes escenarios:
  1. Para probar la página de aplicación, en la barra de menús, elija Depurar, Iniciar depuración. Si se le pide que modifique el archivo web.config, elija el botón Aceptar.

Ejemplo de código: recuperación de propiedades de perfil de usuario del objeto PersonProperties y su propiedad userProfileProperties en el modelo de objetos de JavaScript de SharePoint.

En el siguiente ejemplo de código se muestra cómo obtener propiedades de perfil de usuario de un usuario de destino mediante consulta al objeto PersonProperties y su propiedad userProfileProperties. Muestra cómo:

Nota:

Pegue el código siguiente entre las etiquetas script que agregó al archivo UserProfiles.aspx en el procedimiento Crear la página de aplicación. Reemplace el valor del marcador de posición domainName\\userName antes de ejecutar el código (en este ejemplo de código no se usa el archivo de clase de código subyacente).


var personProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Get user properties for the target user.
    // To get the PersonProperties object for the current user, use the
    // getMyProperties method.
    personProperties = peopleManager.getPropertiesFor(targetUser);

    // Load the PersonProperties object and send the request.
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

    // Get a property directly from the PersonProperties object.
    var messageText = " \\"DisplayName\\" property is "
        + personProperties.get_displayName();

    // Get a property from the UserProfileProperties property.
    messageText += "<br />\\"Department\\" property is "
        + personProperties.get_userProfileProperties()['Department'];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

Ejemplo de código: recuperar un conjunto de propiedades de perfil de usuario con el método getUserProfilePropertiesFor en el modelo de objetos de JavaScript de SharePoint

En el siguiente ejemplo de código se recuperan los valores de un conjunto especificado de propiedades de perfil de usuario de un usuario de destino mediante el método getUserProfilePropertiesFor. Muestra cómo:

  • Crear un objeto UserProfilePropertiesForUser que especifica el usuario de destino y las propiedades de perfil de usuario que se van a recuperar. En este ejemplo se obtienen las propiedades PreferredName y Department.

  • Obtener los valores de las propiedades especificadas mediante el método getUserProfilePropertiesFor y el paso del objeto UserProfilePropertiesForUser. (Para recuperar el valor de una única propiedad de perfil de usuario, use el método getUserProfilePropertyFor).

  • Obtener los valores de la matriz devuelta de valores de propiedad.

Nota:

Pegue el código siguiente entre las etiquetas script que agregó al archivo UserProfiles.aspx en el procedimiento Crear la página de aplicación. Reemplace el valor del marcador de posición domainName\\\\userName antes de ejecutar el código (en este ejemplo de código no se usa el archivo de clase de código subyacente).


var userProfileProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Specify the properties to retrieve and target user for the 
    // UserProfilePropertiesForUser object.
    var profilePropertyNames = ["PreferredName", "Department"];
    var userProfilePropertiesForUser = 
        new SP.UserProfiles.UserProfilePropertiesForUser(
            clientContext,
            targetUser,
            profilePropertyNames);

    // Get user profile properties for the target user.
    // To get the value for only one user profile property, use the
    // getUserProfilePropertyFor method.
    userProfileProperties = peopleManager.getUserProfilePropertiesFor(
        userProfilePropertiesForUser);

    // Load the UserProfilePropertiesForUser object and send the request.
    clientContext.load(userProfilePropertiesForUser);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {
    var messageText = "\\"PreferredName\\" property is " 
        + userProfileProperties[0];
    messageText += "<br />\\"Department\\" property is " 
        + userProfileProperties[1];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

Vea también