Огляд і мета
З коробки, ЛИШАЙНИК’ Веб-частина запиту вмісту (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> |
Підхід
Виконайте такі дії, щоб створити сітку:
- Визначення учасників Грід (рядки/стовпці).
- Визначити та створення необхідних сайт стовпців.
- Створення сайтів sub для проектів і singleton списки.
- Додати до CQWP на веб-сторінку і налаштувати його для пошуку ваших списків.
- Змінити на CQWP XML збирати додаткові стовпці.
- Змінити 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 аналізатор відключити виводу втечі, він буде генерувати такі речі, як"<Таблиця>" Замість того, щоб"<Таблиця>". --> <перетворення 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:з парам Ім’я="значення" |
Це було неймовірно корисно. Дякую!
А-а… Саме тому, що я назвав мій стиль списку по-різному і не розумію, що у на ContentQueryMain.xsl це перевіряє наявність "стиль":
<перетворення XSL:Коли test="@Style='NameOfMyStyle'">
З цим перейменовано вона працювала. 🙂
Це майже працював для мене: Мені вдалося вихід на </Таблиця> кінець тега правильно, але відправною тег не вистачає. Мені здається, що тест = "$CurPos = 1" не Повертає true. Але чому?
Великий піст. Павло, я зробив все вище. У мене є запит, як я можу досягти сума "загальна ФАКТИЧНА затрати" або сума вартості дві колонки.
У вас зробити будь-яку роботу зі створення користувацьких ContentQueryMain і ItemStyle xsl-файли? Я прошу причина в тому, що я не хочу турбуватися про мою користувацькі стилі перезапису із виправлень та оновлень. У вас є приклади? Я спробував рішень ідентична копія на ContentQueryMain.xsl та завантаження що нового настроюваного копія Бібліотека стилів. Коли поставити посилання на xsl-файл в на .webpart MainXslLink майна, Я отримую 401 відсутня Авторизація. Користувацький XSL-текст файл опубліковану версію і кожна людина має доступ на читання до нього.
фантастичне посаду Спасибо! Була боротьба з цим зараз за останні кілька днів.
Привіт, Це було дійсно корисно проводки. Він у мене всі робочі, і також реалізовані Майк Браун змін, так що це груп
результати таблиці за все, що я вибираю як Групувати за параметром у на CQWB властивостях.
Я зробив назва посилання також, так, він прекрасно працює. Я до сих пір одна проблема, Хоча. Я впевнений, групування результатів за ім'я сайту. Всередині таблиці, Це групуються красиво, і це виглядає здорово, але це ще друк на всі групи
імена(у моєму випадку імена сайтів) над таблицею. Хто-небудь знає, як позбутися цих?
Дякую,
Грег
Nice статті. Я зумів дати мій стіл зовнішній вигляд за замовчуванням списки Sharepoint, аналізуючи вихідний код у списку. Нижче наведено основні блоки HTML, необхідні, щоб вона розмістилася в ItemStyle:
<Ширину ТАБЛИЦІ = "100%" клас = "ms-listviewtable" межа = 0 cellspacing = 0 cellpadding = 1 dir = "Нічого не">
<!–ВЕРХНІЙ КОЛОНТИТУЛ–>
<TR-клас = "ms-viewheadertr" VALIGN = ТОП>
<ГО nowrap сфери = "col" клас = "ms-vh2"><DIV стиль "ширина =:100%;позиція:відносні;ліворуч:0;Топ:0;">
<Стиль ТАБЛИЦІ "ширина =:100%;" CtxNum = "1" Висота = "100%" cellspacing = 1 cellpadding = 0 клас = "ms-unselectedtitle">
<TR>
<TD ширина = "100%" Клас = "ms-в. б." nowrap>
Texte du титр ici
</TD>
<TD стиль = "Позиція:Абсолютний;">
</TD>
</TR>
</ТАБЛИЦЯ></DIV>
</ГО>
<!–Повторіть для всіх клітинки заголовка–>
</TR>
<!– Таблиці даних –>
<TR-клас = "">
<!–Стовпець даних, Використовуйте Павла код для одного з гіперпосиланням –>
<TD клас = "ms-vb2">Дані тут</TD>
<!–Пустий стовпець–>
<TD клас = "ms-vb2">
<проліт dir = None></Тривалість><
/TD>
<!–Дата стовпця–>
<TD клас = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Альтернативний рядок – Використовувати нові XSL змінна, яка буде вставлено альтернативний клас заснований на поточному рядку за модулем 2–>
<TR-клас = "ms чергування">
…
</TR>
</ТАБЛИЦЯ>
Thatz саме я шукав...Рок людиною...Хай живе...Люблю тебе на цю посаду..
<перетворення XSL:застосовувати шаблони виберіть = "." режим = "itemstyle">
<перетворення XSL:з парам ім'я = "CurPos" Виберіть = "$CurPosition" />
<перетворення XSL:з парам ім'я = "останнє," Виберіть = "$LastRow" />
<перетворення XSL:з парам ім'я = "StartNewGroup" SELECT="@__begingroup" />
</перетворення XSL:Коли>
<перетворення XSL:коли перевірити = "$StartNewGroup" істина "">
<TR>
<TD >
<перетворення XSL:дзвінок шаблону name="OuterTemplate.GetGroupName">
<перетворення XSL:з парам ім'я = "GroupName" SELECT="@*[Ім’я()= $Group]"/>
<перетворення XSL:з парам ім'я = "GroupType" Виберіть = "$GroupType" />
</перетворення XSL:дзвінок шаблон>
</TD>
</TR>
</перетворення XSL:Коли>
<перетворення XSL:в іншому випадку>
</перетворення XSL:в іншому випадку>
</перетворення XSL:вибрати>
Привіт Павло,
Під час роботи з xml/xsl і змісту запиту веб-частини, Ви знайшли будь-які хороші способи форматування вашої xslt? Намагаються внести зміни і перевірити дизайн виявляється правильно біль в у в * * тільки за допомогою текстового редактора…
Усього найкращого
(Наприклад. https://myweb.com/Marketing/images/icn-order.gif, )
Я повинен використовувати зображення або зображення у тип поля CommonViewFields? (Наприклад. InternalColumnName, Зображення)
Ваша посада є те, що я шукав. Однак, Я не можу змусити його працювати.
У мене є документи, які зберігаються в різних doc. бібліотек, але класифікована використовуючи стовпець Користувальницькі клас (вибір: 1 або 2. Я хочу, щоб використовувати CQWP, щоб показати цих документів, на основі їх клас.
Я був в змозі додати на CQWP, експортувати його СПД, Настроювання itemStyle.xls Показати настроювані поля в поданні списку. Однак, Я міг би не успішно передбачено реалізацію, що ви описали тут.
Це стовпців, я хочу показати в моєму CQWP:
Тип файлу (Щоб відобразити піктограму)
Назву файлу
Дата останнього змінення
Модифіковані хто
Витягнуто до
Перевірив в коментарях
Теперішній час у мене результат у формат списку. Змінення його у формат, talble.
Дякую.
Saji
Вибачте за missspelling на моє ім'я не впевнені, де в ” прийшли з.