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" hautatu="@ Project_x005F_x0020_Budget"></xsl:-rekin param>
</xsl:dei-txantiloia>
</td>
<td lerrokatu="eskubidea">
<xsl:dei-txantiloia izena="formatcurrency">
<xsl:-rekin param izena="balioa" hautatu="@ Project_x005F_x0020_Expenses"> </xsl:-rekin param>
</xsl:dei-txantiloia>
</td>
<td>
<xsl:balio du hautatu="@ Project_x005F_x0020_Status"/>
</td>
<!--
Honako hau guztia komentatu gauzak argitzeko.
Hala eta guztiz ere, ekarri du atzera, eta bete bihurtu <td> bere ikusteko
.
-->
<!--
<div id="linkitem" class="item">
<xsl:if test="string-length($SafeImageUrl) != 0">
<div class="image-area-left">
<a href="{$SafeLinkUrl}" target="{$LinkTarget}">
<img class="image-fixed-width" src="{$SafeImageUrl}" alt="{@ ImageUrlAltText}"/>
</bat>
</div>
</xsl:bada>
<div class="link-item">
<xsl:dei-txantiloia name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@ LinkToolTip}">
<xsl:value-of select="$DisplayTitle"/>
</bat>
<div class="description">
<xsl:value-of select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Igortzen itxiera etiketa taula. Gara ez bada, azken errenkadan,
Hutsik egongo da.
-->
<xsl:balio du hautatu="$tableEnd" disable-irteera-ihes="bai"/>
</xsl:txantiloia>
<xsl:txantiloia izena="formatcurrency">
<xsl:param izena="balioa" hautatu="0" />
<xsl:balio du hautatu='formatu-kopurua($balioa, "$DDD,DDD,DDD.DD", "staff")' />
</xsl:txantiloia>
|