Вступ,. NET Framework, ASP, статті

Стаття для адміністраторів служб Microsoft Windows SharePoint
Services 2.0

Виникла необхідність в опитуваннях WSS використовувати не тільки текст, але
і картинки. Щоб користувачі могли висловлювати свою думку, не тільки
прочитавши текст, але і побачивши предмет (предмети) обговорення.

У друкованих матеріалах, присвячених WSS, є статті про те, як
додавати нові поля до шаблонів списків. Даний матеріал дуже корисний у
тому випадку, коли необхідно створювати списки з уже предзаданной набором
полів. Це все добре, але нам необхідно змінити не набір предзаданной
полів, а змінити "функціонал" поля. Зробити поле здатним відображати
картинку. Стандартних засобів SharePoint я не знайшов, довелося
розбиратися, як реалізувати цю потребу іншим способом.

У даній статті опишу своє рішення.

У роботі використовую Microsoft Windows SharePoint Services 2.0 російська
редакція. Реліз 6.0.2.5530. Для користувачів, які мають інші
локалізації WSS в таких шляхах необхідно замінювати 1049 на свій
lcid. Для англійської версії WSS це 1033.

В якості довідкової системи застосовую керівництво по Microsoft
Windows SharePoint Services SDK, яке завантажив з сайту:
<Field Name="_x0430__x043f__x044b__x0432__x04" FromBaseType="FALSE" Type="Choice" DisplayName= "Нове запитання" Format="RadioButtons" FillInChoice="FALSE" GridStartNum="1" GridEndNum="5" GridTxtRng1= "Низька" GridTxtRng2= "Середня" GridTxtRng3= "Висока" ColName="nvarchar2"> <CHOICES> <CHOICE>Варіант 1</CHOICE> <CHOICE>Варіант 2</CHOICE> <CHOICE>Варіант 3</CHOICE> </CHOICES> </Field>

З вище викладеного можна зробити такий висновок: Для того щоб в
опитуванні можна було використовувати картинки необхідно розширити XML
опис поля, додавши до нього атрибут, який зберігає посилання на картинку і
додати всі необхідні обробки цього атрибута. Наприклад, так:

<Field Name="_x0430__x043f__x044b__x0432__x04" 
FromBaseType="FALSE" 
Type="Choice" 
DisplayName= "Нове запитання" 
PictureURL="http://MyWeb/mypict.jpg" 
Format="RadioButtons" 
FillInChoice="FALSE" 
GridStartNum="1" 
GridEndNum="5" 
GridTxtRng1= "Низька" 
GridTxtRng2= "Середня" 
GridTxtRng3= "Висока" 
ColName="nvarchar2">
<CHOICES>
<CHOICE>Варіант 1</CHOICE>
<CHOICE>Варіант 2</CHOICE>
<CHOICE>Варіант 3</CHOICE>
</CHOICES>
</Field>

Зміни торкнуться ті сторінки, за допомогою яких створюються,
редагуються і відображаються питання. За створення питання відповідає
сторінка qstnew.aspx, За редагування qstedit.aspx, А за
відображення відповідальність несе шаблон опитування, що зберігається у файлі
Schema.xml.

Почнемо вносити зміни в наступному порядку:

  1. Створимо новий шаблон опитування. Це дозволить нам на наступному кроці
    посилатися на новий вид опитування.
  2. Змінимо файли створення і редагування питань. Це дозволить
    розширити XML опис поля
  3. Внесемо зміни в файл визначення Schema.xml. Це дозволить
    побачити роботу нового опитування в дії.

Створення нового шаблону

Шаблон списку складається з двох частин: оголошення шаблону і папки з
файлами шаблону.

Наш Графічний опитування – буде дуже схожий на наявний в системі
стандартний опитування. Тому новий шаблон створимо на базі наявного
шаблону "Опитування" (voting).

Додавання оголошення шаблону

  1. Відкриємо файл Local_Drive: Program FilesCommon FilesMicrosoft
    SharedWeb Server
    Extensions60TEMPLATE1049Site_Template_NameXMLONET.xml.
  2. Знайдемо елемент ListTemplates
  3. Усередині елемента ListTemplates скопіюємо дочірній елемент,
    <ListTemplate 
    Name="voting" 
    DisplayName= "Опитування" 
    Type="102" 
    BaseType="4" 
    OnQuickLaunch="TRUE" 
    SecurityBits="12" 
    Description= "Опитування служать для з'ясування думок інших відвідувачів веб-сайту. 
    Опитування мають спеціальні можливості, що дозволяють швидко створювати питання і визначати, 
    яким чином користувачі повинні відповідати на них. " 
    Image= "/ _layouts / Images / itsurvey.gif"> 
    </ListTemplate>
    

    а потім створимо копію в цьому ж елементі ListTemplates.

  4. У копії змінимо значення атрибутів:
    • Name з "voting"
      на "graphvoting" (Читай
      примітку нижче)
    • DisplayName з
      "Опитування" на "Графічний опитування"
    • Type з "102"
      на "777". (Читай примітка
      нижче)
    • Значення атрибута Description
      змініть на свій розсуд.

Створення папки з файлами шаблону

Файли шаблону розташовані в окремій папці. Ім'я папки повинно суворо
співпадати із значенням атрибута Name елемента
ListTemplate. У нашому випадку це
graphvoting. Створимо папку з файлами шаблону. Для цього:

  1. Відкриємо папку Local_Drive: Program FilesCommon FilesMicrosoft
    Sharedweb server extensions60TEMPLATE1049 Site_Template_Name
    LISTS
  2. У ній зробимо копію папки Voting. Копії дамо ім'я, що збігається
    зі значенням атрибута Name в новому елементі
    ListTemplate. У нашому випадку це ім'я
    буде graphvoting. У мене вийшло так: Local_Drive: Program
    FilesCommon FilesMicrosoft Sharedweb server
    extensions60TEMPLATE1049 Site_Template_Name LISTSGRAPHVOTING)
  3. У новій папці відкриємо файл SCHEMA.xml
  4. Змінимо значення атрибутів елемента List
    таким чином, щоб вони відповідали нашому шаблоном.
    <List
    xmlns:ows="Microsoft
    SharePoint" Name="GraphVoting"
    Title= "Графічне
    голосування / опитування " Direction="0"
    Url="Lists/graphvoting"
    BaseType="4">
  5. Перевіримо правильність внесених змін. Для цього:
    1. збережемо всі відкриті файли
    2. перезапустить WSS
    3. в веб браузері відкриємо сторінку SharePoint
    4. перейдемо в розділ "Створити"

У розділі "Опитування" повинні міститися два елементи: Опитування та
Графічний опитування. Якщо це так, значить все зроблено правильно.

При спробі створити "Графічний опитування" буде створено звичайний опитування, з
тією лише різницею, що у нового списку номер батька (базового шаблону
– BaseTemplate) буде не 102, а 777.

Детальніше про створення шаблонів списків можна прочитати у статті
"Creating a List Definition". Адреса статті:
... </HEAD> <% //Sima String strPictureURL = ""; String strBaseTemplate = spList.BaseTemplate.ToString(); //Sima ...

  • Відшукаємо в коді java функцію SubmitPage (). Після оголошення
    змінної DisplayName додасть наступний код:

    ...
    <% if( strBaseTemplate == "777" ){ %> 
        var PictureURL = TrimSpaces( frm.PictureURL.value ); 
    <% } %>
    ...
    
  • У цій же java функції відшукаємо оголошення змінної Schema (var
    Schema = …). У цій частині функції починається формування XML
    схема опису питання. Нижче рядки:

    (DisplayName? 'DisplayName = "' + SimpleHTMLEncode (DisplayName) + '"':'') + 
    

    додамо:

    <% if( strBaseTemplate == "777" ){ %> 
    (PictureURL? 'PictureURL = "' + SimpleHTMLEncode (PictureURL) + '"':'') + 
    <% } %>
    
  • Повторимо дії описані в п.5 в районі ще одного опису
    змінної Schema, яке знаходиться нижче по тексту функції.
  • Нижче по тексту файлу знайдемо оголошення HTML форми:
    <FORM name=frmFieldData method=post style="margin: 0" onSubmit="return false;">
    
  • Тепер знайдемо місце в HTML формі де оголошується поле введення
    питання:

    <LABEL for="idColName">Питання:</LABEL><FONT size=3> </FONT><BR>
    <TABLE border=0 cellspacing=1>
    	<TR>
    		<TD colspan=2>
    			<TEXTAREA cols=40 rows=3 
    				name="DisplayName" 
    				id="idColName" 
    				size=30>
    <% SPEncode.WriteHtmlEncode (Response, strDisplayName);%>
    				</TEXTAREA>
    		</TD>
    	</TR>
    </TABLE>
    
  • Нижче додамо:
    <% if( strBaseTemplate == "777" ){ %>
    <LABEL for="idPictureURL">Адреса картинки:</LABEL><FONT size=3> </FONT><BR>
    <TABLE border=0 cellspacing=1>
    	<TR>
    		<TD colspan=2>
    			<TEXTAREA cols=40 rows=1 
    				name="PictureURL" 
    				id="idPictureURL" 
    				size=30>
    				<%SPEncode.WriteHtmlEncode(Response, strPictureURL);%>
    				</TEXTAREA>
    		</TD>
    	</TR>
    </TABLE>
    <% } %>
    

    Тепер, при використанні графічного опитування буде відображатися
    додаткове поле для вводу (редагування) URL картинки.

  • Остання зміна стосується лише файлу редагування
    питання qstedit.aspx. Воно пов'язане з отриманням значення URL
    картинки зі схеми редагованого питання. У тексті знайдемо наступний
    рядки:

    ...
    strField = Request.QueryString.GetValues("Field")[0];
    spField = spFields.GetFieldByInternalName(strField);
    

    нижче додамо код з вилучення URL з XML схеми:

    //Sima
    if( strBaseTemplate == "777" )
    {
    	System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
    
    	xmlDoc.LoadXml(spField.SchemaXml.ToString());
    	System.Xml.XmlNode xn = xmlDoc.FirstChild;
    System.Xml.XmlAttribute xa = xn.Attributes ["PictureURL"];
    	if( xa != null )
    	{
    		strPictureURL =  xa.Value;
    	}
    }
    //Sima
    
  • Протестуємо наші додатки. Для цього:

    1. Перейдемо до розділу щодо створення елементів WSS
    2. Почнемо створювати графічний опитування
    3. Після вказівки назва опитування та інших даних ми перейдемо до
      формуванню першого питання.
    4. Нижче поля "Питання:" ми повинні побачити поле "Адреса картинки:"
    5. Якщо все так, напишемо питання і вкажемо URL адресу картинки.
    6. Після натискання на кнопку "Готово" перейдемо на сторінку налаштування
      опитування.
    7. У розділі "Питання" клацнемо на наше запитання і перейдемо на сторінку
      редагування питання
    8. Нижче поля "Питання:" повинна бути полі "Адреса картинки:", в
      якому відображено введений нами URL картинки.
    9. Якщо все так, значить, ми все зробили вірно, і можна приступати до
      останньої заключної частини.

    Ми прийшли до того, що у нас є новий вид опитування, ми може задавати
    і редагувати значення додаткового поля PictureURL, але ми не бачимо
    ніяких картинок в процесі відповіді на опитування. Чому так?

    Вся справа в тому, що форма, яка виводиться на етапі відповіді, не
    відображає картинку. Щоб виправити цю ситуацію необхідно внести
    зміни в файл Schema.xml, який визначає всі форми майбутніх
    графічних опитувань. Як це зробити описано нижче.

    Примітка: Можливо, перед виконанням вище описаного тесту
    доведеться перезапустити служби WSS. Після проведення тесту, створений
    опитування можна видалити. На наступному етапі ми будемо створювати нові опитування.

    Зміна файлу визначення Shema.xml

    Продовжимо зміна файлу Local_Drive: Program FilesCommon
    FilesMicrosoft Sharedweb server extensions60TEMPLATE1049
    Site_Template_Name LISTSGRAPHVOTINGSCHEMA.xml.

    Згідно документа
    <HTML><![CDATA[<TR><TH colspan="2" nowrap valign=top class="ms-formlabel">]]></HTML> <Property Select="DisplayName" HTMLEncode="TRUE" AutoNewLine="TRUE"/> <Switch> <Expr><Property Select="Required"/></Expr> <Case Value="TRUE"> <HTML><![CDATA[<font color=red> *</font>]]></HTML> <SetVar Scope="Request" Name="HasRequired">TRUE</SetVar> </Case> </Switch> <HTML><![CDATA[</TH></tr><tr><td align="center" valign="top">]]></HTML> <Switch> <Expr><Property Select="PictureURL"/></Expr> <Case Value=""> <HTML><![CDATA[ ]]></HTML> </Case> <Default> <HTML><![CDATA[<IMG align="center" valign="top" src="http://www.ishodniki.ru/""]]></HTML> <Property Select="PictureURL" HTMLEncode="TRUE" AutoNewLine="TRUE"/> <HTML><![CDATA["/>]]></HTML> </Default> </Switch> <HTML><![CDATA[</td> <TD class="ms-formbody"><TABLE cellPadding=2 border=0><tr><td width=20px></td><td> ]]></HTML>

    У цьому фрагменті ми трохи змінили таблицю, за допомогою якої
    формується зовнішній вигляд питання. До таблиці ми додали новий осередок,
    в яку будемо виводити картинку. URL картинки отримаємо з атрибуту
    PictureURL за допомогою елемента Property:

    <Property Select="PictureURL" HTMLEncode="TRUE" AutoNewLine="TRUE"/>.  
    

    При цьому будемо визначати, а чи варто взагалі вставляти
    картинку. Якщо значення атрибута PicrtureURL пусте картинку
    виводити не будемо. Перевірку виконаємо, скориставшись структурою:

    <Switch>
    <Expr><Property Select="PictureURL"/></Expr>
    <Case Value="">
    Значення порожнього - картинка не ВИВОДИТЬ <HTML><![CDATA[ ]]></HTML>
    </Case>
    <Default>
    ЗНАЧЕННЯ Непусті - виведення картинки <HTML
    ><![CDATA[<IMG align="center" valign="top" src="http://www.ishodniki.ru/""]]></HTML>
    <Property Select="PictureURL" HTMLEncode="TRUE" AutoNewLine="TRUE"/>
    <HTML><![CDATA["/>]]></HTML>
    </Default>
    </Switch>
    
  • Тепер збережемо файл Schema.xml, перезапустити службу SharePoint
    і оновимо сторінку опитування.
  • Якщо, нижче тексту питання Ви побачили необхідну картинку (див.
    початок статті), значить, можете себе привітати, Ви все зробили
    правильно.
  • Останнім штрихом залишилося ще раз відредагувати файл
    Schema.xml. Близько рядка "Повернутися до опитування" приберемо раніше
    додані опорний номери, ще раз перезапустити службу Windows
    SharePoint Services і можна користуватися новим приємним оку
    опитуванням.
  • Висновок

    В даній статті розглянуто приклад розширення функціональних
    можливостей Windows SharePoint Services 2.0, показана відкритість і
    розширюваність даного засобу.

     

    Приємною роботи

    ___________________________

    З повагою, Удалов Максим

    Схожі статті:


    Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

    Коментарів поки що немає.

    Ваш отзыв

    Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    *

    *