Получение свойств профилей пользователей с помощью объектной модели JavaScript в SharePoint
Узнайте, как программно восстановить свойства и профиль пользователя с помощью объектной модели JavaScript для SharePoint.
Что такое свойства пользователей и их профилей в SharePoint?
Свойства пользователей и их профилей предоставляют сведения о пользователях SharePoint, например отображаемое имя, адрес электронной почты, должность, а также другие рабочие и личные сведения. В клиентских интерфейсах API доступ к этим свойствам можно получить с помощью объекта PersonProperties и его свойства userProfileProperties. Свойство userProfileProperties содержит все свойства профиля пользователя, но объект PersonProperties содержит часто используемые свойства (например, accountName, displayName и email), к которым легче получить доступ.
Объект PeopleManager включает следующие методы, которые можно использовать для получения свойств пользователя и свойств профиля пользователя с помощью объектной модели JavaScript:
Методы getMyProperties и getPropertiesFor возвращают объект PersonProperties.
Методы getUserProfilePropertiesFor и getUserProfilePropertyFor возвращают значения свойств профиля пользователя, которые можно указать.
Свойства профиля пользователя из клиентских интерфейсов API доступны только для чтения (за исключением изображения профиля, которое можно изменить с помощью метода PeopleManager.setMyProfilePicture). Чтобы изменить другие свойства профиля пользователя, необходимо использовать серверную объектную модель. Дополнительные сведения о работе с профилями пользователей см. в статье Работа с профилями пользователей в SharePoint.
Примечание.
Клиентский объект UserProfile содержит не все свойства пользователей, доступные в серверной версии. Тем не менее, в клиентской версии предусмотрены методы для создания личного сайта для текущего пользователя. Чтобы получить этот объект, используйте метод ProfileLoader.getUserProfile.
Необходимые условия для настройки среды разработки на получение свойств пользователя с помощью объектной модели JavaScript в SharePoint
Чтобы создать страницу приложения, которая использует объектную модель JavaScript для получения свойств пользователей, вам потребуются:
SharePoint с профилями для текущего пользователя и целевого пользователя;
Visual Studio 2012;
Инструменты разработчика Office для Visual Studio 2013;
разрешения уровня Полный доступ для подключения к приложению-службе профиля текущего пользователя.
Создание страницы приложения в Visual Studio 2012
На сервере под управлением SharePoint откройте Visual Studio и выберите команды Файл, Создать, Проект.
В раскрывающемся списке в верхней части диалогового окна Новый проект выберите пункт .NET Framework 4.5.
В списке Шаблоны разверните узел Office/SharePoint, выберите категорию Решения SharePoint, а затем шаблон Проект SharePoint.
Назовите проект UserProfilesJSOM и нажмите кнопку ОК.
В диалоговом окне Мастер настройки SharePoint введите URL-адрес целевого сайта SharePoint, выберите Развернуть как решение фермы и нажмите кнопку Готово.
В диспетчере решений откройте контекстное меню для проектаUserProfilesJSOM и добавьте сопоставленную папку Layouts для SharePoint.
В папке Layouts откройте контекстное меню папки UserProfilesJSOM и добавьте новую страницу приложения SharePoint под названием UserProfiles.aspx.
Примечание. Примеры кода в этой статье определяют пользовательский код в коде разметки страницы, но не используют файл классов кода программной части, который Visual Studio создает для страницы.
Откройте контекстное меню страницы UserProfiles.aspx и выберите пункт Назначить автозапускаемым элементом.
В разметке страницы 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>
- Чтобы добавить логику для получения свойств профиля пользователя, замените комментарий между тегами script примером кода из одного из следующих сценариев:
- Получение свойств профиля пользователя из объекта PersonProperties и его свойства userProfileProperties
- Получение набора свойств профиля пользователя с помощью метода getUserProfilePropertiesFor
- Чтобы протестировать страницу приложения, в панели меню выберите команды Отладка, Начать отладку. Если вам будет предложено изменить файл 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();
}