Использование клиентского средства выбора людей в надстройках SharePoint с размещением в SharePoint
Важно!
В этой статье предполагается, что вы знаете, как создать надстройку SharePoint с размещением в SharePoint.
Что представляет собой клиентское средство выбора людей в SharePoint?
Клиентское средство выбора людей позволяет пользователям быстро находить действительные учетные записи для людей, групп и утверждений в организации. Средство выбора представляет собой элемент управления HTML и JavaScript, работающий в разных браузерах.
Добавить средство выбора в надстройку легко:
В коде добавьте элемент контейнера для этого элемента управления, а также ссылки на последний и его зависимости.
В скрипт добавьте вызов глобальной функции SPClientPeoplePicker_InitStandaloneControlWrapper для отрисовки и инициализации средства выбора.
Средство выбора представлено объектом SPClientPeoplePicker, предоставляющим методы, которые другие клиентские элементы управления могут использовать для получения сведений из этого средства выбора или для выполнения других действий. С помощью свойств объекта SPClientPeoplePicker можно настроить соответствующие параметры этого средства выбора (например, разрешить выбор нескольких пользователей или указать параметры кэширования).
Данное средство выбора также использует параметры конфигурации веб-приложений, в частности параметры доменных служб Active Directory или параметры целевых лесов. Параметры конфигурации веб-приложений собираются автоматически (из свойства SPWebApplication.PeoplePickerSettings).
Средство выбора включает следующие компоненты:
- Текстовое поле для ввода имен пользователей, групп и утверждений.
- Элемент управления "Интервал", в котором отображаются имена сопоставленных пользователей, групп и требований.
- Скрытый элемент div, который автоматически заполняет раскрывающийся список соответствующими результатами запроса.
- Элемент управления для автозаполнения.
Примечание.
Средство выбора и его функциональность заданы в файлах сценариев clientforms.js, clientpeoplepicker.js и autofill.js, которые расположены в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\LAYOUTS на сервере.
Требования к среде разработки для использования клиентского средства выбора людей в надстройке SharePoint
В этой статье предполагается, что вы создаете надстройку для SharePoint, используя Napa на сайте разработчика Office 365. Если вы используете эту среду разработки, у вас уже установлены необходимые компоненты.
Примечание.
Сведения о том, как зарегистрировать сайт разработчика и начать использовать Napa, см. в статье Настройка среды разработки надстроек SharePoint в Office 365.
Если вы не используете Napa на сайте разработчика, вам потребуется следующие компоненты:
- SharePoint хотя бы с одним пользователем;
- Visual Studio 2012 или Visual Studio 2013;
- Инструменты разработчика Office для Visual Studio 2013.
Примечание.
Рекомендации по настройке подходящей среды разработки см. в статье Надстройки SharePoint.
В приведенных ниже разделах указаны общие инструкции по добавлению средства выбора в надстройку и получению сведений о пользователях из другого клиентского элемента управления. Соответствующий код см. в разделе Пример кода: использование клиентского средства выбора людей.
Клиентское средство выбора людей можно использовать в надстройках SharePoint с размещением в SharePoint, но не в надстройках с размещением у поставщика.
Использование клиентского средства выбора людей в надстройке с размещением в SharePoint
В разметке страницы
Добавьте ссылки в раздел зависимостей скриптов клиентского элемента управления "Выбор людей".
Добавьте теги HTML для пользовательского интерфейса страницы. Надстройка в этом примере определяет два элемента div : один для отрисовки средства выбора, а второй для пользовательского интерфейса: кнопка, которая вызывает скрипт для запроса средства выбора, и элементы, отображающие сведения о пользователе.
В скрипте
Создайте словарь JSON для использования в качестве схемы, в которой хранятся свойства этого элемента управления выбора, такие как AllowMultipleValues и MaximumEntitySuggestions.
Вызовите глобальную функцию SPClientPeoplePicker_InitStandaloneControlWrapper.
Получите объект средства выбора на странице.
Отправьте запрос средству выбора. Надстройка в этом примере вызывает метод GetAllUserInfo для получения всех сведений о сопоставленных пользователях, а также метод GetAllUserKeys для получения ключей для этих сопоставленных пользователей.
Получите идентификатор пользователя с помощью объектной модели JavaScript. Идентификатор пользователя не включается в сведения, возвращаемые средствами выбора, поэтому надстройка вызывает поставщик услуг. Метод Web.ensureUser и получает идентификатор из возвращенного поставщика услуг. Объект User .
Отображение, инициализация и другая функциональность для элемента управления выбора обрабатывается на сервере, включая поиск и разрешение ввода пользователя при работе с поставщиками проверки подлинности SharePoint.
Пример кода: использование клиентского средства выбора людей в надстройке с размещением в SharePoint
Примеры кода HTML и JavaScript, приведенные ниже, добавляют клиентское средство выбора людей в надстройку с размещением в SharePoint.
В первом примере показана разметка страницы для тегов PlaceHolderMain asp:Content на странице Default.aspx. Этот код ссылается на зависимости в скрипте средства выбора, присваивает уникальный идентификатор элементу DOM, содержащему средство выбора, и определяет пользовательский интерфейс надстройки.
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<SharePoint:ScriptLink name="clienttemplates.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="clientforms.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="clientpeoplepicker.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="autofill.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="sp.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="sp.runtime.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="sp.core.js" runat="server" LoadAfterUI="true" Localizable="false" />
<div id="peoplePickerDiv"></div>
<div>
<br/>
<input type="button" value="Get User Info" onclick="getUserInfo()"></input>
<br/>
<h1>User info:</h1>
<p id="resolvedUsers"></p>
<h1>User keys:</h1>
<p id="userKeys"></p>
<h1>User ID:</h1>
<p id="userId"></p>
</div>
</asp:Content>
Примечание.
В зависимости от используемой среды вам, возможно, не потребуется явно ссылаться на все эти зависимости.
В приведенном ниже примере показан скрипт из файла App.js. Этот скрипт инициализирует и отрисовывает средство выбора, а затем запрашивает информацию о пользователях и получает ИД пользователя, используя объектную модель JavaScript.
// Run your custom code when the DOM is ready.
$(document).ready(function () {
// Specify the unique ID of the DOM element where the
// picker will render.
initializePeoplePicker('peoplePickerDiv');
});
// Render and initialize the client-side People Picker.
function initializePeoplePicker(peoplePickerElementId) {
// Create a schema to store picker properties, and set the properties.
var schema = {};
schema['PrincipalAccountType'] = 'User,DL,SecGroup,SPGroup';
schema['SearchPrincipalSource'] = 15;
schema['ResolvePrincipalSource'] = 15;
schema['AllowMultipleValues'] = true;
schema['MaximumEntitySuggestions'] = 50;
schema['Width'] = '280px';
// Render and initialize the picker.
// Pass the ID of the DOM element that contains the picker, an array of initial
// PickerEntity objects to set the picker value, and a schema that defines
// picker properties.
this.SPClientPeoplePicker_InitStandaloneControlWrapper(peoplePickerElementId, null, schema);
}
// Query the picker for user information.
function getUserInfo() {
// Get the people picker object from the page.
var peoplePicker = this.SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan;
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
}
$('#resolvedUsers').html(userInfo);
// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
$('#userKeys').html(keys);
// Get the first user's ID by using the login name.
getUserId(users[0].Key);
}
// Get the user ID.
function getUserId(loginName) {
var context = new SP.ClientContext.get_current();
this.user = context.get_web().ensureUser(loginName);
context.load(this.user);
context.executeQueryAsync(
Function.createDelegate(null, ensureUserSuccess),
Function.createDelegate(null, onFail)
);
}
function ensureUserSuccess() {
$('#userId').html(this.user.get_id());
}
function onFail(sender, args) {
alert('Query failed. Error: ' + args.get_message());
}