Вы не указали версию 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);
Аргумент 'result' метода 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">csteel@holloway.net</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.
Вот и все!