Поделиться через


Получение свойств профилей пользователей с помощью клиентской объектной модели .NET в SharePoint

Сведения о программном получении свойств профиля пользователя с помощью клиентской объектной модели .NET для SharePoint.

Что такое свойства профиля пользователя в SharePoint?

Свойства пользователей и их профилей предоставляют сведения о пользователях SharePoint, например отображаемое имя, адрес электронной почты, должность, а также другие рабочие и личные сведения. В клиентских API доступ к этим свойствам можно получить из объекта PersonProperties и его свойства UserProfileProperties . Свойство UserProfileProperties содержит все свойства профиля пользователя, но объект PersonProperties содержит часто используемые свойства (например, AccountName , DisplayName и Email ), которые легче доступа.

Объект PeopleManager включает следующие методы, которые можно использовать для получения свойств пользователя и свойств профиля пользователя с помощью клиентской объектной модели .NET:

Свойства профиля пользователя из клиентских API доступны только для чтения (за исключением изображения профиля, которое можно изменить с помощью метода PeopleManager.SetMyProfilePicture ). Чтобы изменить другие свойства профиля пользователя, необходимо использовать серверную объектную модель.

Примечание.

Клиентская версия объекта UserProfile не содержит все свойства пользователя в качестве серверной версии. Однако клиентская версия предоставляет методы для создания личного сайта для текущего пользователя. Чтобы получить клиентские UserProfile для текущего пользователя, используйте метод ProfileLoader.GetUserProfile .

Дополнительные сведения о работе с профилями см. в статье Работа с профилями пользователей в SharePoint.

Необходимые условия настройки среды разработки для извлечения свойств профилей пользователей с помощью клиентской объектной модели SharePoint .NET

Создание консольного приложения, использующего клиентской объектной модели .NET для извлечения свойств профиля пользователя, необходимо следующее:

  • SharePoint с профилями для текущего пользователя и целевого пользователя;

  • Visual Studio 2012

  • разрешения уровня Полный доступ для подключения к приложению-службе профиля текущего пользователя.

Примечание.

Если вы не разрабатываете разработку на компьютере под управлением SharePoint, получите скачивание клиентских компонентов SharePoint , содержащих клиентские сборки SharePoint.

Создайте консольное приложение, которое извлекает свойства профилей пользователей с помощью клиентской объектной модели SharePoint .NET

  1. На компьютере для разработки откройте Visual Studio и выберите файл, Создать, проект.

  2. В раскрывающемся списке в верхней части диалогового окна Новый проект выберите пункт .NET Framework 4.5.

  3. На основе шаблонов проектов выберите Windows и выберите Консольное приложение.

  4. Назовите проект UserProfilesCSOMи затем нажмите кнопку ОК.

  5. Добавьте ссылки на следующие сборки:

  • Microsoft.SharePoint.Client
  • Microsoft.SharePoint.ClientRuntime
  • Microsoft.SharePoint.Client.UserProfiles
  1. В методе Main определите переменные для URL-адрес сервера и имя конечного пользователя, как показано в следующем коде.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";

Примечание. Не забудьте заменить http://serverName/ значения заполнителей и domainName\\\\userName перед выполнением кода.

  1. Инициализация контекста клиента SharePoint, как показано в следующем коде.
ClientContext clientContext = new ClientContext(serverUrl);
  1. Получение свойств конечного пользователя из объекта PeopleManager, как показано в следующем коде.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);

Объект personProperties — это объект клиента. Некоторые клиентские объекты не содержат данных до их инициализации. Например значения свойств объекта personProperties недоступны до его инициализации. При попытке доступа к свойству до его инициализации, вы получаете исключение PropertyOrFieldNotInitializedException.

  1. Для инициализации объекта personProperties, регистрация запроса, которую требуется запустить и выполнить запрос на сервере, как показано в следующем коде.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();

При вызове метода Load (или метод LoadQuery ), переданных в объект, который необходимо получить или изменить. В этом примере вызов метода Load передает необязательных параметров для фильтрации запроса. Лямбда-выражения, запрашивающих свойство AccountName и свойство UserProfileProperties объекта personProperties используются параметры.

Совет. Чтобы уменьшить сетевой трафик, запросите только свойства, с которыми вы хотите работать при вызове метода Load. Кроме того при работе с несколькими объектами групповой нескольких вызовы метода Load по возможности перед вызовом метода ExecuteQuery.

  1. Выполните итерацию по свойств профилей пользователей и чтение имя и значение каждого свойства, как показано в следующем коде.
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.
        }
    }
}

См. также