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


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

Узнайте, как программно восстановить свойства и профиль пользователя с помощью объектной модели JavaScript для SharePoint.

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

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

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

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

Примечание.

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

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

Чтобы создать страницу приложения, которая использует объектную модель JavaScript для получения свойств пользователей, вам потребуются:

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

  • Visual Studio 2012;

  • Инструменты разработчика Office для Visual Studio 2013;

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

Создание страницы приложения в Visual Studio 2012

  1. На сервере под управлением SharePoint откройте Visual Studio и выберите команды Файл, Создать, Проект.

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

  3. В списке Шаблоны разверните узел Office/SharePoint, выберите категорию Решения SharePoint, а затем шаблон Проект SharePoint.

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

  5. В диалоговом окне Мастер настройки SharePoint введите URL-адрес целевого сайта SharePoint, выберите Развернуть как решение фермы и нажмите кнопку Готово.

  6. В диспетчере решений откройте контекстное меню для проектаUserProfilesJSOM и добавьте сопоставленную папку Layouts для SharePoint.

  7. В папке Layouts откройте контекстное меню папки UserProfilesJSOM и добавьте новую страницу приложения SharePoint под названием UserProfiles.aspx.

    Примечание. Примеры кода в этой статье определяют пользовательский код в коде разметки страницы, но не используют файл классов кода программной части, который Visual Studio создает для страницы.

  8. Откройте контекстное меню страницы UserProfiles.aspx и выберите пункт Назначить автозапускаемым элементом.

  9. В разметке страницы UserProfiles.aspx вставьте приведенный ниже код в теги Main asp:Content. Этот код создает элемент управления span, который отображает результаты запроса, элементы управления SharePoint:ScriptLink, которые ссылаются на файлы библиотеки классов JavaScript в SharePoint, и теги script для пользовательской логики.

<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. Чтобы добавить логику для получения свойств профиля пользователя, замените комментарий между тегами script примером кода из одного из следующих сценариев:
  1. Чтобы протестировать страницу приложения, в панели меню выберите команды Отладка, Начать отладку. Если вам будет предложено изменить файл web.config, нажмите кнопку ОК.

Пример кода. Получение свойств профиля пользователя из объекта PersonProperties и его свойства userProfileProperties в объектной модели SharePoint JavaScript

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

  • получить объект PersonProperties, который представляет целевого пользователя, с помощью метода getPropertiesFor. Чтобы получить объект PersonProperties для текущего пользователя, используйте метод getMyProperties;

  • получить свойство непосредственно из объекта PersonProperties. Этот пример получает свойство displayName;

  • получить свойство из свойства userProfileProperties объекта PersonProperties. Этот пример получает свойство Department.

Примечание.

Вставьте приведенный ниже код между тегами script, добавленными в файл UserProfiles.aspx в ходе выполнения действий из раздела Создание страницы приложения. Замените значение заполнителя domainName\\userName, прежде чем запускать код. В этом примере кода не используется файл классов кода программной части.


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();
}

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

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

  • создать объект UserProfilePropertiesForUser, который задает целевого пользователя и получаемые свойства профиля. Этот пример получает свойства PreferredName и Department;

  • получить значения указанных свойств с помощью метода getUserProfilePropertiesFor, передав их в объект UserProfilePropertiesForUser. Чтобы получить значение только одного свойства профиля пользователя, используйте метод getUserProfilePropertyFor;

  • Получить значения из возвращаемого массива значений свойств.

Примечание.

Вставьте приведенный ниже код между тегами script, добавленными в файл UserProfiles.aspx в ходе выполнения действий из раздела Создание страницы приложения. Замените значение заполнителя domainName\\\\userName, прежде чем запускать код. В этом примере кода не используется файл классов кода программной части.


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();
}

См. также