activex.net.ru

ActiveX .NET SharePoint Утилиты Скрипты Статьи ... Форум

Статьи

Работа с контролом PeopleEditor с помощью JavaScript в SharePoint Server 2007 / WSS 3.0

Рассмотрим ситуацию, при которой на странице добавления нового элемента списка присутствует контрол выбора пользователя (тип столбца - "Person or Group") и необходимо заполнить его значением по-умолчанию.

Одним из решений данной задачи может быть использование на странице NewForm.aspx клиентского JavaScript для заполнения контрола PeopleEditor информацией об учетной записи пользователя.

Вариант, когда отображаемое имя пользователя известно.
1. В браузере откроем страницу добавления нового элемента списка NewForm.aspx и в содержимом HTML найдем сгенерированное значение атрибута id контрола выбора пользователя.
Пример значения id контрола: ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField

2. С помощью SharePoint Designer 2007 откроем страницу NewForm.aspx.

3. Найдем в содержимом aspx-страницы ASP.NET-контрол <asp:Content ContentPlaceHolderId="PlaceHolderTitleAreaClass" runat="server">

4. Сразу за кодом:
<script id="onetidPageTitleAreaFrameScript">
     document.getElementById("onetidPageTitleAreaFrame").className="ms-areaseparator";
</script>

вставляем следующий JavaScript-код:


<script language="javascript" type="text/javascript">
var ctx='ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField';
var xml='<Entities Append="False" Error="" Separator=";" MaxHeight="3">'+
'<Entity Key="DEVDOMAIN\\ivanov" DisplayText="Иван Иванов" IsResolved="True" Description="DEVDOMAIN\\ivanov">'+
'<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">Иван Иванов</Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">Email</Key><Value xsi:type="xsd:string"></Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">SPUserID</Key><Value xsi:type="xsd:string"></Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">PrincipalType</Key><Value xsi:type="xsd:string">User</Value></DictionaryEntry>'+
'</ArrayOfDictionaryEntry>'+'</ExtraData>'+'<MultipleMatches />'+'</Entity>'+'</Entities>';
EntityEditorCallback(xml, ctx);
</script>
и сохраняем страницу NewForm.aspx.
В переменной xml хранится XML-описание учетной записи пользователя. В данном случае - это пользователь с отображаемым именем Иван Иванов и учетной записью DEVDOMAIN\ivanov. Именно эта учетная запись будет по-умолчанию выводиться в контроле выбора пользователя на странице NewForm.aspx. JavaScript-метод, который выполняет всю основную работу по заполнению контрола - EntityEditorCallback. Этот метод определен в стандартной js-библиотеке core.js SharePoint 2007.

Вариант, когда отображаемое имя пользователя неизвестно.
1. В браузере откроем страницу добавления нового элемента списка NewForm.aspx и в содержимом HTML найдем сгенерированное значение атрибута id контрола выбора пользователя.
Пример значения id контрола: ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField

2. Аналогично найдем сгенерированное значение атрибута id ссылки на преобразование учетной записи в отображаемое имя. Это ссылка с иконки пользователя, рядом с текстовым полем. Нам необходимо значение атрибута id тега A, обрамляющего данное изображение.
Пример значения id ссылки: ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField_checkNames

3. С помощью SharePoint Designer 2007 откроем страницу NewForm.aspx.

4. Найдем в содержимом aspx-страницы ASP.NET-контрол <asp:Content ContentPlaceHolderId="PlaceHolderTitleAreaClass" runat="server">

5. Сразу за кодом:
<script id="onetidPageTitleAreaFrameScript">
     document.getElementById("onetidPageTitleAreaFrame").className="ms-areaseparator";
</script>

вставляем следующий JavaScript-код:

<script language="javascript" type="text/javascript">
var ctx='ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField';
var xml='<Entities Append="False" Error="" Separator=";" MaxHeight="3">'+
'<Entity Key="DEVDOMAIN\\ivanov" DisplayText="DEVDOMAIN\\ivanov" IsResolved="False" Description="DEVDOMAIN\\ivanov">'+
'<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"></Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">Email</Key><Value xsi:type="xsd:string"></Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">SPUserID</Key><Value xsi:type="xsd:string"></Value></DictionaryEntry>'+
'<DictionaryEntry><Key xsi:type="xsd:string">PrincipalType</Key><Value xsi:type="xsd:string">User</Value></DictionaryEntry>'+
'</ArrayOfDictionaryEntry>'+'</ExtraData>'+'<MultipleMatches />'+'</Entity>'+'</Entities>';
EntityEditorCallback(xml, ctx);
document.getElementById('ctl00_m_g_fd809cc2_6025_43f8_9a3e_d39f65e6e04e_ff2_1_ctl00_ctl00_UserField_checkNames').click();
</script>
и сохраняем страницу NewForm.aspx.
Работа данного кода аналогична указанному выше, за исключением того, что в XML-описании учетной записи пользователя в значении атрибута DisplayText указано имя учетной записи, значение атрибута IsResolved установлено в False, а также не указано значение параметра DisplayName. Последняя строка кода выполняет преобразование имени учетной записи пользователя в отображаемое имя. Эта операция аналогична нажатию на иконку "Check Names", расположенную рядом с текстовым полем контрола PeopleEditor.

Результат работы JavaScript-кода на странице NewForm.aspx:



Copyright © 2000-2017 Христофоров Юрий Rambler's Top100

   Rambler's Top100