Orokorra eta Helburua
Kutxa Out, Moss’ Edukia Query Web zatia (CQWP) erakusten du bere emaitzen zerrenda formatu batean, similar to search results. It is also possible to display the results in a grid format (I.E. HTML taula formatuan). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Mailako eszenatokia
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, hala nola, titulua, aurrekontua, espero data, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, itxura hau atsegin du:
Teknikoarekin askoz berean azaldutako hemen (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:
Hau bezalako HTML ondorioz sortzen:
<html> <gorputza> <zentro> <taula mugan= 1> <!-- Labels -> <tr bgcolor= Urdina> <td><letra- kolorea= Zuri><b>Proiektuaren izena</b></letra-></td> <td lerrokatu= Eskuinera><letra- kolorea= Zuri><b>Osatzeko data</b></letra-></td> <td lerrokatu= Eskuinera><letra- kolorea= Zuri><b>Aurrekontua</b></letra-></td> <td lerrokatu= Eskuinera><letra- kolorea= Zuri><b>Benetako Gastuak</b></letra-></td> <td><letra- kolorea= Zuri><b>Egoera orokorra</b></letra-></td> </tr> <tr> <td>Re-alanbre ordenagailu gela.</td> <td lerrokatu= Eskuinera>02/01/08</td> <td lerrokatu= Eskuinera>22,500.00</td> <td lerrokatu= Eskuinera>19,000.00</td> <td>Eraikitzen</td> </tr> <tr> <td>Emateko SQL Alza zerbitzariak</td> <td lerrokatu= Eskuinera>04/01/08</td> <td lerrokatu= Eskuinera>7,500.00</td> <td lerrokatu= Eskuinera>0.00</td> <td>Aurreikusitako</td> </tr> </taula> </zentro> </gorputza> </html> |
Hurbilketa
Jarraitu urrats hauek sarera sortzeko:
- Identifikatu sarera osagaiak (errenkadak / zutabeak).
- Define sortu eta beharrezko gune zutabeak.
- Sortu proiektu eta bakarrak zerrendak guneak sailkatuta.
- Gehitu CQWP du web orri bat eta konfigura ezazu zure zerrendak bilatzeko.
- Aldatzeko CQWP en XML gora bildu osagarriak zutabeak.
- XSL aldatzeko mahai bat sortzeko.
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 hemen (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) eta Heather Solomon bloga hemen (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Intxaurrak eta morroilo
Hasiko da eta ezartzeko urrats bidez bost bat MSDN dokumentazioa eta Heather Solomon en artikuluaren arabera.
Puntu honetan, gehitu dituzun zure CQWP orrian eta ez duzu zure <CommonViewFields> beharrezko gisa konfiguratuta.
Ohiko urratsak jarraituz, Tarteko emaitza hauek lortu dut:
1. Sortu eduki mota bat, a templatized custom list for that content type and two sites. Here is the content type:
Hemen gune egitura da:
2. Gehitu CQWP ondoren sortzen nire proiektua subsites bakarrak eta proiektuaren laburpen zerrendak:
3. Gehitu informazio gehigarri nahi dut bidez guztiak <CommonViewFields>:
<jabetza izena="CommonViewFields" mota="katea">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</jabetza>
Kontuan izan nuen jabetza eremu guztiak mantentzeko lerro bat edo ez litzateke lan (CQWP esango luke kontsulta hori ez da elementurik itzuli).
4. Puntu honetan, 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 pertsonalizatu bat sortzeko / unghosted version of ItemStyle.xsl. I follow Heather’s advice, urratsa bidez sortu 11 eta tarteko emaitza horiek:
4.1: Izendatzeko nire XSL txantiloia honela:
<xsl:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Zertxobait aldatu dut bere iradoki <xsl:-bakoitzak …> gehituz <br /> etiketatu garbiagoa zerrenda eskaintzeko:
<xsl:-bakoitzak hautatu="@ *"> P:<xsl:balio du hautatu="izena()" /><br/> </xsl:-bakoitzak>
4.2: Web zati aldatu dut, go to appearance and select my "Grid" estilo:
Aplikatu aldaketa eta hemen emaitza da:
Batez ere, bertatik ikus dezakegu eremu dugula nahi (Proiektuaren izena, gastu, egoera, etc) 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. Adibidez, we reference Project Status as "Project_x005F_x0020_Name".
Puntu honetan, irteten Heather bloga eta erraldoi hauen sorbaldak dugu, Nire pixka gehitu.
ContentQueryMain.xsl
OHARRA: Noiz aldaketa egin ContentQueryMain.xsl bai ItemStyle.xsl, fitxategi horiek egiaztatzeko itzuli behar duzu, ikusiko duzu zure aldaketak eragina aurretik.
Sareta hartzeko helburuetarako, 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 <taula> datuak lerro lehen igortzen aurretik Etiketa eta itxiera <taula> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" ItemStyle.xsl en txantiloia, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Heather Solomon bere teknika erabiliz, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Aldaketa hauek egin behar dugu:
- Aldatzeko xsl txantiloi bat, "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 <taula> Euskal Herria.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" parametroa da, beraz, gure LastRow Grid txantiloi daiteke gainditu.
Locate the template named "OuterTemplate.CallItemTemplate" katea identifikatu:
<xsl:txantiloia izena="OuterTemplate.CallItemTemplate">
Honela ordezkatu txantiloi osoan:
<xsl:txantiloia izena="OuterTemplate.CallItemTemplate"> <xsl:param izena="CurPosition" /> <!-- Add the "LastRow" parametroa. We only use it when the item style pass in is "Grid". --> <xsl:param izena="LastRow" /> <xsl:aukeratu> <xsl:denean test="@ Style = 'NewsRollUpItem'"> <xsl:aplikatzen-txantiloiak hautatu="." modua="itemstyle"> <xsl:-rekin param izena="EditMode" hautatu="$cbq_iseditmode" /> </xsl:aplikatzen-txantiloiak> </xsl:denean> <xsl:denean test="@ Style = 'NewsBigItem'"> <xsl:aplikatzen-txantiloiak hautatu="." modua="itemstyle"> <xsl:-rekin param izena="CurPos" hautatu="$CurPosition" /> </xsl:aplikatzen-txantiloiak> </xsl:denean> <xsl:denean test="@ Style = 'NewsCategoryItem'"> <xsl:aplikatzen-txantiloiak hautatu="." modua="itemstyle"> <xsl:-rekin param izena="CurPos" hautatu="$CurPosition" /> </xsl:aplikatzen-txantiloiak> </xsl:denean> <!-- Pasatu uneko posizioa eta lastrow to Grid itemstyle.xsl txantiloia. ItemStyle.xsl irekia da, eta amaiera hori igortzen erabiliko du <taula> Euskal Herria. --> <xsl:denean test="@ Style = 'Sareta'"> <xsl:aplikatzen-txantiloiak hautatu="." modua="itemstyle"> <xsl:-rekin param izena="CurPos" hautatu="$CurPosition" /> <xsl:-rekin param izena="Azken" hautatu="$LastRow" /> </xsl:aplikatzen-txantiloiak> </xsl:denean> <xsl:Besterik> <xsl:aplikatzen-txantiloiak hautatu="." modua="itemstyle"> </xsl:aplikatzen-txantiloiak> </xsl:Besterik> </xsl:aukeratu> </xsl:txantiloia> |
Iruzkinak deskribatzeko aldaketak helburua.
Jakina, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<xsl:txantiloia izena="OuterTemplate.Body">
OuterTemplate.Body argibideak zehar joan eta txertatu LastRow parametroa honela (etzana iruzkina gisa agertzen):
<xsl:dei-txantiloia izena="OuterTemplate.CallItemTemplate"> <xsl:-rekin param izena="CurPosition" hautatu="$CurPosition" /> <!-- Txertatu LastRow parametro. --> <xsl:-rekin param izena="LastRow" hautatu="$LastRow"/> </xsl:dei-txantiloia>
Hori guztia egin ondoren, azkenik dugu gauza martxan dagoela, beraz, gure ItemStyle.xsl dezakeen igortzen <taula> at leku egokian tags.
ItemStyle.Xsl
OHARRA: Berriz, ItemStyle.xsl egiaztatu edozein aldaketak egin ondoren, beraz, aldaketa horiek eragina ikusten duzu.
Bi eginkizun daukagu hemen:
- 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. (Esan izan dut fina da, helduleku bat XSL dezakezu).
Lehen, ItemStyle.xsl goiko gertu, gehitu lerro hau:
<!-- Zenbait mumbo Jumbo aukera ematen U.S erakutsi digu. moneta. --> <xsl:hamartar-formatua izena="langileak" digitu="D" /> <xsl:txantiloia izena="Lehenetsi" dator="*" modua="itemstyle">
Kontuan gehitu dut zuzenean aurretik <xsl:template name="Default" …> definizioa.
Hurrengoa, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, baina ez izan zalantzarik eta me elektronikoetan edo nire blogean iruzkinak uzteko Zalantzarik baduzu.
<xsl:txantiloia izena="Grid" dator="Errenkadan[@ Style = 'Sareta']" modua="itemstyle"> <!-- ContentMain.xsl igarotzen CurPos eta Azken. Horiek erabili dugu conditionally igortzen irekia da, eta amaiera <taula> Euskal Herria. --> <xsl:param izena="CurPos" /> <xsl:param izena="Azken" /> <!-- Aldagai hauek estandarra ItemStyle.xsl tik aldatu gabe --> <xsl:aldagai izena="SafeImageUrl"> <xsl:dei-txantiloia izena="OuterTemplate.GetSafeStaticUrl"> <xsl:-rekin param izena="UrlColumnName" hautatu="'ImageUrl'"/> </xsl:dei-txantiloia> </xsl:aldagai> <xsl:aldagai izena="SafeLinkUrl"> <xsl:dei-txantiloia izena="OuterTemplate.GetSafeLink"> <xsl:-rekin param izena="UrlColumnName" hautatu="'LinkUrl'"/> </xsl:dei-txantiloia> </xsl:aldagai> <xsl:aldagai izena="DisplayTitle"> <xsl:dei-txantiloia izena="OuterTemplate.GetTitle"> <xsl:-rekin param izena="Izenburua" hautatu="@ Izenburua"/> <xsl:-rekin param izena="UrlColumnName" hautatu="'LinkUrl'"/> </xsl:dei-txantiloia> </xsl:aldagai> <xsl:aldagai izena="LinkTarget"> <xsl:bada test="@ OpenInNewWindow = 'True'" >_blank</xsl:bada> </xsl:aldagai> <!-- Hemen aldagai bat definitu dugu, "tableStart". Honek HTML . Kontuan bada CurPos = 1, CDATA etiketa batean HTML ditu. Besterik, hutsik egon beharko da. TableStart balioa emited denbora ItemStyle behin deritzo bidez . --> <xsl:aldagai izena="tableStart"> <xsl:bada test="$CurPos = 1"> <![CDATA[ <taula border = 1> <tr bgcolor="blue"> <td><font color="white"><b>Proiektuaren izena</b></letra-></td> <td align="right"><font color="white"><b>Osatzeko data</b></letra-></td> <td align="right"><font color="white"><b>Aurrekontua</b></letra-></td> <td align="right"><font color="white"><b>Benetako Gastuak</b></letra-></td> <td><font color="white"><b>Egoera orokorra</b></letra-></td> </tr> ]]> </xsl:bada> </xsl:aldagai> <!-- Beste aldagai bat, tableEnd, besterik gabe, amaiera-taula Etiketa definitzen. TableStart gisa,, da beti emited. Horregatik, bere balioa . --> <xsl:aldagai izena="tableEnd"> <xsl:bada test="$CurPos = Azken"> <![CDATA[ </taula> ]]> </xsl:bada> </xsl:aldagai> <!-- Beti igortzen tableStart edukia. Horrela ez bada, lehen , gero, bere balioa ezagutzen dugu . Desgaitu irteerako ihes tableStart denean, ez da hutsik egon delako, it . Bada , it will generate stuff like "<taula>" instead of "<taula>". --> <xsl:balio du hautatu="$tableStart" disable-irteera-ihes="bai"/> <tr> <!-- 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:balio du hautatu="@ Project_x005F_x0020_Name"/> </td> <td lerrokatu="eskubidea"> <xsl:balio du hautatu="@ Project_x005F_x0020_End_x005F_x0020_Date"/> </td> <td lerrokatu="eskubidea"> <xsl:dei-txantiloia izena="formatcurrency"> <xsl:-rekin param izena="balioa" |
Hau izan da oso erabilgarria. Eskerrik asko!
Aah… 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’">
Duen taldea lan egin. 🙂
Niretzat ia lan egin: Irteera kudeatzeko dut </taula> Etiketa behar bezala amaitzeko, baina hasita etiketa falta da. It seems the test="$CurPos = 1" ez du benetako. Baina zergatik?
Great Post. Paul egin izan dut, batez ere, gauza guztiak. Kontsulta bat daukat, how can I achive the sum of "TOTAL ACTUAL Expences" edo bi zutabe balioen batura.
Dute, edozein lan egin duzu Ohiko ContentQueryMain eta ItemStyle xsl fitxategiak sortzen? Arrazoia nuen galdetu da, ez, ez dut nahi nire Ohiko estiloak gainidatzi izateaz adabaki edo bertsio batekin kezkatu. Ez duzu, adibide? Saiatu naiz ContentQueryMain.xsl eta igotzean berriak Ohiko kopia kopia berdin-berdina egitea Style Liburutegia. Erreferentzia bat jarriz xsl fitxategi hori. Webpart en MainXslLink jabetza, Dut 401 baimenik ez. Pertsonalizatua xsl fitxategia argitaratutako bertsio bat da, eta denek izan sarbidea irakurri behar da.
fantasiazko post esker! Dira honekin orain borrokalari azken egunetan.
Hi, hau oso lagungarria izan da posting. It dut lan, eta, gainera, inplementatu Mike Brown-en aldaketa da, beraz, talde
barruan taula emaitza edozein dela ere aukeratu Taldearen dut CQWB horrek propietate parametroaz.
Titulua egin dut lotura bat, gainera,, beraz nicely lanak. Oraindik arazo bat dut, nahiz. Emaitzak dut elkartuz gune izenaren arabera. Taula barruan, Horietako talde du nicely, eta handia ikusten da, baina oraindik out inprimatzeko talde guztiak
izenak(Nire kasuan gunearen izenak) Goiko taulan. Norbaitek daki nola horiek kentzeko?
Eskerrik asko,
Greg
Nice artikulu. Nire taula emateko lehenetsia Sharepoint zerrendak itxura zerrenda iturburu-kodea aztertuta kudeatzen dut. Hemen nagusia HTML behar ItemStyle sartzen blokeak:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–TITULARRA–>
<TR class="ms-viewheadertr" VAlign = TOP>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;posizio:erlatiboa;utzi:0;top: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 du titre ici
</TD>
<TD style="position:absolutua;">
</TD>
</TR>
</TAULA></div>
</TH>
<!–Goiburua zelula guztietan errepikatu–>
</TR>
<!– Taula datuak –>
<TR class="">
<!–Datu-zutabe, erabili Paul kodea lehen bat hiperesteka duen –>
<TD Class="ms-vb2">Datu hemen</TD>
<!–Hutsik zutabea–>
<TD Class="ms-vb2">
<span dir = Bat ere ez></span><
/TD>
<!–Data zutabea–>
<TD Class="ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Ordezko errenkadan – Erabili berri bat XSL aldagaia ordezko klasea txertatuko du oinarritzen lerroaren modulo 2–>
<TR class="ms-alternating">
…
</TR>
</TAULA>
Thatz hain zuzen .. gizona .. Gora .. maite duzu zer egiteko Rock You bila nenbilen..
<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:denean>
<xsl:when test="$StartNewGroup = ‘True’">
<tr>
<td >
<xsl:call-template name="OuterTemplate.GetGroupName">
<xsl:with-param name="GroupName" select="@*[izena()= $ Taldeak]"/>
<xsl:with-param name="GroupType" select="$GroupType"/>
</xsl:dei-txantiloia>
</td>
</tr>
</xsl:denean>
<xsl:Besterik>
</xsl:Besterik>
</xsl:aukeratu>
Hi Paul,
Noiz xml / xsl kontsulta eta edukiak web zati batekin lan, ona dute, edozein modutan, zure XSLT formateatzeko aurkitu duzu? Aldaketak egiteko eta diseinua probatzeko saiatzen ** bat, besterik gabe, testu-editore bat erabiliz mina eskubidea dela egiaztatzen…
Onena
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Beharko Irudi edo argazki erabili dut CommonViewFields Eremua Mota? (e.g. InternalColumnName, Irudia)
Your post is exactly what I was looking for. Hala eta guztiz ere, I can’t get it to work.
I have documents that are stored in various doc. libraries but classified using a custom class column (choice: 1 edo 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. Hala ere,, 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.
Eskerrik asko.
Saji
Nire izena missspelling du sentitzen ez ziur non ” etorri zen.