PeopleEditor Control

PeopleEditor Control

PeopleEditor Control

PeopleEditor Control

При разработке форм собственных в Visual Studio для Share Point этот контрол очень помог. Позволяет выбирать из списка юзеров сервера необходимых нам. Нет необходимости самому писать модальные окна, мучаться с колбэками.

Собственно, элемент состоит из 3-х частей:

  • текстовое поле, куда вносится имя;
  • кнопка, чтобы проверить заполнено ли имя;
  • кнопка Browse для просмотра списка юзеров;

При нажатии на Browse открывается модальное окно, где вы можете выбрать необходимого(-ых) юзеров. PeopleEditor Control - окно выбора

Когда введёте имя, можете проверить, есть ли такой юзер в системе (это в случае, если вы вводите сами, а не используется Browse).

Синтаксис

При работе с шаблоном при включенном мастере можно просто из тулбокса перетащить элемент, код в шаблоне автоматически сгенерируется. Или можете сами вставить код подобный этому.

<spuc:PeopleEditor ID="PeopleEditorWF" runat="server" Height="15px" width="260px" AllowEmpty="false" MultiSelect="true" SelectionSet="User"  />
Предварительно, конечно, необходимо подключить соответсвующую директиву.
<%@ Register TagPrefix="spuc" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
Если создаём элемент ручками в коде, а не в шаблоне, то выглядеть это будет примерно так:
private PeopleEditor pEditor;
private void EnsureChildControls()
{
    pEditor = new PeopleEditor();
    pEditor.AutoPostBack = true;
    pEditor.ID = "PeopleEditor1";
    pEditor.AllowEmpty = false;
    pEditor.MultiSelect = false;
    PanelWithEditor.Controls.Add(pEditor);
}
Элемент является частью Microsoft.SharePoint.dll с пространством имён: Microsoft.SharePoint.WebControls namespace.

Свойства

Есть не мало свойств элемента, которые позволят сконфигурировать функционал PeopleEditor’а на свой вкус:

  • AutoPostBack: если хотите, чтоб элемент немедленно реагировал на действия юзера.
  • AllowEmpty: если в true, то вы обязано имя в поле ввести.
  • AllowTypeIn: если в false, то юзер не сможет сам ввести имя. Ему разрешается лишь выбирать из списка (нажав Browse)
  • CommaSeparatedAccounts: вы может инициализировать элемент строкой со списком имён, отделённых запятой.
  • EntitySeparator: разделитель, по умолчанию ‘;’.
  • ErrorMessage: можно поменять сообщение об ошибке, которое стоит по умолчания.
  • ID: идентификатор элемента.
  • MultiSelect: если поставить в true, то можно выбирать несколько пользователей.
  • NoMatchesText: сообщение об ошибке, которое появляется в случае, если не найдено совпадение.
  • PlaceButtonsUnderEntityEditor: если в true, то кнопки управления будут под текстовым полем.
  • PrincipalSource: если у вас несколько источников, откуда могут выбираться юзеры, выберите желаемый.
  • SelectionSet: строка со списком типов аккаунта (account types), которые разрешаются (определено в AccountType enumeration). Как пример: pEditor.SelectionSet = «User,SecGroup,SPGroup»;
  • SharePointGroup: можно ограничить список пользователей, которых можно выбрать, задав в этом параметре имя группы из SharePoint вашего сайта.
  • ShowButtons: если хотите скрыть кнопки Check и Browse, то установите в false.
  • ValidatorEnabled: если в true, то валидация будет на стороне клиента.

Полный список можно посмотреть на MSDN.

Метода

  • GetAccountFromSid: возвращает имя аккаунта, которое ассоциируется с SID’ом, который указываем в параметрах метода.
  • UpdateEntities: если хотите инициализировать элемент своими данными (ArrayList элементов PickerEntity) и сразу их проверить. Как-то так:
    System.Collections.ArrayList entityAList = new System.Collections.ArrayList();
    PickerEntity entity = new PickerEntity();
    entity.Key = SPContext.Current.Web.CurrentUser.LoginName;
    //текущего юзера добавляем
    entity =  pEditor.ValidateEntity(entity);
    entityAList.Add(entity);
    pEditor.UpdateEntities(entityAList);
    

Дизайн

Когда происходит интерпритация в html, то довольно криво порой отображается элемент. К примеру, даже если вы зададите выоту элемента, то она будет всё равно стандартная. Если хотите свой стиль сделать, то что-то подобное вставьте:

<style  type="text/css">   
     #ctl00_PlaceHolderMain_PeopleEditorWF_upLevelDiv
     {
        height:15px !important;
         width:260px;
     }
</style>
Здесь PeopleEditorWF — это идентификатор вашего элемента. PlaceHolderMain — идентификатор родительского элемента. В данном случае стили для элемента по id назанчаются. Можно свой класс (CssClass) элементу задать. В коде будет что-то вроде:
<style  type="text/css">   
    .PEditor
    {
        ...
    }
</style>

<spuc:PeopleEditor ID="PeopleEditorWF" runat="server" Height="15px" width="260px" AllowEmpty="false" CssClass="PEditor" MultiSelect="true" SelectionSet="User"  />