Получить адрес электронной почты из средства выбора людей sharepoint, используя JavaScript - PullRequest
2 голосов
/ 11 ноября 2010

Я использую SharePoint 2007. У меня есть настраиваемая страница aspx в папке раскладок, содержащая элемент управления выбора людей (PeopleEditor).

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

1 Ответ

5 голосов
/ 11 ноября 2010

Общее

Поля людей довольно сложны, но я сделаю все возможное, чтобы объяснить, что я узнал, поработав с ними при обновлении моей библиотеки ( SPUtility.js ). Вы можете взглянуть на класс SPUserField в библиотеке, чтобы увидеть. В основном я использовал Firebug + Firefox, чтобы перепроектировать поле. К сожалению, поле генерируется по-разному в зависимости от того, какой браузер используется.

  • В Firefox отображается обычный старый textarea.
  • В IE, похоже, используется редактируемый контент div.

Сначала список элементов управления, составляющих поле:

  • upLevelDiv - редактируемый контент div с помощью downlevelTextBox
  • downlevelTextBox - Textarea
  • hiddenSpanData - текстовое поле, в котором хранятся некоторые данные
  • checkNames - пользователь нажимает кнопку ImageButton для проверки введенных имен с помощью AJAX

На самом деле есть еще пара элементов управления, но я не нашел их полезными (HiddenEntityKey, HiddenEntityDisplayText).

Получение контроля

Я не уверен, как работает HTML на странице ASPX, но в обычной форме SharePoint есть <span class="ms-usereditor">. Все остальные элементы управления содержатся в этом диапазоне. Это позволяет относительно легко получить другие элементы управления:

var controls = this.Controls.select('span.ms-usereditor');
if (null !== controls && 1 === controls.length) {
    this.spanUserField = controls[0];
    this.upLevelDiv = $(this.spanUserField.id + '_upLevelDiv');
    this.textareaDownLevelTextBox = $(this.spanUserField.id + '_downlevelTextBox');
    this.linkCheckNames = $(this.spanUserField.id + '_checkNames');
    this.txtHiddenSpanData = $(this.spanUserField.id + '_hiddenSpanData');
}

Настройка поля

Чтобы понять, я также включил детали для настройки поля.

if (Prototype.Browser.IE) {
    this.upLevelDiv.innerHTML = value;
    this.txtHiddenSpanData.setValue(value);
    this.linkCheckNames.click();
}
else { // FireFox (maybe others?)
    this.textareaDownLevelTextBox.setValue(value);
    this.linkCheckNames.onclick();
}

Получение значения поля

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

После выполнения upLevelDiv (или hiddenSpanData), вероятно, будет содержать что-то вроде этого:

<SPAN class=ms-entity-resolved id=spanDOMAIN\account12345 title=DOMAIN\account12345 contentEditable=false tabIndex=-1>
<DIV id=divEntityData style="DISPLAY: none" description="DOMAIN\account12345" isresolved="True" displaytext="LastName, FirstName" key="DOMAIN\account12345">
<DIV data='<ArrayOfDictionaryEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><DictionaryEntry><Key xsi:type="xsd:string">SPUserID</Key><Value xsi:type="xsd:string">2</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">Email</Key><Value xsi:type="xsd:string">email@address.com</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">DisplayName</Key><Value xsi:type="xsd:string">LastName, FirstName</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">Department</Key><Value xsi:type="xsd:string">My Department Name</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">SIPAddress</Key><Value xsi:type="xsd:string">sip@address.com</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">PrincipalType</Key><Value xsi:type="xsd:string">User</Value></DictionaryEntry><DictionaryEntry><Key xsi:type="xsd:string">Title</Key><Value xsi:type="xsd:string">My Job Title</Value></DictionaryEntry></ArrayOfDictionaryEntry>'></DIV></DIV><SPAN oncontextmenu=onContextMenuSpnRw(); onmousedown=onMouseDownRw(); id=content contentEditable=true tabIndex=-1>LastName, FirstName</SPAN></SPAN>

Затем все, что вам нужно сделать, - это проанализировать ArrayOfDictionaryEntry объект XML, чтобы прочитать их электронную почту.

...