Создание элемента управления "Выбор людей" 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