Получение свойств профилей пользователей с помощью клиентской объектной модели .NET в SharePoint
Сведения о программном получении свойств профиля пользователя с помощью клиентской объектной модели .NET для SharePoint.
Что такое свойства профиля пользователя в SharePoint?
Свойства пользователей и их профилей предоставляют сведения о пользователях SharePoint, например отображаемое имя, адрес электронной почты, должность, а также другие рабочие и личные сведения. В клиентских API доступ к этим свойствам можно получить из объекта PersonProperties и его свойства UserProfileProperties . Свойство UserProfileProperties содержит все свойства профиля пользователя, но объект PersonProperties содержит часто используемые свойства (например, AccountName , DisplayName и Email ), которые легче доступа.
Объект PeopleManager включает следующие методы, которые можно использовать для получения свойств пользователя и свойств профиля пользователя с помощью клиентской объектной модели .NET:
Метод GetMyProperties и метод GetPropertiesFor возвращают объект PersonProperties .
Метод GetUserProfilePropertiesFor и метод GetUserProfilePropertyFor возвращают значения указанных свойств профиля пользователя.
Свойства профиля пользователя из клиентских API доступны только для чтения (за исключением изображения профиля, которое можно изменить с помощью метода PeopleManager.SetMyProfilePicture ). Чтобы изменить другие свойства профиля пользователя, необходимо использовать серверную объектную модель.
Примечание.
Клиентская версия объекта UserProfile не содержит все свойства пользователя в качестве серверной версии. Однако клиентская версия предоставляет методы для создания личного сайта для текущего пользователя. Чтобы получить клиентские UserProfile для текущего пользователя, используйте метод ProfileLoader.GetUserProfile .
Дополнительные сведения о работе с профилями см. в статье Работа с профилями пользователей в SharePoint.
Необходимые условия настройки среды разработки для извлечения свойств профилей пользователей с помощью клиентской объектной модели SharePoint .NET
Создание консольного приложения, использующего клиентской объектной модели .NET для извлечения свойств профиля пользователя, необходимо следующее:
SharePoint с профилями для текущего пользователя и целевого пользователя;
Visual Studio 2012
разрешения уровня Полный доступ для подключения к приложению-службе профиля текущего пользователя.
Примечание.
Если вы не разрабатываете разработку на компьютере под управлением SharePoint, получите скачивание клиентских компонентов SharePoint , содержащих клиентские сборки SharePoint.
Создайте консольное приложение, которое извлекает свойства профилей пользователей с помощью клиентской объектной модели SharePoint .NET
На компьютере для разработки откройте Visual Studio и выберите файл, Создать, проект.
В раскрывающемся списке в верхней части диалогового окна Новый проект выберите пункт .NET Framework 4.5.
На основе шаблонов проектов выберите Windows и выберите Консольное приложение.
Назовите проект UserProfilesCSOMи затем нажмите кнопку ОК.
Добавьте ссылки на следующие сборки:
- Microsoft.SharePoint.Client
- Microsoft.SharePoint.ClientRuntime
- Microsoft.SharePoint.Client.UserProfiles
- В методе Main определите переменные для URL-адрес сервера и имя конечного пользователя, как показано в следующем коде.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";
Примечание. Не забудьте заменить
http://serverName/
значения заполнителей иdomainName\\\\userName
перед выполнением кода.
- Инициализация контекста клиента SharePoint, как показано в следующем коде.
ClientContext clientContext = new ClientContext(serverUrl);
- Получение свойств конечного пользователя из объекта PeopleManager, как показано в следующем коде.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);
Объект personProperties это объект клиента. Некоторые клиентские объекты не содержат данных до их инициализации. Например значения свойств объекта personProperties недоступны до его инициализации. При попытке доступа к свойству до его инициализации, вы получаете исключение PropertyOrFieldNotInitializedException.
- Для инициализации объекта personProperties, регистрация запроса, которую требуется запустить и выполнить запрос на сервере, как показано в следующем коде.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();
При вызове метода Load (или метод LoadQuery ), переданных в объект, который необходимо получить или изменить. В этом примере вызов метода Load передает необязательных параметров для фильтрации запроса. Лямбда-выражения, запрашивающих свойство AccountName и свойство UserProfileProperties объекта personProperties используются параметры.
Совет. Чтобы уменьшить сетевой трафик, запросите только свойства, с которыми вы хотите работать при вызове метода Load. Кроме того при работе с несколькими объектами групповой нескольких вызовы метода Load по возможности перед вызовом метода ExecuteQuery.
- Выполните итерацию по свойств профилей пользователей и чтение имя и значение каждого свойства, как показано в следующем коде.
foreach (var property in personProperties.UserProfileProperties)
{
Console.WriteLine(string.Format("{0}: {1}",
property.Key.ToString(), property.Value.ToString()));
}
Пример кода: получение всех свойств профиля пользователя с помощью клиентской объектной модели SharePoint .NET
В следующем примере кода показано, как получить итерацию всех свойств профиля пользователя целевого пользователя, как описано в предыдущей процедуре.
Примечание.
Замените http://serverName/
значения заполнителей и domainName\\\\userName
перед выполнением кода.
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.
}
}
}
Пример кода: получение свойств профиля пользователей, подписанных на вас, с помощью клиентской объектной модели SharePoint .NET
В следующем примере кода показано, как получить Надстройка SharePoint свойства профиля пользователя по пользователей, которые вы подписались.
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();
}
Пример кода: получение набора свойств профилей пользователей с помощью клиентской объектной модели SharePoint .NET
В следующем примере кода показано, как получить определенный набор свойств профилей пользователей для конечного пользователя.
Примечание.
Чтобы получить значение только для одного свойства профиля пользователя, используйте метод GetUserProfilePropertyFor .
В отличие от предыдущего примера кода, который извлекает объект PersonProperties для целевого пользователя, в этом примере вызывается метод PeopleManager.GetUserProfilePropertiesFor и передается объект UserProfilePropertiesForUser , указывающий целевого пользователя и извлекаемые свойства профиля пользователя. GetUserProfilePropertiesFor возвращает коллекцию строк> IEnumerable<, содержащую значения указанных свойств.
Примечание.
Замените http://serverName/
значения заполнителей и domainName\\\\userName
перед выполнением кода.
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.
}
}
}