Áttekintést és célja
Kívül a doboz, MOSS’ Tartalomlekérdezési kijelző (CQWP) lista formátumban jeleníti meg az eredményeket, hasonló a keresési eredmények. Az is lehetséges, hogy az eredmény megjelenjen a rács formátumú (i.e. HTML-táblázat formátumban). Rács formátumok jobbak, bizonyos körülmények között. Leírja, hogyan, hogy ebben a cikkben hatás eléréséhez.
Üzleti forgatókönyv
Én dolgoztam egy ügyfél, egy vállalati szintű MOSS kiépítése. A besorolás úgy terveztük, hogy projektek első osztályú polgár a hierarchiában, és a saját felső szintű webhely. A projektmenedzserek fenntartani a projekt összefoglaló információit singleton listáját, mint a cím, költségvetés, várható elkészülési dátum, fennmaradó költségvetés és más összesítő típusú mezők. A "szingli" Úgy értem, egyéni SharePoint lista tartalmaz egyetlen tétel garantált. Leegyszerűsítve, úgy néz ki mint ez:
A technikai megközelítés, nagyjából ugyanaz, mint a leírt itt (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). A CQWP egy XSL-átalakító segítségével bocsátanak ki a HTML a böngésző tétele.
Mindig elképzelni az eredményt, mielőtt megmártózna az XSL, mert az XSL egy rémálom. Itt van a kívánt eredményt:
HTML-mint ez generál eredményező:
|
<HTML>
<szerv>
<központ>
<táblázat határ= 1>
<!-- Címkék-->
<TR Háttérszín= kék>
<TF><betűtípus szín= fehér><b>Projekt neve</b></betűtípus></TF>
<TF igazításajobbra =><betűtípus szín= fehér><b>Teljes dátum</b></betűtípus></TF>
<TF igazításajobbra =><betűtípus szín= fehér><b>Költségvetés</b></betűtípus></TF>
<TF igazításajobbra =><betűtípus szín= fehér><b>Tényleges ráfordítás</b></betűtípus></TF>
<TF><betűtípus szín= fehér><b>Általános állapot</b></betűtípus></TF>
</TR>
<TR>
<TF>Újra a számítógépes teremben vezeték.</TF>
<TF igazításajobbra =>02/01/08</TF>
<TF igazításajobbra =>22,500.00</TF>
<TF igazításajobbra =>19,000.00</TF>
<TF>A folyamatban lévő</TF>
</TR>
<TR>
<TF>Rendelkezésre a szerverek az SQL Upgrade</TF>
<TF igazításajobbra =>04/01/08</TF>
<TF igazításajobbra =>7,500.00</TF>
<TF igazításajobbra =>0.00</TF>
<TF>A tervezett</TF>
</TR>
</táblázat>
</központ>
</szerv>
</HTML>
|
Megközelítés
Kövesse az alábbi lépéseket, hogy hozzon létre a rács:
- A rács összetevőinek azonosítása (sorok/oszlopok).
- Határozza meg, és szükséges webhelyoszlopok létrehozása:.
- A projektek és a listák singleton weboldalak létrehozása.
- A CQWP hozzá egy weblaphoz, és beállítani, hogy a listák keresése.
- A CQWP XML-összegyűjti a további oszlopok módosítása.
- Az XSL-táblázatok létrehozása, módosítása.
Vagyok lesz, hogy a hat. Számok keresztül négy egyenes továbbít, és valamit, ami bármely CQWP felhasználó már. Az ötödik már jól dokumentált, mások, beleértve a teljes képernyő-shot terhelt cikk MSDN itt (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) és Heather Solomon's blog itt (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Anyák és csavarok
Kezdődik, és hajtsa végre a lépéseket egy öt, az MSDN-dokumentációban és Heather Salamon cikk.
Ezen a ponton, a CQWP hozzáadott az oldalra és már a <CommonViewFields> szükség szerint konfigurálva.
A szokásos lépések, Kapok ilyen közbenső eredmények:
1. Tartalomtípus létrehozása, sablonokkal egyéni lista tartalomtípushoz tartozó és a két telek. Itt van a tartalomtípus:
Itt van a webhelyszerkezet:
2. Az CQWP hozzáadása után az én projekt alwebhelyek és egyedi projekt összefoglaló listák létrehozása:
3. A kiegészítő információkat szeretné, keresztül a <CommonViewFields>:
<ingatlan név="CommonViewFields" típus="karakterlánc">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</ingatlan>
Ne feledje, hogy meg kellett tartani minden tulajdonságmezőt egy sorban, vagy nem működik (CQWP azt mondja, hogy a lekérdezés eredménye nem elemek).
4. Ezen a ponton, készen állunk, hogy túllépjünk az MSDN-cikket és flip-a cikket Heather Salamon. Ő lépésekkel kezdő lépés közelében #5 hogy hozzon létre egy testreszabott / unghosted változat-ból ItemStyle.xsl. Én követ a Heather barátait tanácsadás, keresztül lép fel 11 és ezek a részeredmények:
4.1: Az XSL-sablont a következőképpen nevezze:
<XSL:sablon neve = "rács" mérkőzés = "sor[@Style = "Hálózat"]" Mode = "itemstyle">
Is kissé módosítani, ő azt javasolta <XSL:for each …> hozzáadásával egy <br /> cédula-hoz beszerez egy tisztább lista:
<XSL:for each Válassza ki="@*">
P:<XSL:érték-ból Válassza ki="név()" /><br/>
</XSL:for each>
4.2: Módosítható a kijelző, megy megjelenését, és válassza a "Grid" stílus:
Alkalmaz a cserél, és itt az eredmény:
A fentiekből látjuk-e, hogy a mezőket szeretnénk (Projekt neve, költség, állapot, stb) elérhető számunkra, hogy használja, ha a kibocsátó a HTML. Nem csak, hogy, de azt látjuk, a nevét, amellyel mi hivatkoznia kell azokat az oszlopokat az XSL. Például, Mi referencia projektállapot-mint "Project_x005F_x0020_Name".
Ezen a ponton, Mi indulnak, Heather barátait blog, és ezek az óriások vállán, Én hozzá a saját kis.
ContentQueryMain.xsl
MEGJEGYZÉS:: Hogy mind a ContentQueryMain.xsl, valamint a ItemStyle.xsl, le kell ellenőrizni, mielőtt a változtatások hatásainak megtekintéséhez vissza ezeket a fájlokat.
Rács-gyártás céljából, MOSS használja két különböző XSL-fájlok eredményekkel, azt látjuk, a CQWP. Generálni a korábbi bit kimeneti, ItemStyle.xsl módosítása. MOSS valójában használ egy XSL-fájl, Generálni a HTML ItemStyle.xsl együtt a ContentQueryMain.xsl. Ahogy nevéből is, ContentQueryMain.xsl a "fő" XSL, amely szabályozza az általános fordítás. A talált elemek telepítéseket, és átadja nekik egy-egy sablonok a ItemStyle.xsl. Mi lesz módosít generálni a nyílt ItemStyle.xsl <táblázat> előtt a kibocsátó az első sor az adatok és a záró tag <táblázat> tag után az utolsó sor kibocsátó. Ehhez, ContentQueryMain.xsl módosul, hogy két paramétert adja át a "grid" ItemStyle.xsl-sablon, "utolsó sor" és az "aktuális sor". ItemStyle.xsl használja ezeket, hogy feltételesen bocsátanak ki a szükséges címkék.
Heather Salamon technikával, Mi keressük meg a ContentQueryMain.xsl. Nem található ugyanazon a helyen, mint ItemStyle.xsl. Segítenie kell a képernyő szemcsésedik:
A következő módosításokat kell:
- Módosíthat egy xsl-sablont, "A CallItemTemplate" hogy valóban elindítja a rács sablon ItemStyle.xsl. Mi át két paramétert a rács sablont, hogy ez lesz a nyitó és záró feltételesen létrehozásához szükséges adatok <táblázat> Címkék.
- Egy kis ContentQueryMain.xsl, hogy felhívja a "CallItemTemplate módosítása" átadni egy "LastRow" a paraméter, hogy LastRow lehet hárítani a rács sablon.
Keresse meg a "OuterTemplate.CallItemTemplate nevezett sablon" a karakterlánc azonosítja:
<XSL:sablon név="OuterTemplate.CallItemTemplate">
Cserélje ki az egész sablon az alábbiak szerint:
|
<XSL:sablon név="OuterTemplate.CallItemTemplate">
<XSL:param név="CurPosition" />
<!--
Add hozzá a "LastRow" a paraméter.
Mi csak akkor használja, ha a cikk stílusa hágó-ban "Rács".
-->
<XSL:param név="LastRow" />
<XSL:Válassza a>
<XSL:mikor teszt="@Style = "NewsRollUpItem"">
<XSL:apply-templates Válassza ki="." mód="itemstyle">
<XSL:with-param név="EditMode" Válassza ki="$cbq_iseditmode" />
</XSL:apply-templates>
</XSL:mikor>
<XSL:mikor teszt="@Style = "NewsBigItem"">
<XSL:apply-templates Válassza ki="." mód="itemstyle">
<XSL:with-param név="CurPos" Válassza ki="$CurPosition" />
</XSL:apply-templates>
</XSL:mikor>
<XSL:mikor teszt="@Style = "NewsCategoryItem"">
<XSL:apply-templates Válassza ki="." mód="itemstyle">
<XSL:with-param név="CurPos" Válassza ki="$CurPosition" />
</XSL:apply-templates>
</XSL:mikor>
<!--
Jelenlegi helyzetét, és a lastrow át a rács itemstyle.xsl sablon.
ItemStyle.xsl fog használni, hogy a nyílt bocsátanak ki és záró <táblázat> Címkék.
-->
<XSL:mikor teszt="@Style = "Hálózat"">
<XSL:apply-templates Válassza ki="." mód="itemstyle">
<XSL:with-param név="CurPos" Válassza ki="$CurPosition" />
<XSL:with-param név="Utolsó" Válassza ki="$LastRow" />
</XSL:apply-templates>
</XSL:mikor>
<XSL:egyébként>
<XSL:apply-templates Válassza ki="." mód="itemstyle">
</XSL:apply-templates>
</XSL:egyébként>
</XSL:Válassza a>
</XSL:sablon>
|
A hozzászólások írja le a módosítások célja.
természetesen, a "OuterTemplate.CallItemTemplate" hívják magát egy másik sablon. Keresse meg a sablon ezen szöveges kereséssel:
<XSL:sablon név="OuterTemplate.Body">
Görgesse végig a OuterTemplate.Body utasításait, és helyezze be a LastRow paramétert a következő (ábrán egy magyarázat dőlt betűvel):
<XSL:call-template név="OuterTemplate.CallItemTemplate">
<XSL:with-param név="CurPosition" Válassza ki="$CurPosition" />
<!-- A LastRow paraméter beszúrása. -->
<XSL:with-param név="LastRow" Válassza ki="$LastRow"/>
</XSL:call-template>
Elvégre, ez a, Mi végül a dolgokat létrehozni megfelelően úgy, hogy a ItemStyle.xsl is bocsát ki <táblázat> Címkék: a megfelelő helyre.
ItemStyle.Xsl
MEGJEGYZÉS:: Újra, Ellenőrizze a ItemStyle.xsl után, hogy bármit módosítana, úgy, hogy e változások hatása.
Itt van két tevékenység:
- Cserélje ki a teljes rács sablon. Ön is másol/tészta alatt.
- Adjunk hozzá néhány hókusz-pókusz kívül a sablondefiníció, amely lehetővé teszi a "formatcurrency" sablon dolgozni. (Meg tudod mondani, hogy van egy vékony fogantyú XSL).
Első, ItemStyle.xsl tetején, ezt a sort:
<!-- Néhány hókusz-pókusz, amely lehetővé teszi számunkra, hogy megjelenítsük a U.S. pénznem. -->
<XSL:tizedes formátum név="a személyzet" számjegy="D" />
<XSL:sablon név="Alapértelmezett" meccs="*" mód="itemstyle">
Megjegyzés:, hogy nem hozzá közvetlenül az út előtt a <XSL:sablon neve = "alapértelmezett" …> meghatározás.
Következő, menj vissza a rács sablon. Az alábbi kódot cserélje ki a teljes rács sablon. Ez alaposan magyarázat, elektronikus levél én, vagy hagyja megjegyzéseket a blogomban, ha kérdése van, ne habozzon, de.
|
<XSL:sablon név="Rács" meccs="Sor[@Style = "Hálózat"]" mód="itemstyle">
<!--
ContentMain.xsl halad a CurPos és az utolsó.
Is használja ezeket, hogy feltételesen bocsátanak ki a nyílt és záró <táblázat> Címkék.
-->
<XSL:param név="CurPos" />
<XSL:param név="Utolsó" />
<!-- A következő változók változatlan, a szabványos ItemStyle.xsl -->
<XSL:változó név="SafeImageUrl">
<XSL:call-template név="OuterTemplate.GetSafeStaticUrl">
<XSL:with-param név="UrlColumnName" Válassza ki=""ImageUrl""/>
</XSL:call-template>
</XSL:változó>
<XSL:változó név="SafeLinkUrl">
<XSL:call-template név="OuterTemplate.GetSafeLink">
<XSL:with-param név="UrlColumnName" Válassza ki=""LinkUrl""/>
</XSL:call-template>
</XSL:változó>
<XSL:változó név="DisplayTitle">
<XSL:call-template név="OuterTemplate.GetTitle">
<XSL:with-param név="Cím" Válassza ki="@Title"/>
<XSL:with-param név="UrlColumnName" Válassza ki=""LinkUrl""/>
</XSL:call-template>
</XSL:változó>
<XSL:változó név="LinkTarget">
<XSL:Ha teszt="@OpenInNewWindow = "True"" >_blank</XSL:Ha>
</XSL:változó>
<!--
Itt mi határozza meg egy változó, "tableStart". Ez tartalmazza a HTML, hogy használunk határozza meg a táblázatban, valamint az oszlopfeliratok megnyitója. Megjegyzés: Ha CurPos = 1, Ez magában foglalja a HTML egy CDATA-tag.
Egyébként, üres lesz.
A tableStart értéke emited minden alkalommal, amikor ItemStyle az úgynevezett ContentQueryMain.xsl keresztül.
-->
<XSL:változó név="tableStart">
<XSL:Ha teszt="$CurPos = 1">
<![CDATA[
<Táblázatszegély = 1>
<TR bgcolor = "blue">
<TF><betűszín = "fehér"><b>Projekt neve</b></betűtípus></TF>
<TD igazítása = "jobb"><betűszín = "fehér"><b>Teljes dátum</b></betűtípus></TF>
<TD igazítása = "jobb"><betűszín = "fehér"><b>Költségvetés</b></betűtípus></TF>
<TD igazítása = "jobb"><betűszín = "fehér"><b>Tényleges ráfordítás</b></betűtípus></TF>
<TF><betűszín = "fehér"><b>Általános állapot</b></betűtípus></TF>
</TR>
]]>
</XSL:Ha>
</XSL:változó>
<!--
Egy másik változó, tableEnd egyszerűen határozza meg, hogy a záró táblázat tag.
Mint-val tableStart, -a ' mindig emited. Éppen ezért az érték van rendelve feltételesen alapján, hogy mi már az utolsó sor által elfogadott ContentQueryMain.xsl.
-->
<XSL:változó név="tableEnd">
<XSL:Ha teszt="$CurPos = $Last">
<![CDATA[ </táblázat> ]]>
</XSL:Ha>
</XSL:változó>
<!--
Mindig bocsát ki a tartalmát tableStart. Ha ez nem az első sort át hozzánk a ContentQueryMain.xsl, Aztán tudjuk, hogy az érték üres lesz.
Tiltsa le a kimeneti elől, mert mikor tableStart ez nem üres, Ez magában foglalja a tényleges HTML, hogy szeretnénk tenni a böngésző. Ha nem mondunk az XSL elemzőt hoz megbénít kimeneti elől, Ez akarat létrehoz a cucc, mint a"<táblázat>" Ahelyett, hogy"<táblázat>".
-->
<XSL:érték-ból Válassza ki="$tableStart" Megbénít kimeneti elől="igen"/>
<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
-->
<TF>
<XSL:érték-ból Válassza ki="@Project_x005F_x0020_Name"/>
</TF>
<TF igazítása="jobb">
<XSL:érték-ból Válassza ki="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TF>
<TF igazítása="jobb">
<XSL:call-template név="FormatCurrency">
<XSL:with-param név="érték" Válassza ki="@Project_x005F_x0020_Budget"></XSL:with-param>
</XSL:call-template>
</TF>
<TF igazítása="jobb">
<XSL:call-template név="FormatCurrency">
<XSL:with-param név="érték" Válassza ki="@Project_x005F_x0020_Expenses"> </XSL:with-param>
</XSL:call-template>
</TF>
<TF>
<XSL:érték-ból Válassza ki="@Project_x005F_x0020_Status"/>
</TF>
<!--
Az alábbi megjegyzésbe, tisztázni kell a dolgot.
Azonban, hozza vissza és megtöm ez-ba egy <TF> a hatás megtekintéséhez.
-->
<!--
<div id = "linkitem" Class = "tétel">
<XSL:Ha teszt = "string-length($SafeImageUrl) != 0">
<div class = "kép-terület-bal">
<a href = "{$SafeLinkUrl}" Target = "{$LinkTarget}">
<IMG class = "kép rögzített-szélesség" src = "{$SafeImageUrl}" ALT = "{@ImageUrlAltText}"/>
</egy>
</Div>
</XSL:Ha>
<div class = "hivatkozás-elem">
<XSL:call-template Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href = "{$SafeLinkUrl}" Target = "{$LinkTarget}" title = "{@LinkToolTip}">
<XSL:értékét, jelölje be a "$DisXSLyTitle" = />
</egy>
<div class = "Leírás">
<XSL:érték-ból select="@Description" />
</Div>
</Div>
</Div>
-->
</TR>
<!--
Bocsátanak ki a záró tag táblázat. Ha nem vagyunk az utolsó sor,
Ez lesz az üres.
-->
<XSL:érték-ból Válassza ki="$tableEnd" Megbénít kimeneti elől="igen"/>
</XSL:sablon>
<XSL:sablon név="FormatCurrency">
<XSL:param név="érték" Válassza ki="0" />
<XSL:érték-ból Válassza ki='formátum-szám($érték, "$DDD,DDD,DDD.DD", "személyzet")' />
</XSL:sablon>
|