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


Skip to main content