Category Archives: Розвиток SharePoint

Будьте обережні, порушуючи зміни до ItemStyle.xsl

Я працював з ItemStyle.xsl налаштувати зовнішній вигляд веб-частина запиту вмісту та право про час ленчу, Я зробив порушення змінити xsl. Я не розумію цього, але це було далекосяжні наслідки по всій колекції сайтів. Я пішов на обід і після мого повернення, помітив це повідомлення з'являється в купу місця:

Неможливо показати цієї веб-частини. Усунути проблему, Відкрийте цю сторінку веб-сумісні з Windows SharePoint Services HTML редактор, наприклад Microsoft Office SharePoint Designer, у. Якщо неполадку не виправлено, зверніться до адміністратора веб-сервера.

Я звинуватив клієнта (не розуміючи, як ще це була моя помилка на даний момент) але врешті-решт зауважив, що visual studio intellisense був попереджав мене що в мене було неправильно сформований XSL. Я виправив це і все, почав працювати.

Звертайте увагу на заштопаною при роботі з ItemStyle.xsl (і будь-який з глобальної XSL-файли) — розбиваючи їх впливає на багатьох апаратів в колекції сайтів.

<кінець />

Відображення вмісту результати запиту веб частина у вигляді сітки / Таблиці

Огляд і мета

З коробки, ЛИШАЙНИК’ Веб-частина запиту вмісту (CQWP) відображає результати в формат списку, аналогічні результати пошуку. Також можливе для відображення результатів у формі таблиці (тобто. Формат HTML-таблиці). Сітка форматами є краще в деяких обставин. Я описую, як добитися цього ефекту в цій статті.

Бізнес-сценарій

Я працював з клієнтом на в масштабах підприємства свиті МОСС. Ми розробили іх таксономії, така, що проектів першого класу громадян в ієрархії і мають свій власний сайт верхнього рівня. Менеджери проектів вести список singleton відомості про проект, Наприклад, заголовок, бюджет, очікується завершення дата, Решта бюджету та інші поля тип зведення. Від "Сінглтон" Я маю на увазі за настроюваним списком SharePoint гарантовано містять лише один елемент. Спрощено, це виглядає так:

зображення

Технічний підхід, так само, як описано Тут (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). На CQWP використовує XSL-перетворення випромінювати HTML для веб-переглядача для візуалізації.

Я завжди уявити собі результат перш ніж поринути у XSL, оскільки XSL кошмар. Ось мій бажаного результату:

зображення

HTML наступним чином генерує цього результату:

<HTML>
 <тіло>
 <Центр>
 <Таблиця кордону= 1>

<!-- Етикетки->
 <TR BGCOLOR= синій>
 <TD><шрифт колір= білий><b>Назва проекту</b></шрифт></TD>
 <TD Вирівняти= вправо><шрифт колір= білий><b>Повна дата</b></шрифт></TD>
 <TD Вирівняти= вправо><шрифт колір= білий><b>Бюджет</b></шрифт></TD>
 <TD Вирівняти= вправо><шрифт колір= білий><b>Фактичні витрати</b></шрифт></TD>
 <TD><шрифт колір= білий><b>Загальний стан</b></шрифт></TD>
 </TR>

<TR>
 <TD>Re-wire комп'ютерний зал.</TD>
 <TD Вирівняти= вправо>02/01/08</TD>
 <TD Вирівняти= вправо>22,500.00</TD>
 <TD Вирівняти= вправо>19,000.00</TD>
 <TD>Триває</TD>
 </TR>

<TR>
 <TD>Надання серверів для оновлення SQL</TD>
 <TD Вирівняти= вправо>04/01/08</TD>
 <TD Вирівняти= вправо>7,500.00</TD>
 <TD Вирівняти= вправо>0.00</TD>
 <TD>Заплановано</TD>
 </TR>

</Таблиця>
 </Центр>
 </тіло>
</HTML>

Підхід

Виконайте такі дії, щоб створити сітку:

  1. Визначення учасників Грід (рядки/стовпці).
  2. Визначити та створення необхідних сайт стовпців.
  3. Створення сайтів sub для проектів і singleton списки.
  4. Додати до CQWP на веб-сторінку і налаштувати його для пошуку ваших списків.
  5. Змінити на CQWP XML збирати додаткові стовпці.
  6. Змінити XSL для створення таблиці.

Я збираюся зосередитися на номер шість. Цифри, один через чотири роки є прямий вперед і те, що вже зроблено будь-якого користувача CQWP. Номер п'ять був добре документовані за інших, включаючи ця вичерпний знімок екрана Ладена стаття з MSDN Тут (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) і Хізер Соломон блог Тут (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Гайки і Болти

Почати та здійснити кроки один-п'ять згідно з MSDN документації та Хізер Соломон статті.

На даний момент, Додавання ваших CQWP на сторінку і у вас є свій <CommonViewFields> налаштований в разі необхідності.

Наступні кроки звичайна, Я отримую ці проміжні результати:

1. Створити тип вмісту, templatized особливий список для цього типу вмісту та двох сайтів. Ось типу вмісту:

зображення

Ось структура сайту:

зображення

2. Додати до CQWP після створення мого проекту підсайтів і singleton списки резюме проекту:

зображення

3. Додати додаткову інформацію, я хочу, через що <CommonViewFields>:

        <майно Ім’я="CommonViewFields" тип="рядок">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</майно>

Зверніть увагу, що я повинен був тримати всі поля властивостей на один рядок, або він не буде працювати (CQWP б сказати мені, що запит повернув жодних елементів).

4. На даний момент, Ми готові вийти за рамки статті MSDN і фліп Хізер Соломон статтю. Виконайте її дії, починаючи поблизу крок #5 Створення настроюваного / unghosted версія ItemStyle.xsl. Я слідувати порадам Хізер, вгору через крок 11 і отримати ці проміжні результати:

4.1: Назва мого XSL-шаблону наступним чином:

<перетворення XSL:ім'я шаблону = "сітки" матч = "рядок[@Style = "Сітка"]" режим = "itemstyle">

Я також трохи змінити її запропонував <перетворення XSL:для кожного …> шляхом додавання до <br /> тег, щоб забезпечити cleaner лістингу:

    <перетворення XSL:для кожного Виберіть="@*">
      P:<перетворення XSL:значення з Виберіть="Ім’я()" /><br/>
    </перетворення XSL:для кожного>

4.2: Я змінити веб-частини, сторінку вигляд і виберіть пункт мої "сітки" стиль:

зображення

Застосувати зміни, і ось результат:

зображення

Ми можемо бачити з вище, що поля ми хочемо (Назва проекту, рахунок, статус, д) доступні для нас, щоб використовувати, коли ми випромінюють HTML. Не тільки це, але ми бачимо імена, за допомогою якого ми повинні посилатися на ці стовпці в XSL. Наприклад, Ми посилання стан проекту як "Project_x005F_x0020_Name".

На даний момент, Ми відійти від блог Heather's і від плечей ці гіганти, Я додаю мої власні трохи.

ContentQueryMain.xsl

ПРИМІТКА: Коли внесення змін до ContentQueryMain.xsl як ItemStyle.xsl, Ви повинні перевірити ці файли назад в, перш ніж ви побачити ефект від зміни.

Для цілей Грід рішень, ЛИШАЙНИК використовує два різні XSL-файли, виробляти результати, які ми бачимо з за CQWP. Генерувати попередній біт виводу, Ми змінили ItemStyle.xsl. ЛИШАЙНИК фактично використовує інший файл XSL, ContentQueryMain.xsl до в поєднанні з ItemStyle.xsl генерувати його HTML. Як випливає з її назви, ContentQueryMain.xsl є головним"" XSL, яка контролює загальний потік перекладу. Це повторюється через всіх знайдених елементів та їх по черзі шаблони в ItemStyle.xsl. Ми будемо змінювати ItemStyle.xsl генерувати відкриту <Таблиця> Тег перед випромінюють перший рядок даних і закриття <Таблиця> Тег після випускають останній рядок. Для досягнення цієї мети, ContentQueryMain.xsl модифікація пройти два параметри до нашого "сітки" шаблон у ItemStyle.xsl, "останній рядок" і "поточний рядок". ItemStyle.xsl використовує дані умовно випромінювати необхідні Теги.

За допомогою техніки Хізер Соломона, ми знайти ContentQueryMain.xsl. Він знаходиться на тому ж місці, як ItemStyle.xsl. Цей знімок екрана повинен допомогти:

зображення

Нам необхідно внести наступні зміни:

  • Змінити xsl-шаблону, "CallItemTemplate" що дійсно викликає шаблон нашого сітки в ItemStyle.xsl. Ми пройдемо два параметри сітки шаблон, так що вона буде мати даних, він повинен генерувати умовно відкриття і закриття <Таблиця> Мітки.
  • Змінити ще трохи ContentQueryMain.xsl, який називає "CallItemTemplate" Щоб передати його "LastRow" параметр, так що LastRow може бути переданий шаблон нашого сітки.

Знайти шаблон з іменем «OuterTemplate.CallItemTemplate" визначені нитка:

  <перетворення XSL:Шаблон Ім’я="OuterTemplate.CallItemTemplate">

Замінити весь шаблон наступним чином:

  <перетворення XSL:Шаблон Ім’я="OuterTemplate.CallItemTemplate">
    <перетворення XSL:парам Ім’я="CurPosition" />

    <!--
      Додати "LastRow" параметр.
      Ми тільки використовувати його, коли елемент стилю перевалу в "Сітка".
    -->
    <перетворення XSL:парам Ім’я="LastRow" />

    <перетворення XSL:вибрати>
      <перетворення XSL:Коли тест="@Style = 'NewsRollUpItem'">
        <перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
          <перетворення XSL:з парам Ім’я="EditMode" Виберіть="$cbq_iseditmode" />
        </перетворення XSL:застосовувати шаблони>
      </перетворення XSL:Коли>
      <перетворення XSL:Коли тест="@Style = 'NewsBigItem'">
        <перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
          <перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
        </перетворення XSL:застосовувати шаблони>
      </перетворення XSL:Коли>
      <перетворення XSL:Коли тест="@Style = 'NewsCategoryItem'">
        <перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
          <перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
        </перетворення XSL:застосовувати шаблони>
      </перетворення XSL:Коли>

      <!--
              Пройти поточну позицію і lastrow до шаблону itemstyle.xsl сітка.
              ItemStyle.xsl використовуватиме які випромінюють відкритою і закриття <Таблиця> Мітки.
      -->
      <перетворення XSL:Коли тест="@Style = "Сітка"">
        <перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
          <перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
          <перетворення XSL:з парам Ім’я="Останнє" Виберіть="$LastRow" />
        </перетворення XSL:застосовувати шаблони>
      </перетворення XSL:Коли>

      <перетворення XSL:в іншому випадку>
        <перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
        </перетворення XSL:застосовувати шаблони>
      </перетворення XSL:в іншому випадку>
    </перетворення XSL:вибрати>
  </перетворення XSL:Шаблон>

Коментарі підхожий пояснювальний зміни.

Звичайно, "OuterTemplate.CallItemTemplate" сама називається з іншого шаблону. Знайдіть цей шаблон за допомогою функції пошуку для цього текстового рядка:

<перетворення XSL:Шаблон Ім’я="OuterTemplate.Body">

Перегляньте інструкції в OuterTemplate.Body і вставляти параметра LastRow наступним чином (показано як коментар курсивом):

<перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.CallItemTemplate">
  <перетворення XSL:з парам Ім’я="CurPosition" Виберіть="$CurPosition" />
  <!-- Вставити параметром LastRow. -->
  <перетворення XSL:з парам Ім’я="LastRow" Виберіть="$LastRow"/>
</перетворення XSL:дзвінок шаблон>

Після всіх цих, Ми, нарешті, є речі створені належним чином так, що нашими ItemStyle.xsl може випромінювати <Таблиця> Мітки у потрібному місці.

ItemStyle.Xsl

ПРИМІТКА: Знову, прибуття після внесення змін, щоб побачити ефект цих змін ItemStyle.xsl.

Ми маємо два завдання тут:

  • Замінити весь шаблон сітки. Ви можете копіювати/вставити знизу.
  • Додати деякі фетиш за межами визначенням шаблону, який дозволяє "formatcurrency" шаблон для роботи. (Ви можете сказати, що в мене є хитким ручкою на XSL).

Перший, у верхній частині ItemStyle.xsl, додати наступний рядок:

  <!-- Деякі фетиш, що дає нам можливість відображення США. валюти. -->
  <перетворення XSL:десятковий формат Ім’я="Персонал" цифра="D" />

  <перетворення XSL:Шаблон Ім’я="За промовчанням" матч="*" режим="itemstyle">

Зверніть увагу, що я додав його безпосередньо перед тим, як на <перетворення XSL:ім'я шаблону = "типовий" …> визначення.

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

  <перетворення XSL:Шаблон Ім’я="Сітка" матч="Рядок[@Style = "Сітка"]" режим="itemstyle">

    <!--
      ContentMain.xsl проходить CurPos і останній.
      Ми використовуємо ці умовно випромінювати відкритою і закриття <Таблиця> Мітки.
    -->
    <перетворення XSL:парам Ім’я="CurPos" />
    <перетворення XSL:парам Ім’я="Останнє" />

    <!-- Нижче подано змінні, незміненій від стандартних ItemStyle.xsl -->
    <перетворення XSL:Змінна Ім’я="SafeImageUrl">
      <перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetSafeStaticUrl">
        <перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'ImageUrl'"/>
      </перетворення XSL:дзвінок шаблон>
    </перетворення XSL:Змінна>
    <перетворення XSL:Змінна Ім’я="SafeLinkUrl">
      <перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetSafeLink">
        <перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'LinkUrl'"/>
      </перетворення XSL:дзвінок шаблон>
    </перетворення XSL:Змінна>
    <перетворення XSL:Змінна Ім’я="DisplayTitle">
      <перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetTitle">
        <перетворення XSL:з парам Ім’я="Назва" Виберіть="@Title"/>
        <перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'LinkUrl'"/>
      </перетворення XSL:дзвінок шаблон>
    </перетворення XSL:Змінна>
    <перетворення XSL:Змінна Ім’я="LinkTarget">
      <перетворення XSL:Якщо тест="@OpenInNewWindow = "True"" >_ blank</перетворення XSL:Якщо>
    </перетворення XSL:Змінна>

    <!--
      Тут ми визначаємо змінну, "tableStart".  Це містить HTML-код, який ми використовуємо для визначення відкриття таблиці, а також підписи стовпців.  Зверніть увагу, що якщо CurPos = 1, Вона включає в себе HTML теги CDATA.
      В іншому випадку, вона буде порожня.

      Значення tableStart є emited кожного разу, коли ItemStyle називається через ContentQueryMain.xsl.
    -->
    <перетворення XSL:Змінна Ім’я="tableStart">
      <перетворення XSL:Якщо тест="$CurPos = 1">
        <![CDATA[
        <межу таблиці = 1>
          <TR-bgcolor = "blue">
            <TD><колір шрифту = "Біле"><b>Назва проекту</b></шрифт></TD>
            <TD приєднуються = "право"><колір шрифту = "Біле"><b>Повна дата</b></шрифт></TD>
            <TD приєднуються = "право"><колір шрифту = "Біле"><b>Бюджет</b></шрифт></TD>
            <TD приєднуються = "право"><колір шрифту = "Біле"><b>Фактичні витрати</b></шрифт></TD>
            <TD><колір шрифту = "Біле"><b>Загальний стан</b></шрифт></TD>
          </TR>
        ]]>
      </перетворення XSL:Якщо>
    </перетворення XSL:Змінна>

    <!--
      Ще одна змінна, tableEnd просто визначає закриття таблиці тег.

      Як і у tableStart, Це завжди emited.  Саме тому його значення призначено умовно основі чи ми вже були передані останній рядок за ContentQueryMain.xsl.
    -->
    <перетворення XSL:Змінна Ім’я="tableEnd">
      <перетворення XSL:Якщо тест="$CurPos = $Last">
        <![CDATA[ </Таблиця> ]]>
      </перетворення XSL:Якщо>
    </перетворення XSL:Змінна>

    <!--
      Завжди виділяють вміст tableStart.  Якщо це не перший рядок, який прийняв до нас за ContentQueryMain.xsl, Потім ми знаємо його значення буде пустою.

      Вимкнути виводу втечі, тому що коли tableStart вона не порожні, Вона включає в себе фактичні HTML, які ми хочемо бути надані у браузері.  Якщо ми не кажи XSL аналізатор відключити виводу втечі, він буде генерувати такі речі, як"&lt;Таблиця&gt;" Замість того, щоб"<Таблиця>".
    -->
    <перетворення XSL:значення з Виберіть="$tableStart" вимкнути виводу втечі="Так"/>


    <TR>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <TD>
        <перетворення XSL:значення з Виберіть="@Project_x005F_x0020_Name"/>
      </TD>

      <TD Вирівняти="право">
        <перетворення XSL:значення з Виберіть="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD Вирівняти="право">
        <перетворення XSL:дзвінок шаблон Ім’я="formatcurrency">
          <перетворення XSL:з парам Ім’я="значення" 
Виберіть="@Project_x005F_x0020_Budget"></перетворення XSL:з парам> </перетворення XSL:дзвінок шаблон> </TD> <TD Вирівняти="право"> <перетворення XSL:дзвінок шаблон Ім’я="formatcurrency"> <перетворення XSL:з парам Ім’я="значення" Виберіть="@Project_x005F_x0020_Expenses">
</перетворення XSL:з парам> </перетворення XSL:дзвінок шаблон> </TD> <TD> <перетворення XSL:значення з Виберіть="@Project_x005F_x0020_Status"/> </TD> <!-- Всі наступні закоментовано прояснити речі. Однак, її повернути і все це в за <TD> щоб побачити його вплив. --> <!-- <DIV id = "linkitem" клас = "пункт"> <перетворення XSL:Якщо тест = "-довжина рядка($SafeImageUrl) != 0"> <DIV клас = "зображення області ліворуч"> <href = "{$SafeLinkUrl}" цільових = "{$LinkTarget}"> <IMG клас = "зображення фіксованої ширини" SRC = "{$SafeImageUrl}"
Alt = "{@ImageUrlAltText}"/> </на> </DIV> </перетворення XSL:Якщо> <DIV клас = "посилання елемент"> <перетворення XSL:дзвінок шаблон
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <href = "{$SafeLinkUrl}"
цільових = "{$LinkTarget}" Назва = "{@LinkToolTip}"> <перетворення XSL:значення з виберіть = "$DisplayTitle" /> </на> <DIV клас = "Опис"> <перетворення XSL:значення з select="@Description" /> </DIV> </DIV> </DIV>
--> </TR> <!-- Випромінюють закриття таблиці тег. Якщо ми не на останньому рядку, Це буде порожнім. --> <перетворення XSL:значення з Виберіть="$tableEnd" вимкнути виводу втечі="Так"/> </перетворення XSL:Шаблон> <перетворення XSL:Шаблон Ім’я="formatcurrency"> <перетворення XSL:парам Ім’я="значення" Виберіть="0" /> <перетворення XSL:значення з Виберіть='Формат номера($значення, "$DDD,DDD,DDD.DD", "персонал")' /> </перетворення XSL:Шаблон>

Стандартний WSS/МОСС даних запис екрани не підтримують каскадні розкривні меню (або інших внутрішньо-від спілкування)

ОНОВЛЕННЯ (04/2008): Цей прекрасний блог показує гарні javascript на основі підхід до цієї проблеми: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

ОНОВЛЕННЯ II: (04/2008): Цей запис у блозі виглядає багатообіцяючим, а також: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Кілька разів на тиждень, Якщо не щодня, Форум користувачів описують вимоги, які зазвичай буде зустрінута через каскадні розкривні меню. Наприклад, У мене є два елементи керування розкривного меню:

  • Перелік США. Штати
  • Перелік США. міст.

Як відповідальний UI постачальники, Ми хочемо, щоб діяти як це:

  • Пол вибирає в США. держава зі спадного списку.
  • Це викликає міст розкривається для фільтрації міст, які належать до вибраного стану.
  • Пол вибирає місто цей відфільтрованому списку.

Не існує поза коробки підтримки для цієї функції. Насправді, не існує Адміністрування підтримки для будь-якого прямого внутрішньо форми зв'язку. Це включає в себе програмним шляхом приховування/Увімкнення або вимикання поля у відповідь на зміни поле в іншому місці форми.

Реальна мета цієї статті до для опису можливих рішень і ці є варіанти, як я їх знаю:

  1. Розвивати Тип настроюваного стовпця. Custom колонки-розробника, у вас є повний контроль над світом"" Цей звичай стовпця. Ви можете здійснити cascading розкривається таким чином.
  2. Розглянути питання про використання робочого процесу. У деяких випадках, Щоб автоматично призначити значення поля на основі іншого поля значення. У цьому випадку, Ви зазвичай намагаються використовувати обчислюваний стовпець, але декілька разів, він просто не буде отримати роботу. Робочого циклу SharePoint Designer, відносно адмініструвати роздруку альтернативою скидає в код і visual studio. Якщо ви йдете цей маршрут, Майте на увазі питання вирішені у цій статті (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Обробники подій: Як робочий процес, Це рішення після факт. Обробник події є веб Асамблеї (C#, VB.NET) до якого SharePoint передає керування. Об'єкт, що ви розробляєте має доступ до даних у списку (і вся об'єктної моделі) і може робити будь-які необхідні розрахунок.
  4. Використати програму SharePoint Designer для створення форми для користувацьких вводу. Я не мають безпосередній досвід цей підхід, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Рол свій ASP.NET даних запис функція (як автономні веб-сторінки або веб-частини) і використання, що замість цього.

Якщо хто-небудь знає інший та/або краще параметри, будь ласка, пост коментар, і я буду оновлювати тіла цієї посади.

<кінець />

Бірки Technorati:

Створення горизонтальних смуг в SharePoint

Огляд:

(ОНОВЛЕННЯ 12/04/07: Додав ще один цікавий ресурс в кінці посилання на інший блог, який врегулював через дуже цікаву веб-частини)

Цей запис у блозі статті описано створення гістограми в SharePoint. Це працює в WSS, так і для ЛИШАЙНИКА середовищі, як це тільки залежить від веб-частині подання даних.

Структурований підхід виглядає наступним чином:

  1. Створити список або бібліотеку, що містить дані, потрібні для графа.
  2. Місце на пов'язана бібліотека документів / власний список на сторінці і перетворити його в веб-частині подання даних (DVWP).
  3. Змінити на DVWP XSL для генерації HTML, який показує, як граф.

Бізнес-сценарій / Налаштування:

Я створив за настроюваним списком з стандартних заголовок стовпця і один додатковий стовпець, "Статус". Цей моделей (дуже спрощено) "дозволу за рахунок" сценарій, де назва — проект і стан значення зі списку:

  • Запропоновано
  • У процесі
  • Глухий кут

Мета полягає в тому, виробляти інтерактивні горизонтальні графа барі, який показує ці коди стану.

Я мають населені списку, і це виглядає так:

зображення

Створити веб-частині подання даних:

Створити на DVWP шляхом додавання настроюваного списку на сторінку (сторінки сайту у моєму випадку) і дотримуйтесь інструкцій Тут (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

На додаток до просто створення на DVWP, Ми також доведеться настроїти властивість довантаження Показати всі доступні рядки. Для мене, це виглядає приблизно так:

зображення

На даний момент, Я завжди поруч, СПД і браузер. Я повторно відкрийте сторінку за допомогою браузера. Це дозволяє уникнути випадкового маки до веб-частини документа, на сторінці.

Змінити в XSLT:

Зараз настав час змінити в XSLT.

Я завжди використовую visual studio для цього. (Див. Тут важливі відомості про intellisense, які допоможуть вам багато чого).

Створити пусту проекту додати чотири нових файлів (замінивши слова "оригінал" і «New" в міру необхідності):

  • Original.XSLT
  • New.XSLT
  • Оригінальні Params.xml
  • Нові Params.xml

У моєму випадку, це виглядає так:

зображення

Змінення веб-частини та копіювання params і XSL оригіналу"" версія в Visual Studio.

Мета тут полягає в тому, викликають XSL трансформувати результатів, ми повернемося від DVWP запиту в HTML, що надає як граф.

З цією метою, Це допомагає спочатку розглянемо, що HTML повинна виглядати перед тим, як ми отримати з пантелику, божевілля, що відомо як "XSL". (Щоб було ясно, Нижче наведено просто приклад; не вводити його або копіювати/вставити в visual studio. Я надати повний удар відправною точкою для цього пізніше в записом). Наступний графік вибірки надані згідно з HTML, відразу ж після:

Sample Bar Graph

Відповідні HTML:

<HTML>
<тіло>
<Центр>
<Таблиця ширина = 80%>
<TR><TD><Центр>Горизонтальна гістограма графік</TD></TR>
<TR>
<TD приєднуються = "Центр">
<межу таблиці = "1" Ширина = 80%>
<TR>
<TD ширина = 10%>Відкриті</TD>
<TD><Таблиця cellpadding ="0" cellspacing ="0" межа = 0, ширина = 50%><TR bgcolor = червоний><TD>&nbsp;</TD></TR></Таблиця></TD>
</TR>
<TR>
<TD ширина = 10%>Закриті</TD>
<TD><Таблиця cellpadding ="0" cellspacing ="0" межа = 0, ширина = 25%><TR bgcolor = червоний><TD>&nbsp;</TD></TR></Таблиця></TD>
</TR>
<TR>
<TD ширина = 10%>Глухий кут</TD>
<TD><Таблиця cellpadding ="0" cellspacing ="0" межа = 0, ширина = 25%><TR bgcolor = червоний><TD>&nbsp;</TD></TR></Таблиця></TD>
</TR>
</Таблиця>
</TD>
</TR>
</Таблиця>
</тіло>
</HTML>

Я використав мертва проста підхід до створення мого барів можна настроїти колір фону ряд, щоб "червоні".

Винос тут це таке: Врешті-решт, все, що ми робимо створює HTML з рядків і стовпців.

Шаблон XSLT:

Я скопіював XSLT, який генерує горизонтальної гістограми. Це досить добре прокоментований так що я не буде додавати багато тут за винятком ці нотатки:

  • Я почав з за замовчуванням XSL для SharePoint Designer дали мені, коли я вперше створений в DVWP.
  • Я зміг скоротити це з СПД 657 лінії для 166 лінії.
  • Я не возитися з параметрів XML-файлу (який окремо від XSL, і ви будете знати, що я маю на увазі, що коли ви йдете, щоб змінити DVWP, сам; Існують два файли, ви можете змінити). Однак, для того, щоб спростити його, Я видалити майже всі з них з XSL. Це означає, що якщо ви хочете, щоб зробити використання цих параметрів, вам просто потрібно додати їх визначення змінних XSL. Що буде легко, тому що у вас буде оригінальні визначення змінних XSL в visual studio проекту.
  • Ви повинні мати можливість скопіювати і вставити це безпосередньо на ваш проект visual studio. Потім, видалити мої дзвінки та вставити ваш власний дзвінки на "ShowBar".
  • Буріння вниз робіт, створюючи послугами <href> Ось так: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Ця техніка може бути корисною в інших контекстах. Спочатку, Я думав, що мені потрібно, щоб відповідати більш складний формат: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, але в моєму оточенні, немає необхідності. У списку URL передається до нас SharePoint так що це досить легко для узагальнення.

От:

<перетворення XSL:таблиця стилів версія="1.0" виключити результат префікси="RS z o s ddwrt dt msxsl" 
xmlns:msxsl="Урна:схеми microsoft-com:XSLT" xmlns:перетворення XSL="http://www.w3.org/ 1999 / / перетворення XSL"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:ASP="http://schemas.microsoft.com/ASPNET/20" xmlns:: Сьогодні()), 1033, 'РРРРММДД') & gt; = ddwrt: FormatDateTime (рядок ( @TaskDueDate), 1033, 'РРРРММДД') "="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="Урна:схеми microsoft-com:офіс" xmlns:s="UUID:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:ДТ="UUID:C2F41010-65B3 - 11d-1-A29F-00AA00C14882" xmlns:RS="Урна:схеми microsoft-com:рядків" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="Урна:FrontPage:внутрішні"
> <перетворення XSL:вихід метод="HTML" відступ="Ні" /> <перетворення XSL:десятковий формат NaN="" /> <перетворення XSL:парам Ім’я="ListUrlDir"></перетворення XSL:парам> <!-- Мені потрібно це для підтримки за деталізації. --> <перетворення XSL:Шаблон матч="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.microsoft.com/ASPNET/20"
> <перетворення XSL:Змінна Ім’я="dvt_StyleName">Таблиці</перетворення XSL:Змінна> <перетворення XSL:Змінна Ім’я="Рядки" Виберіть="/dsQueryResponse, рядків, рядок" /> <перетворення XSL:Змінна Ім’я="dvt_RowCount" Виберіть="Граф($Рядки)" /> <перетворення XSL:Змінна Ім’я="IsEmpty" Виберіть="$dvt_RowCount = 0" /> <перетворення XSL:Змінна Ім’я="dvt_IsEmpty" Виберіть="$dvt_RowCount = 0" /> <перетворення XSL:вибрати> <перетворення XSL:Коли тест="$dvt_IsEmpty"> Немає даних, на графік!<br/> </перетворення XSL:Коли> <перетворення XSL:в іншому випадку> <!-- Цікаві речі тут починається. Нам необхідно визначити пари змінних для кожного рядка в графі: Загальна кількість елементів і відсоток від підсумку. --> <перетворення XSL:Змінна Ім’я="totalProposed" Виберіть="Граф(/dsQueryResponse, рядків, рядок[нормалізувати простір(@Status) = "Запропоновано"])" /> <перетворення XSL:Змінна Ім’я="percentProposed" Виберіть="$totalProposed div $dvt_RowCount" /> <перетворення XSL:Змінна Ім’я="totalInProcess" Виберіть="Граф(/dsQueryResponse, рядків, рядок[нормалізувати простір(@Status) = 'В процесі"])" /> <перетворення XSL:Змінна Ім’я="percentInProcess" Виберіть="$totalInProcess div $dvt_RowCount" /> <перетворення XSL:Змінна Ім’я="totalStalled" Виберіть="Граф(/dsQueryResponse, рядків, рядок[нормалізувати простір(@Status) = 'В глухий кут '])" /> <перетворення XSL:Змінна Ім’я="percentStalled" Виберіть="$totalStalled div $dvt_RowCount" /> <!-- Ми визначимо наших HTML-таблиці тут. Я впевнений, запозичення з деяких стандартних стилів SharePoint тут зробити відповідно до. Я думаю, що це буде вшановувати повідомляти, темою скасовує зміни глобального css файлу. --> <Таблиця Ширина="100%" cellspacing="0" cellpadding="2" стиль="права межа: 1 твердих #C0C0C0; межа знизу: 1 твердих #C0C0C0; тип межі ліворуч: тверді; ширина межі ліворуч: 1; тип межі Топ: тверді; ширина межі Топ: 1;"> <TR> <TD Вирівняти="Центр"> <Таблиця кордону="1" Ширина="100%"> <!-- Для кожного стану, що ми хочемо для графа, Ми називаємо "ShowBar" Шаблон. Ми передати його: 1. Етикетки для рядка. Це перетворюється на гіперпосилання. 2. Відсоток (Змінна зверху). 3. На фактичне ім'я поля коду від базової список. Це не потрібно відповідає відображуваному підпису. 4. Значення поля, що відповідає за #3. 5. Всього найменувань цей код стану (не Гран цілому всі коди стану). Він випромінює за <TR></TR> і лінії горизонтальна стрічка. Ми називаємо цей шаблон для кожного код стану, ми хочемо, щоб переглянути. --> <перетворення XSL:дзвінок шаблон Ім’я="ShowBar"> <перетворення XSL:з парам Ім’я="BarDisplayLabel" Виберіть="'Запропонував'"/> <перетворення XSL:з парам Ім’я="BarPercent" Виберіть="$percentProposed"/> <перетворення XSL:з парам Ім’я="QueryFilterFieldName" Виберіть=""Статус""/> <перетворення XSL:з парам Ім’я="QueryFilterFieldValue" Виберіть="'Запропонував'"/> <перетворення XSL:з парам Ім’я="TotalItems" Виберіть="$totalProposed"></перетворення XSL:з парам> </перетворення XSL:дзвінок шаблон> <перетворення XSL:дзвінок шаблон Ім’я="ShowBar"> <перетворення XSL:з парам Ім’я="BarDisplayLabel" Виберіть="'В глухий кут '"/> <перетворення XSL:з парам Ім’я="BarPercent" Виберіть="$percentStalled"/> <перетворення XSL:з парам Ім’я="QueryFilterFieldName" Виберіть=""Статус""/> <перетворення XSL:з парам Ім’я="QueryFilterFieldValue" Виберіть="'В глухий кут '"/> <перетворення XSL:з парам Ім’я="TotalItems" Виберіть="$totalStalled"></перетворення XSL:з парам> </перетворення XSL:дзвінок шаблон> <перетворення XSL:дзвінок шаблон Ім’я="ShowBar"> <перетворення XSL:з парам Ім’я="BarDisplayLabel" Виберіть="'У процесі'"/> <перетворення XSL:з парам Ім’я="BarPercent" Виберіть="$percentInProcess"/> <перетворення XSL:з парам Ім’я="QueryFilterFieldName" Виберіть=""Статус""/> <перетворення XSL:з парам Ім’я="QueryFilterFieldValue" Виберіть="'У процесі'"/> <перетворення XSL:з парам Ім’я="TotalItems" Виберіть="$totalInProcess"></перетворення XSL:з парам> </перетворення XSL:дзвінок шаблон> </Таблиця> </TD> </TR> </Таблиця> </перетворення XSL:в іншому випадку> </перетворення XSL:вибрати> </перетворення XSL:Шаблон> <!-- Цей шаблон робить роботу відображення окремих рядків у бар графіка. Ви, мабуть, зробити більшу частину вашої тонке налаштування тут. --> <перетворення XSL:Шаблон Ім’я="ShowBar"> <перетворення XSL:парам Ім’я="BarDisplayLabel" /> <!-- етикетки, щоб показати --> <перетворення XSL:парам Ім’я="BarPercent"/> <!-- Відсоток від підсумку. --> <перетворення XSL:парам Ім’я="QueryFilterFieldName"/> <!-- Використовували, щоб перейти до запиту & Фільтр --> <перетворення XSL:парам Ім’я="QueryFilterFieldValue"/> <!-- Використовували, щоб перейти до запиту & Фільтр --> <перетворення XSL:парам Ім’я="TotalItems" /> <!-- Загальна кількість цього barlabel --> <TR> <!-- У барі маркувати себе. --> <TD клас="MS-formbody" Ширина="30%"> <!-- Цей наступний набір заяви будує рядку запиту, що дозволяє нам бурити аж до відфільтроване подання даних. Ми робимо використовувати кілька речей тут: 1. Ми можемо передати FilterField1 і FilterValue1 щоб відфільтрувати стовпець списку. 2. SharePoint проходить ключевих параметрів нам, ListUrlDir, що вказує на базової список, проти яких цей DVWP "запущено". Це не задоволення XSL? --> <перетворення XSL:текст вимкнути виводу втечі="Так"> <![CDATA[<href ="]]></перетворення XSL:текст> <перетворення XSL:значення з Виберіть="$ListUrlDir"/> <перетворення XSL:текст вимкнути виводу втечі="Так"><![CDATA[?FilterField1 =]]></перетворення XSL:текст> <перетворення XSL:значення з Виберіть="$QueryFilterFieldName"/> <перетворення XSL:текст вимкнути виводу втечі="Так"><![CDATA[&FilterValue1 =]]></перетворення XSL:текст> <перетворення XSL:значення з Виберіть="$QueryFilterFieldValue"/> <перетворення XSL:текст вимкнути виводу втечі="Так"><![CDATA[">]]></перетворення XSL:текст> <перетворення XSL:значення з Виберіть="$BarDisplayLabel"/> <перетворення XSL:текст вимкнути виводу втечі="Так"><![CDATA[</на>]]></перетворення XSL:текст> <!-- Наступний біт показує деякі числа у форматі: "(всього / % від підсумка)" --> (<перетворення XSL:значення з Виберіть="$TotalItems"/> / <!-- Це створює хороший відсоток етикетки для нас. Дякую, Microsoft! --> <перетворення XSL:дзвінок шаблон Ім’я="percentformat"> <перетворення XSL:з парам Ім’я="відсотків" Виберіть="$BarPercent"/> </перетворення XSL:дзвінок шаблон>) </TD> <!-- Нарешті, випромінюють за <TD> тег для бару себе.--> <TD> <Таблиця cellpadding="0" cellspacing="0" кордону="0" Ширина="{Круглий($BarPercent * 100)+1}%"> <TR BGCOLOR="червоний"> <перетворення XSL:текст вимкнути виводу втечі="Так"><![CDATA[&nbsp;]]></перетворення XSL:текст> </TR> </Таблиця> </TD> </TR> </перетворення XSL:Шаблон> <!-- Це взято безпосередньо від деяких XSL, я знайшов у шаблоні MS. --> <перетворення XSL:Шаблон Ім’я="percentformat"> <перетворення XSL:парам Ім’я="відсотків"/> <перетворення XSL:вибрати> <перетворення XSL:Коли тест="Формат номера($відсотків, '#,##0%;-#,##0%')= 'NaN'">0%</перетворення XSL:Коли> <перетворення XSL:в іншому випадку> <перетворення XSL:значення з Виберіть="Формат номера($відсотків, '#,##0%;-#,##0%')" /> </перетворення XSL:в іншому випадку> </перетворення XSL:вибрати> </перетворення XSL:Шаблон> </перетворення XSL:таблиця стилів>

Результати:

XSL зверху генерує цей графік:

зображення

Буріння вниз до базових даних, натиснувши на код стану:

зображення

Заключні думки:

Це узагальнюється?

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

Вертикальні графіки:

Це горизонтальної гістограми. Звичайно можна створювати вертикальні графік. Нам просто необхідно змінити HTML. Я хотів би почати так само: Створити HTML-представництво інтересів вертикальної шкали і потім з'ясувати, як отримати, що через XSL. Якщо хтось зацікавлений у тому, що, Я міг переконати, щоб спробувати його і виробити kinks. Якщо хтось вже зробив, що, please let me know and I’ll gladly link to your blog 🙂

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

Поле Ім'я Gotcha:

Є принаймні дві речі треба подивитися з імен полів.

Перший, ім'я поля з пробілу має втік до XSL. Це, ймовірно, буде проблемою тут:

        <перетворення XSL:Змінна Ім’я="totalProposed" 
Виберіть="Граф(/dsQueryResponse, рядків, рядок[нормалізувати простір(@Status) = "Запропоновано"])" />

Якщо ваш "статус" стовпець насправді названий "код стану" потім вам потрібно посилатися на нього як "Status_x0020_Code":

   <перетворення XSL:Змінна Ім’я="totalProposed" 
Виберіть="Граф(/dsQueryResponse, рядків, рядок[нормалізувати простір(@Status_x0020_Code) = "Запропоновано"])" />

Другий, і я трохи нечіткої з цього, але ви також повинні бути напоготові змінює ім'я поля. Якщо ви називаєте ваш поле «код стану" а потім на, Перейменуйте його на "AFE статус", «Внутрішнє ім'я" не змінюється. Внутрішнє ім'я все одно буде "код стану" і повинна бути використана як "Status_x0020_Code". "Інші ресурси" посилання можуть допомогти діагностувати й виправити такого роду проблем.

Про цього кольору:

Я вибрав "червоний" тому що це приємний для мене на даний момент. Не було б велику справу для відображення різних кольорів, з тим щоб забезпечити більш, ніж просто візуальний Опис числа, але також надати корисні КПІ. Наприклад, Якщо відсоток "в глухий кут" AFE, є > 10% потім показати його червоний, в іншому випадку показати його в чорний. Використання <перетворення XSL:вибрати> для досягнення цієї мети.

Інші ресурси:

Щасливі трансформування!

<кінець />

Підписатися на мій блог!

Представляємо OM даних через за настроюваним списком (або, Ще інший OM даних Displayor [як YACC, Але інший])

Сьогодні, Я провів кілька годин відстеження вниз кореневої причиною, за повідомлення «Введене ім'я стовпця вже існує або захищені. Вибрати іншу назву."

Стовпці в питанні може бути створений, видаляється та створюється повторно в іншому середовищі, так що я знав, що це не було зарезервоване ім'я. Однак, Я просто не міг знайти в будь-якій колонці через стандартний інтерфейс користувача SharePoint в будь-якому сайті в колекції сайтів.

Я відправив до MSDN форумах тут і на Неприборканий Ендрю Вудворд вказав мені в напрямку базових даних моделі об'єкта.

Я пішов до codeplex щоб знайти деякі інструменти, які допомогли б мені зазирнути в базових даних Ом і допомогти мені знайти неприємності.

Я спробував кілька інструментів, і вони дуже круто і цікаво, але врешті-решт, інтерфейс користувача не був досить добре для моїх цілей. Я не критикувала їх будь-яким способом, але чітко інструмент творці не було моя проблема на увазі, коли вони створили їх UI :). Більшість людей, здається, бути інвестування чимало часу і зусиль у створенні робочих станцій / клієнтських застосунків, які надають дерево переглядів, правою кнопкою миші контекстне меню і так далі. Це хороший і всі, але це велика робота для створення Топ оф лайн користувацького досвіду, який також є дуже гнучким.

Мені дійсно потрібна відповідь на цю проблему. Мені спало на думку, якщо я міг би отримати всі стовпці сайту в колекції сайтів в за настроюваним списком, Я може фільтр, Сортувати та створення подань, що б допомогти мені знайти цей нібито наявний стовпець (що це було зроблено, ДО РЕЧІ). Я пішов вперед і зробив що і годину-дві пізніше, мав мій стовпці сайту завантажується в за настроюваним списком з групування, сортування і так далі. Я знайшов мою відповідь через п'ять хвилин.

Якщо я успішно взяти на себе світу, Я думаю, що буде указ, що всі SharePoint сервіс провайдерів повинні серйозно розглянути питання про наплавлення їх дані моделі об'єкта в особливий список. Таким чином, Я маю право для пошуку будь-яким чином я хочу (обмежені, Звичайно, за ознаками стандартний sharepoint).