Procédure : Récupérer les propriétés de profil utilisateur à l’aide du modèle objet client .NET dans SharePoint
Découvrez comment récupérer des propriétés de profil utilisateur par programme à l'aide du modèle objet client .NET SharePoint.
À quoi correspondent les propriétés de profil utilisateur dans SharePoint ?
Les propriétés utilisateur et les propriétés de profil utilisateur fournissent des informations sur les utilisateurs SharePoint, telles que le nom d'affichage, l'adresse de messagerie, la fonction et d'autres informations professionnelles et personnelles. Dans les API côté client, vous pouvez accéder à ces propriétés à partir de l'objet PersonProperties et de sa propriété UserProfileProperties . La propriété UserProfileProperties contient toutes les propriétés de profil utilisateur, mais l'objet PersonProperties contient les propriétés fréquemment utilisées (telles que AccountName , DisplayName et Email ) plus faciles d'accès.
L'objet PeopleManager comprend les méthodes suivantes, que vous pouvez utiliser pour récupérer les propriétés utilisateur et les propriétés de profil utilisateur à l'aide du modèle objet client .NET :
Les méthodes GetMyProperties et GetPropertiesFor renvoient un objet PersonProperties .
Les méthodes GetUserProfilePropertiesFor et GetUserProfilePropertyFor renvoient les valeurs des propriétés de profil utilisateur que vous spécifiez.
Les propriétés de profil utilisateur provenant d'API client sont en lecture seule (à l'exception de l'image de profil, que vous pouvez modifier à l'aide de la méthode PeopleManager.SetMyProfilePicture ). Si vous souhaitez modifier d'autres propriétés de profil utilisateur, vous devez utiliser le modèle objet serveur.
Notes
La version client de l'objet UserProfile ne contient pas toutes les propriétés utilisateur de la version côté serveur. Cependant, la version côté client fournit les méthodes permettant de créer un site personnel pour l'utilisateur actuel. Pour récupérer l'objet UserProfile côté client pour l'utilisateur actuel, utilisez la méthode ProfileLoader.GetUserProfile .
Pour plus d’informations sur l’utilisation de profils, reportez-vous à l’article Utiliser les profils utilisateur dans SharePoint.
Conditions préalables à la configuration de votre environnement de développement pour récupérer les propriétés de profil utilisateur à l'aide du modèle objet client .NET SharePoint
Pour créer une application console qui utilise le modèle objet client .NET afin de récupérer les propriétés de profil utilisateur, vous aurez besoin des éléments suivants :
SharePoint avec des profils créés pour l’utilisateur actuel et un utilisateur cible
Visual Studio 2012
Autorisations de connexion Contrôle total pour accéder à l’application de service de profil utilisateur pour l’utilisateur actuel
Notes
Si vous ne réalisez pas le développement sur l’ordinateur qui exécute SharePoint, téléchargez les composants clients SharePoint qui contiennent les assemblys côté client SharePoint.
Créez l’application console qui récupère les propriétés de profil utilisateur à l’aide du modèle objet client .NET SharePoint.
Sur l'ordinateur de développement, ouvrez Visual Studio et sélectionnez Fichier, Nouveau, puis Projet.
Dans la boîte de dialogue Nouveau projet, sélectionnez .NET Framework 4.5 dans la liste déroulante située en haut.
Dans les modèles de projet, sélectionnez Windows, puis Application console.
Nommez le projet UserProfilesCSOM, puis cliquez sur le bouton OK.
Ajoutez des références aux assemblies suivants :
- Microsoft.SharePoint.Client
- Microsoft.SharePoint.ClientRuntime
- Microsoft.SharePoint.Client.UserProfiles
- Dans la méthode Main, définissez des variables pour l’URL du serveur et le nom d’utilisateur cible, comme illustré dans le code suivant.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";
Remarque : n’oubliez pas de remplacer les valeurs des espaces réservés
http://serverName/etdomainName\\\\userNameavant d’exécuter le code.
- Initialisez le contexte client SharePoint, comme illustré dans le code suivant.
ClientContext clientContext = new ClientContext(serverUrl);
- Obtenez les propriétés de l'utilisateur cible à partir de l'objet PeopleManager, comme indiqué dans le code suivant.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);
L'objet personProperties est un objet client. Certains objets clients ne contiennent aucune donnée avant leur initialisation. Par exemple, vous ne pouvez pas accéder aux valeurs de propriété de l'objet personProperties avant de l'initialiser. Si vous tentez d'accéder à une propriété avant qu'elle ne soit initialisée, vous recevez une exception PropertyOrFieldNotInitializedException.
- Pour initialiser l'objet personProperties, enregistrez la requête que vous souhaitez exécuter, puis exécutez-la sur le serveur, comme indiqué dans le code suivant.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();
Lorsque vous appelez la méthode Load (ou la méthode LoadQuery), vous transmettez l'objet que vous voulez récupérer ou modifier. Dans cet exemple, l'appel de la méthode Load transmet des paramètres facultatifs pour filtrer la demande. Les paramètres sont des expressions lambda qui demandent uniquement les propriétés AccountName et UserProfileProperties de l'objet personProperties.
Conseil : Pour réduire le trafic réseau, demandez uniquement les propriétés que vous souhaitez utiliser lorsque vous appelez la méthode Load. En outre, si vous utilisez plusieurs objets, si possible, regroupez plusieurs appels de la méthode Load avant d'appeler la méthode ExecuteQuery.
- Itérez au sein des propriétés du profil utilisateur et lisez le nom et la valeur de chaque propriété, comme illustré dans le code suivant.
foreach (var property in personProperties.UserProfileProperties)
{
Console.WriteLine(string.Format("{0}: {1}",
property.Key.ToString(), property.Value.ToString()));
}
Exemple de code : récupération de toutes les propriétés de profil utilisateur à l'aide du modèle objet client .NET SharePoint
L'exemple de code suivant montre comment récupérer et itérer toutes les propriétés de profil utilisateur d'un utilisateur cible, comme décrit dans la procédure précédente.
Notes
Remplacez les valeurs des espaces réservés http://serverName/ et domainName\\\\userName avant d’exécuter le 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.
}
}
}
Exemple de code : récupération des propriétés de profil utilisateur des personnes qui me suivent à l’aide du modèle objet client .NET SharePoint
L'exemple de code suivant montre comment obtenir, dans une Complément SharePoint, les propriétés de profil utilisateur des personnes qui vous suivent.
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();
}
Exemple de code : récupération d'un jeu de propriétés de profil utilisateur à l'aide du modèle objet client .NET SharePoint
L’exemple de code suivant montre comment récupérer un ensemble spécifique de propriétés de profil utilisateur pour un utilisateur cible.
Notes
Pour récupérer la valeur d’une seule propriété de profil utilisateur, utilisez la méthode GetUserProfilePropertyFor.
Contrairement à l'exemple de code précédent, qui récupère un objet PersonProperties pour l'utilisateur cible, cet exemple appelle la méthode PeopleManager.GetUserProfilePropertiesFor et transmet un objet UserProfilePropertiesForUser qui spécifie l'utilisateur cible et les propriétés de profil utilisateur à récupérer. GetUserProfilePropertiesFor renvoie une collection IEnumerable qui contient les valeurs des propriétés que vous spécifiez.
Notes
Remplacez les valeurs des espaces réservés http://serverName/ et domainName\\\\userName avant d’exécuter le 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.
}
}
}