Przy tworzeniu aplikacji dla SharePoint'a może zdarzyć się potrzeba ustawienia zawartości kontrolki PeopleEditor przy pomocy Javascript'u. Poniższy przykład wyjaśnia jak to zrobić.
<script type="text/javascript">
function SetPickerValue(pickerid, key, dispval)
{
var xml = '<Entities Append="False" Error="" Separator=";" MaxHeight="3">';
xml = xml + PreparePickerEntityXml(key, dispval);
xml = xml + '</Entities>';
EntityEditorCallback(xml, pickerid, true);
}
function PreparePickerEntityXml(key, dispval)
{
return '<Entity Key="' + key + '" DisplayText="' + dispval + '" IsResolved="True" Description="' + key + '"><MultipleMatches /></Entity>';
}
</script>
function SetPickerValue(pickerid, key, dispval)
{
var xml = '<Entities Append="False" Error="" Separator=";" MaxHeight="3">';
xml = xml + PreparePickerEntityXml(key, dispval);
xml = xml + '</Entities>';
EntityEditorCallback(xml, pickerid, true);
}
function PreparePickerEntityXml(key, dispval)
{
return '<Entity Key="' + key + '" DisplayText="' + dispval + '" IsResolved="True" Description="' + key + '"><MultipleMatches /></Entity>';
}
</script>
Najlepszą metodą jest użycie funkcji EntityEditorCallback. Jest ona dostępna wraz z innymi wbudowanymi funkcjami dostarczonymi z SharePointem (zarówno w WSS 3.0, MOSS2007 jak i SP2010). Ta sama funkcja jest używana przez kontrolkę PeopleEditor'a do ustawiania swojej własnej wartości.
Najważniejsze są dwa pierwsze parametry funkcji - XML zawierający dane oraz identyfikator kontrolki (ClientID) której zawartość ma być ustawiona.
Powyższy kod prezentuje funkcję SetPickerValue zawierającą zarówno generację odpowieniego XML'a jak i wywołanie funkcji EntityEditorCallback.
Poniżej przykład użycia funkcji SetPickerValue:
SetPickerValue('ctl00_PlaceHolderMain_pplEdit', 'domain\\j.kowalski','Jan Kowalski');
Powyższe wywołanie generuje taki XML:
<Entities Append="False" Error="" Separator=";" MaxHeight="3">
<Entity Key="domain\j.kowalski" DisplayText="Jan Kowalski" IsResolved="True" Description="domain\j.kowalski">
<MultipleMatches />
</Entity>
</Entities>
I przekazuje go do metody EntityEditorCallback.
Przy podawaniu nazwy konta domenowego należy zwrócić uwagę na znak \ (backslash). W języku Javascript jest to znak specjalny i nie można go używać bezpośrednio w parametrach tekstowych. Należy użyć \\ aby tekst był zinterpretowany jak znak backslash.
Aby ustawić zawartość PeopleEditora na kilka wartości na raz, trzeba zmodyfikować funkcję SetPickerValue tak, by generowała kilka węzłów <Entity /> w tworzonym XMLu. Każdy taki węzeł odpowiada jednej wartości w kontrolce.