2

SharePoint 2007 を使用しています。レイアウト フォルダーにカスタム aspx ページがあり、ユーザー ピッカー ( PeopleEditor) コントロールが含まれています。

nユーザーはコントロールにユーザー数を入力できます。javascript を使用してユーザー ピッカー コントロールからユーザーのメールを取得したいのですが、誰か助けてください。

4

1 に答える 1

5

全般的

People フィールドは非常に複雑ですが、ライブラリ ( SPUtility.js )を更新しながら、それらを使っていくつかの作業を行ってわかったことを説明するために最善を尽くします。SPUserFieldライブラリのクラスを見て確認できます。フィールドのリバース エンジニアリングには、主に Firebug + Firefox を使用しました。残念ながら、フィールドの生成方法は、使用するブラウザーによって異なります。

  • Firefox では通常の oldtextareaが表示されます。
  • IE では、コンテンツ編集可能な div を使用しているようです。

まず、フィールドを構成するコントロールのリスト:

  • upLevelDiv - downlevelTextBox によるコンテンツ編集可能な div
  • downlevelTextBox - テキストエリア
  • hiddenSpanData - データを格納するテキスト ボックス
  • checkNames - AJAX 経由で入力された名前を検証するためにユーザーがクリックする ImageButton

実際にはさらにいくつかのコントロールがありますが、それらが役立つとは思いませんでした (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 オブジェクトを解析してメールを読むだけです。

于 2010-11-11T20:16:11.300 に答える