Создание элемента управления "Выбор людей" SharePoint 2010 для Silverlight
Дата публикации исходной статьи: среда, 10 августа 2011 г.
Многие разработчики SharePoint жалуются на отсутствие элемента управления "Выбор людей" в наборе средств Silverlight. В SharePoint доступен элемент управления, который можно использовать в веб-части или на странице пользовательских макетов (класс PeopleEditor). Код Silverlight полностью выполняется на клиентской стороне, в связи с чем готового решения этой проблемы не существует. В последнем проекте мне понадобилось реализовать эту функцию, в результате чего я пришел к достаточно простому решению. Ниже приводится снимок экрана предлагаемого элемента управления No-UI-Talent, который реализован в Silverlight в виде всплывающего компонента:
Работа этого компонента обеспечивается с помощью небольшой стандартной веб-службы SharePoint — "Люди". В этом сценарии я использую метод SearchPrincipals для получения текста, который вводится в поле поиска, и поиска всех доступных совпадений. В моем примере требуется найти всего одного человека. Однако при необходимости я могу также искать по группам, спискам рассылки и группам безопасности SharePoint. Кроме того, вы можете реализовать собственный элемент управления вводом с помощью метода ResolvePrincipals этой веб-службы. Ниже приводится несколько интересных деталей предлагаемой реализации:
- Метод возвращает объекты ObservableCollection структуры PrincipalInfo. Для большего удобства я создал настраиваемый класс PickerEntry с атрибутами DisplayName и AccountName. Класс PrincipalInfo также содержит такие полезные свойства, как Department и Email. В нашем примере я переопределил метод ToString() класса для возврата свойства DisplayName. Это позволяет мне получать имена, которые будут отображаться в поле со списком. Таким образом, я также определяю имя учетной записи при выборе пользователя.
- Мне требовалось обеспечить возможность использовать точку входа веб-службы с сайта SharePoint, на котором я нахожусь. Сделать это из Silverlight было несколько сложнее, по крайней мере, не так очевидно. Чтобы решить эту проблему, я использовал следующий код:
//получение сведений о текущем узле
string curUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.ToString();
//получение имени узла; учтите, что предполагается, что у пользователя есть права для корневого
//семейства веб-сайтов; что может быть неверно в вашем сценарии
Uri curUri = new Uri(curUrl);
HostName = curUri.Scheme + "://" + curUri.Host + ":" + curUri.Port.ToString();
//использование свойства имени узла для настройки запроса по сайту, на
//котором размещен элемент управления
PeopleWS.PeopleSoapClient ps = new PeopleWS.PeopleSoapClient();
ps.Endpoint.Address =
new System.ServiceModel.EndpointAddress(HostName + "/_vti_bin/People.asmx");
Фактически, это единственный интересный фрагмент кода. К этой публикации прилагается полный код пользовательского элемента управления. К сожалению, по разным причинам я не могу включить сюда весь проект, однако надеюсь, что эта статья и приведенный фрагмент кода помогут вам решить эту проблему, если вы с ней столкнетесь.
Это локализованная запись блога. Исходная статья находится по адресу Writing A SharePoint 2010 People Picker Control for Silverlight