Агляд і мэты
З скрынкі, MOSS’ Запыт змесціва вэб-часткі (CQWP) паказвае іх у выглядзе спісу, similar to search results. It is also possible to display the results in a grid format (I.E. HTML фармаце табліцы). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Бізнес-сцэнар
I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, такія як назва, бюджэт, Чаканая дата завяршэння, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, гэта выглядае так:
Тэхнічны падыход з'яўляецца амаль такім жа, як апісана тут (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.
I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:
HTML, як гэта спараджае, што вынік:
<HTML> <цела> <цэнтр> <стол мяжа= 1> <!-- Этыкетка -> <тр BGCOLOR= Сіні> <TD><шрыфт колер= Белы><B>Назва праекта</B></шрыфт></TD> <TD выраўнаваць= Правы><шрыфт колер= Белы><B>Поўная дата</B></шрыфт></TD> <TD выраўнаваць= Правы><шрыфт колер= Белы><B>Бюджэт</B></шрыфт></TD> <TD выраўнаваць= Правы><шрыфт колер= Белы><B>Фактычны расход</B></шрыфт></TD> <TD><шрыфт колер= Белы><B>Агульны стан</B></шрыфт></TD> </тр> <тр> <TD>Re-правадной кампутарная зала.</TD> <TD выраўнаваць= Правы>02/01/08</TD> <TD выраўнаваць= Правы>22,500.00</TD> <TD выраўнаваць= Правы>19,000.00</TD> <TD>In Progress</TD> </тр> <тр> <TD>Прадастаўленне сервераў для абнаўлення SQL</TD> <TD выраўнаваць= Правы>04/01/08</TD> <TD выраўнаваць= Правы>7,500.00</TD> <TD выраўнаваць= Правы>0.00</TD> <TD>Запланаваны</TD> </тр> </стол> </цэнтр> </цела> </HTML> |
Падыход
Выканайце наступныя крокі для стварэння сеткі:
- Апісанне кампанентаў сеткі (радкоў / слупкоў).
- Вызначыць і стварыць неабходныя слупкі сайта.
- Стварэнне сайтаў для суб праектаў і Сінглтан спісы.
- Дадаць CQWP на вэб-старонку і наладзіць яго для пошуку вашых спісаў.
- Змяніць XML CQWP да сабраць дадатковыя слупкі.
- Змяніць XSL для стварэння табліцы.
I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN тут (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) і блог Хізэр Саламона тут (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Азы
Пачаць і ажыццяўляць крокі з першага па пяты ў адпаведнасці з MSDN дакументацыя і артыкулы Хізэр Саламона.
У гэты момант, вы дадалі CQWP на старонку, і ў вас ёсць <CommonViewFields> сканфігураваны як неабходныя.
Пасля звычайных крокаў, Я атрымліваю гэтыя прамежкавыя вынікі:
1. Стварыць тып кантэнту, a templatized custom list for that content type and two sites. Here is the content type:
Вось структура сайта:
2. Дадаць CQWP пасля стварэння майго праекта даччыных сайтаў і спісаў Сінглтан рэзюмэ праекта:
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. У гэты момант, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 для стварэння карыстацкага / unghosted version of ItemStyle.xsl. I follow Heather’s advice, праз крок 11 і атрымаць гэтыя прамежкавыя вынікі:
4.1: Маё імя XSL шаблон наступным:
<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Я таксама трохі змяніць яе прапанаваў <XSL:для кожнага, …> шляхам дадання <BR /> тэг, каб забяспечыць больш чыстае аб'яву:
<XSL:для кожнага, выбіраць="@ *"> P:<XSL:коштам ад выбіраць="імя()" /><бр/> </XSL:для кожнага,>
4.2: Я змяніць вэб-частка, go to appearance and select my "Grid" стыль:
Ужыць змены і вось вынік:
Як відаць са сказанага вышэй, мы хочам палёў (Назва праекта, расход, статус, і г.д.) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. Напрыклад, we reference Project Status as "Project_x005F_x0020_Name".
У гэты момант, мы сыйдзем з блога Хізэр і з плячэй гэтых гігантаў, Я дадаць уласныя трохі.
ContentQueryMain.xsl
УВАГА: Пры унясенні змяненняў у абодвух ContentQueryMain.xsl а таксама ItemStyle.xsl, Вы павінны праверыць гэтыя файлы назад у перш чым вы бачыце ўплыў змены.
Для сеткавых рашэнняў мэтаў, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <стол> Тэг да спрацоўвання першага радка дадзеных і закрыццё <стол> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" Шаблон ў ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Выкарыстоўваючы тэхніку Хізэр Саламона, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Нам трэба ўнесці наступныя змены:
- Змяніць шаблон XSL, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <стол> тэгі.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" параметр так, LASTROW можа быць перададзены на нашай сетцы пра шаблон.
Locate the template named "OuterTemplate.CallItemTemplate" ідэнтыфікуецца радком:
<XSL:шаблон імя="OuterTemplate.CallItemTemplate">
Замяніць ўвесь шаблон наступным:
<XSL:шаблон імя="OuterTemplate.CallItemTemplate"> <XSL:параметраў імя="CurPosition" /> <!-- Add the "LastRow" параметр. We only use it when the item style pass in is "Grid". --> <XSL:параметраў імя="LASTROW" /> <XSL:выбіраць> <XSL:калі тэст="@ Стыль = 'NewsRollUpItem'"> <XSL:Apply-шаблоны выбіраць="." рэжым="ItemStyle"> <XSL:з параметрам- імя="EditMode" выбіраць="$cbq_iseditmode" /> </XSL:Apply-шаблоны> </XSL:калі> <XSL:калі тэст="@ Стыль = 'NewsBigItem'"> <XSL:Apply-шаблоны выбіраць="." рэжым="ItemStyle"> <XSL:з параметрам- імя="CurPos" выбіраць="$CurPosition" /> </XSL:Apply-шаблоны> </XSL:калі> <XSL:калі тэст="@ Стыль = 'NewsCategoryItem'"> <XSL:Apply-шаблоны выбіраць="." рэжым="ItemStyle"> <XSL:з параметрам- імя="CurPos" выбіраць="$CurPosition" /> </XSL:Apply-шаблоны> </XSL:калі> <!-- Перадаць бягучае становішча і LASTROW ў шаблон ItemStyle.xsl Сетка. ItemStyle.xsl будзе выкарыстоўваць гэта, каб выпраменьваць адкрытыя і закрыццё <стол> тэгі. --> <XSL:калі тэст="Стыль @ = "Сетка""> <XSL:Apply-шаблоны выбіраць="." рэжым="ItemStyle"> <XSL:з параметрам- імя="CurPos" выбіраць="$CurPosition" /> <XSL:з параметрам- імя="Апошні" выбіраць="$LASTROW" /> </XSL:Apply-шаблоны> </XSL:калі> <XSL:у адваротным выпадку> <XSL:Apply-шаблоны выбіраць="." рэжым="ItemStyle"> </XSL:Apply-шаблоны> </XSL:у адваротным выпадку> </XSL:выбіраць> </XSL:шаблон> |
Каментары апісваюць мэта змяненняў.
Вядома, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<XSL:шаблон імя="OuterTemplate.Body">
Праглядзіце інструкцыі ў OuterTemplate.Body і ўстаўце параметр LASTROW наступным (паказана як каментар курсівам):
<XSL:выклік-шаблону імя="OuterTemplate.CallItemTemplate"> <XSL:з параметрам- імя="CurPosition" выбіраць="$CurPosition" /> <!-- Устаўце параметр LASTROW. --> <XSL:з параметрам- імя="LASTROW" выбіраць="$LASTROW"/> </XSL:выклік-шаблону>
Пасля ўсяго гэтага, мы, нарэшце, рэчы створаны належным чынам, каб нашы ItemStyle.xsl можа выпраменьваць <стол> тэгаў у патрэбным месцы.
ItemStyle.xsl
УВАГА: Зноў, рэгістрацыя ItemStyle.xsl пасля ўнясення змяненняў, так што вы ўбачыць эфект ад гэтых змен.
У нас ёсць дзве задачы тут:
- Replace the entire Grid template. You can copy/paste from below.
- Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (Вы можаце сказаць, што я маюць слабую ручку на XSL).
Першы, у верхняй частцы ItemStyle.xsl, дадайце гэты радок:
<!-- Некаторыя фетыш, які дазваляе нам прадстаўляць U.S. валюта. --> <XSL:дзесятковы фармат імя="персанал" лічба="Рэ" /> <XSL:шаблон імя="Змаўчанне" супадаць="*" рэжым="ItemStyle">
Звярніце ўвагу, што я дадаў яго непасрэдна перад <XSL:template name="Default" …> вызначэнне.
Наступны, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, але, не саромейцеся, пішыце мне ці пакінуць каментары ў блогу, калі ў вас ёсць пытанні.
<XSL:шаблон імя="Сетка" супадаць="Радок[Стыль @ = "Сетка"]" рэжым="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 выклікаецца праз . --> <XSL:пераменная імя="tableStart"> <XSL:калі тэст="$CurPos = 1"> <![CDATA[ <мяжы табліцы = 1> <tr bgcolor="blue"> <TD><font color="white"><B>Назва праекта</B></шрыфт></TD> <td align="right"><font color="white"><B>Поўная дата</B></шрыфт></TD> <td align="right"><font color="white"><B>Бюджэт</B></шрыфт></TD> <td align="right"><font color="white"><B>Фактычны расход</B></шрыфт></TD> <TD><font color="white"><B>Агульны стан</B></шрыфт></TD> </тр> ]]> </XSL:калі> </XSL:пераменная> <!-- Іншая пераменная, tableEnd проста вызначае зачыняе тэг табліцы. Як і tableStart, гэта заўсёды emited. Менавіта таму яго значэнне . --> <XSL:пераменная імя="tableEnd"> <XSL:калі тэст="$CurPos = $ Апошняя"> <![CDATA[ </стол> ]]> </XSL:калі> </XSL:пераменная> <!-- Заўсёды выпраменьваць ўтрыманне tableStart. Калі гэта не першы , то мы ведаем, яго значэнне . Забараніць маскіраванне tableStart таму што, калі ён не пусты, гэта . Калі , it will generate stuff like "&л;стол>" instead of "<стол>". --> <XSL:коштам ад выбіраць="$tableStart" адключыць-выхад-ўцёкі="ды"/> <тр> <!-- P:Project_x005F_x0020_Name :Project_x005F_x0020_End_x005F_x0020_Date :Project_x005F_x0020_Budget :Project_x005F_x0020_Expenses :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:з параметрам- імя="значэнне" |
Гэта было неверагодна карысна. Дзякуй!
Ааа… it was because I named my List Style differently and didn’t realise that in the ContentQueryMain.xsl it checks for the "style":
<XSL:when test="@Style=’NameOfMyStyle’">
Пры тым, што ён працаваў перайменаваны. 🙂
Гэта амаль працуе для мяне: Мне атрымоўваецца выводзіць </стол> Канчатковы тэг правільна, але стартавая тэг адсутнічае. It seems the test="$CurPos = 1" ня вяртаецца сапраўдным. Але чаму?
Вялікі пост. Павел I зрабіў усё вышэй рэчы. У мяне ёсць запыт, how can I achive the sum of "TOTAL ACTUAL Expences" або сумы значэнняў двух слупкоў.
Вы зрабілі любую працу з стварэння карыстацкіх ContentQueryMain ItemStyle і XSL файлы? Я таму пытаю, што я не хачу турбавацца аб маіх карыстацкіх стыляў перазапісу з выпраўленняў або абнаўленняў. У вас ёсць прыклады? Я паспрабаваў зрабіць ідэнтычную копію ContentQueryMain.xsl і загрузкі, што новыя карыстацкія копіі ў бібліятэцы стыляў. Пры ўсталёўцы спасылкі на гэты файл XSL ў MainXslLink уласнасці. WebPart аўтара, Я атрымліваю 401 ня дазволена. Карыстацкі файл XSL з'яўляецца апублікаванай версіяй і ўсе чыталі доступ да яго.
фантастычныя дзякуючы паведамленні! Змагаліся з гэтым у цяперашні час за апошнія некалькі дзён.
Прывітанне, гэта было сапраўды карысна размяшчэння. У мяне ўсе працоўныя, , А таксама праведзены змены Майк Браўн так, каб ён групах
Вынікі ўнутры табліцы любымі Я выбіраю як Група па параметры ва ўласцівасцях CQWB аўтара.
Я зрабіў назве спасылкі таксама, так ён працуе выдатна. Я да гэтага часу ёсць адна праблема, хоць. Я групоўка вынікаў па імя сайта. Ўнутры табліцы, ён групуе іх прыгожа, і гэта выглядае выдатна, Але гэта ўсё яшчэ Раздрукаваўшы ўсе групы
імёны(у маім выпадку імёны сайтаў) над сталом. Хто-небудзь ведае, як пазбавіцца ад гэтых?
Дзякуй,
Грег
Добрая артыкул. Мне атрымалася даць маім сталом знешні выгляд па змаўчанні спісы Sharepoint, аналізуючы зыходны код спісу. Вось асноўныя HTML блокаў, неабходных, каб змясціцца ў ItemStyle:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–Загаловак–>
<TR class="ms-viewheadertr" VALIGN = ТОП>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;становішча:адносны;пакінуў:0;верхні:0;">
<TABLE style="width:100%;" CtxNum="1" height="100%" cellspacing=1 cellpadding=0 class="ms-unselectedtitle">
<TR>
<TD width="100%" Class="ms-vb" NoWrap>
Texte дзю тытр ICI
</TD>
<TD style="position:абсалютны;">
</TD>
</TR>
</Табліца></спраў>
</TH>
<!–Паўтарыце для ўсіх вочак загалоўкаў–>
</TR>
<!– Табліца дадзеных –>
<TR class="">
<!–Дадзеныя калонкі, выкарыстоўваць код Паўла за першы з гіперспасылкай –>
<TD Class="ms-vb2">Дадзеныя тут</TD>
<!–Патрон–>
<TD Class="ms-vb2">
<Ці не прамежак рэж = Няма></пралёт><
/TD>
<!–Дата калонка–>
<TD Class="ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Альтэрнатыўныя радкі – Выкарыстанне новай зменнай XSL што будзе ўстаўляць альтэрнатыўны клас на аснове бягучай радкі па модулі 2–>
<TR class="ms-alternating">
…
</TR>
</Табліца>
Thatz менавіта я шукаў .. You Rock чалавек .. Няхай жыве .. Люблю цябе на гэты пост..
<XSL:apply-templates select="." mode="itemstyle">
<XSL:with-param name="CurPos" select="$CurPosition" />
<XSL:with-param name="Last" select="$LastRow" />
<XSL:with-param name="StartNewGroup" select="@__begingroup" />
</XSL:калі>
<XSL:when test="$StartNewGroup = ‘True’">
<тр>
<TD >
<XSL:call-template name="OuterTemplate.GetGroupName">
<XSL:with-param name="GroupName" select="@*[імя()= $ Group]"/>
<XSL:with-param name="GroupType" select="$GroupType"/>
</XSL:выклік-шаблону>
</TD>
</тр>
</XSL:калі>
<XSL:у адваротным выпадку>
</XSL:у адваротным выпадку>
</XSL:выбіраць>
Прывітанне Павел,
Пры працы з XML / XSL і змест запыту вэб-часткі, Вы знайшлі любыя добрыя спосабы фарматавання XSLT? Спроба ўнесці змены і правяраць канструкцыю аказваецца правай боль у ** толькі з дапамогай тэкставага рэдактара…
Усяго добрага
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Ці павінен я выкарыстоўваць малюнкі або выявы ў поле тыпу CommonViewFields? (e.g. InternalColumnName, Малюнак)
Your post is exactly what I was looking for. Аднак, I can’t get it to work.
I have documents that are stored in various doc. libraries but classified using a custom class column (выбар: 1 або 2. I want to use CQWP to show these documents based on thier class.
I was able to add the CQWP, export it to SPD, configure the itemStyle.xls to show custom fileds in list view. аднак, I could not successfully implement what you describe here.
These are the columns I want to show in my CQWP:
File Type (to show icon)
File Title
Date Last Modified
Modified By Who
Checked Out To
Checked In Comments
I currently have the result in a list format. How do I change it to a talble format.
Дзякуй.
Saji
Выбачайце за missspelling на маё імя не ўпэўнены, дзе ” прыйшлі з.