Вы не указали версию SharePoint, но следующее объяснение относится к SharePoint 2007 и не было подтверждено в 2010 году.
Значение средства выбора людей можно установить, щелкнув значок «Проверить имена» или значок «Обзор».
Если щелкнуть значок «Проверить имена», который является тегом привязки, событие onclick вызывает «WebForm_DoCallback», который асинхронно отправляет HTTP-запрос на сервер SharePoint для проверки имени, введенного в средство выбора людей.
Ниже приведена подпись WebForm_DoCallback:
function WebForm_DoCallback(eventTarget,
eventArgument,
eventCallback,
context,
errorCallback,
useAsync){
...
}
Один из аргументов WebForm_DoCallbacks, который вас больше всего заинтересует, — это «eventTarget», текстовая область выбора людей. Вам также будет интересен 'eventCallback', так как это метод обратного вызова, вызываемый после возврата асинхронного HTTP-запроса. В данном случае это «EntityEditorHandleCheckNameResult(result, ctx)», определенный в ядре js.
Ниже приведено определение функции EntityEditorHandleCheckNameResult.
function EntityEditorHandleCheckNameResult(result, ctx)
{
EntityEditorClearWaitCursor(ctx);
EntityEditorCallback(result, ctx);
}
Обратите внимание, что он делегирует обработку событий методу EntityEditorCallback. Это также имеет место, если вы нажмете значок «Обзор», который откроет диалоговое окно для поиска и выбора пользователя. Значок «Обзор», очевидно, использует другой стек вызовов, но поскольку они оба полагаются на EntityEditorCallback, я сосредоточусь на этом методе, поскольку решение работает, когда вы нажимаете «Проверить имена» или «Обзор».
Чтобы выполнить код после вызова EntityEditorCallback, вы можете использовать следующий код:
var invokeAfterEntityEditorCallback = function(func) {
var old__EntityEditorCallback = EntityEditorCallback;
if (typeof EntityEditorCallback != 'function') {
EntityEditorCallback = func;
} else {
EntityEditorCallback = function(result, ctx) {
old__EntityEditorCallback(result, ctx);
func(result, ctx);
}
}
};
Ниже приведен настраиваемый обработчик событий средства выбора людей, который уведомляет о результате и идентификаторе текстовой области средства выбора людей:
function onPeoplePickerFieldSet(result, ctx){
alert(result);
alert(ctx);
}
Ниже приведена логика, позволяющая вызывать метод onPeoplePickerFieldSet после проверки или выбора имени средства выбора людей в диалоговом окне просмотра. Кроме того, этот оператор можно вызвать в обработчике событий document.ready, если вы используете jQuery.
invokeAfterEntityEditorCallback(onPeoplePickerFieldSet);
Аргумент «результат» метода onPeoplePickerFieldSet представляет собой XML-результат, указывающий на успешную проверку, а также полное имя пользователя домена. Следующий XML-код является примером, полученным после нажатия значка «Проверить имена»:
<Entities Append="False" Error="" Separator=";" MaxHeight="3">
<Entity Key="HOLLOWAY\csteel" DisplayText="Craig Steel" IsResolved="True" Description="HOLLOWAY\csteel">
<ExtraData>
<ArrayOfDictionaryEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DictionaryEntry>
<Key xsi:type="xsd:string">DisplayName</Key>
<Value xsi:type="xsd:string">Craig Steel</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">Email</Key>
<Value xsi:type="xsd:string">[email protected]</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">SPUserID</Key>
<Value xsi:type="xsd:string">16</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">PrincipalType</Key>
<Value xsi:type="xsd:string">User</Value>
</DictionaryEntry>
</ArrayOfDictionaryEntry>
</ExtraData>
<MultipleMatches />
</Entity>
</Entities>
Аргумент ctx — это идентификатор текстовой области средства выбора людей, который можно использовать в операторе селектора jQuery.
Вот и все!
person
Athens Holloway
schedule
18.12.2011