use*_*839 2 sharepoint peoplepicker
我正在使用SharePoint 2007.我在layouts文件夹中有一个自定义的aspx页面,其中包含一个people picker(PeopleEditor)控件.
用户可以n在控件中输入nunmber个用户.我想使用javascript从人员选择器控件中撤回用户的电子邮件,有人可以帮忙.
人员领域非常复杂,但我会尽力解释我在更新我的库(SPUtility.js)时从他们那里得到的东西.您可以查看SPUserField库中的类来查看.我主要使用Firebug + Firefox对该领域进行逆向工程.不幸的是,根据使用的浏览器,该字段的生成方式也不同.
textarea会显示常规的旧版本.首先,组成该字段的控件列表:
实际上还有一些控件,但我没有发现它们有用(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');
}
Run Code Online (Sandbox Code Playgroud)
要理解,我还要包括设置字段的详细信息.
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();
}
Run Code Online (Sandbox Code Playgroud)
单击"检查名称"按钮并执行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>
Run Code Online (Sandbox Code Playgroud)
然后,您需要做的就是解析ArrayOfDictionaryEntryXML对象以阅读他们的电子邮件.
| 归档时间: |
|
| 查看次数: |
6980 次 |
| 最近记录: |