Overview na Lengo
Nje ya boksi, Moss’ Content Query Mtandao Sehemu ya (CQWP) maonyesho ya matokeo yake katika muundo wa orodha, similar to search results. It is also possible to display the results in a grid format (i.e. HTML meza format). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Biashara Igizo
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, kama vile jina, bajeti, inatarajiwa kukamilika tarehe, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, inaonekana kama hii:
mbinu ya kiufundi ni nyingi sawa kama ilivyoelezwa hapa (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 kama hii inazalisha kwamba matokeo:
|
<html>
<mwili>
<kituo cha>
<meza mpaka= 1>
<!-- Labels ->
<tr Bgcolor= Blue>
<td><ni Michezo= Nyeupe><b>Mradi Jina</b></ni></td>
<td align= Haki><ni Michezo= Nyeupe><b>Kukamilisha Tarehe</b></ni></td>
<td align= Haki><ni Michezo= Nyeupe><b>Bajeti ya</b></ni></td>
<td align= Haki><ni Michezo= Nyeupe><b>Gharama halisi</b></ni></td>
<td><ni Michezo= Nyeupe><b>Hali ya jumla ya</b></ni></td>
</tr>
<tr>
<td>Re-waya chumba cha kompyuta.</td>
<td align= Haki>02/01/08</td>
<td align= Haki>22,500.00</td>
<td align= Haki>19,000.00</td>
<td>Katika Maendeleo</td>
</tr>
<tr>
<td>Utoaji servrar kwa Upgrade SQL</td>
<td align= Haki>04/01/08</td>
<td align= Haki>7,500.00</td>
<td align= Haki>0.00</td>
<td>Planned</td>
</tr>
</meza>
</kituo cha>
</mwili>
</html>
|
Mbinu
Fuata hatua hizi ili kujenga gridi ya taifa:
- Kutambua vipengele wa gridi ya taifa (safu / nguzo).
- Kuainisha na kujenga nguzo muhimu tovuti.
- Kujenga maeneo ndogo kwa ajili ya miradi na orodha Singleton.
- Kuongeza CQWP ukurasa wa mtandao na configure ni kutafuta orodha yako.
- Kurekebisha XML CQWP wa kukusanya up nguzo ya ziada.
- Kurekebisha XSL kuzalisha meza.
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 hapa (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) na blog Heather wa Solomoni hapa (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Na karanga Bolts
Kuanza na kutekeleza hatua moja kwa njia ya tano kama kwa nyaraka MSDN na makala Heather wa Solomoni.
Katika hatua hii, ve aliongeza CQWP yako ya ukurasa na una yako <CommonViewFields> kimeundwa kama ni muhimu.
Kufuatia hatua kawaida, Mimi kupata matokeo haya ya kati:
1. Kujenga aina ya maudhui, a templatized custom list for that content type and two sites. Here is the content type:
Hapa ni muundo wa tovuti:
2. Kuongeza CQWP baada ya kujenga mradi subsites yangu na orodha ya mradi Singleton muhtasari:
3. Kuongeza taarifa yote ya ziada nataka kupitia <CommonViewFields>:
<mali jina="CommonViewFields" aina="string">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</mali>
Kumbuka kuwa nilikuwa na kuweka mashamba yote mali kwa line moja au itakuwa si kazi (CQWP bila kuniambia kuwa hoja akarudi vitu hakuna).
4. Katika hatua hii, 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 kujenga customized / unghosted version of ItemStyle.xsl. I follow Heather’s advice, juu kupitia hatua 11 na kupata matokeo haya ya kati:
4.1: Jina langu XSL template kama ifuatavyo:
<xsl:template jina = "Grid" mechi = "Row[@Style=’Grid’]" mode = "itemstyle">
Mimi pia kidogo kurekebisha yake alipendekeza <xsl:kwa-kila …> kwa kuongeza <br /> kumtambulisha kutoa orodha safi:
<xsl:kwa-kila kuchagua="@ *">
P:<xsl:thamani ya kuchagua="jina()" /><br/>
</xsl:kwa-kila>
4.2: Mimi kurekebisha sehemu mtandao, kwenda kuonekana na kuchagua yangu "Grid" style:
Kuomba mabadiliko na hapa ni matokeo:
Tunaweza kuona kutoka juu kwamba mashamba tunataka (Mradi jina, gharama, hadhi, nk) 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. Kwa mfano, sisi rejea Mradi Hali kama "Project_x005F_x0020_Name".
Katika hatua hii, sisi kuondoka blog Heather na kutoka mabega ya makubwa haya, Mimi kuongeza kidogo yangu kidogo.
ContentQueryMain.xsl
NOTE: Wakati wa kufanya mabadiliko ya ContentQueryMain.xsl wote kama vile ItemStyle.xsl, haja ya kuangalia files kurejesha kabla ya kuona athari za mabadiliko yako.
Kwa ajili ya gridi ya maamuzi madhumuni, 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 ni kuu "" 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 <meza> tag kabla kutotoa moshi safu ya kwanza ya data na kufunga <meza> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl ni iliyopita kwa kupitisha vigezo mbili katika gridi ya taifa yetu "" template katika ItemStyle.xsl, "Mwisho mstari" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Kutumia mbinu Heather wa Solomoni, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Tunahitaji kufanya marekebisho yafuatayo:
- Kurekebisha template 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 <meza> tags.
- Kurekebisha mwingine kidogo ya ContentQueryMain.xsl kwamba wito CallItemTemplate "" kupita ni LastRow "" parameter ili LastRow wanaweza kufikishwa kwa Grid template wetu.
Machapisho template aitwaye "OuterTemplate.CallItemTemplate" kutambuliwa na kamba:
<xsl:template jina="OuterTemplate.CallItemTemplate">
Kuchukua nafasi ya template nzima kama ifuatavyo:
|
<xsl:template jina="OuterTemplate.CallItemTemplate">
<xsl:kuacha jina="CurPosition" />
<!--
Kuongeza LastRow "" parameter.
Sisi tu kutumia wakati style bidhaa kupita katika ni "Grid".
-->
<xsl:kuacha jina="LastRow" />
<xsl:kuchagua>
<xsl:wakati mtihani="@ Sinema = 'NewsRollUpItem'">
<xsl:kuomba templates- kuchagua="." mode="itemstyle">
<xsl:na-param jina="EditMode" kuchagua="$cbq_iseditmode" />
</xsl:kuomba templates->
</xsl:wakati>
<xsl:wakati mtihani="@ Sinema = 'NewsBigItem'">
<xsl:kuomba templates- kuchagua="." mode="itemstyle">
<xsl:na-param jina="CurPos" kuchagua="$CurPosition" />
</xsl:kuomba templates->
</xsl:wakati>
<xsl:wakati mtihani="@ Sinema = 'NewsCategoryItem'">
<xsl:kuomba templates- kuchagua="." mode="itemstyle">
<xsl:na-param jina="CurPos" kuchagua="$CurPosition" />
</xsl:kuomba templates->
</xsl:wakati>
<!--
Kupita nafasi ya sasa na lastrow kwa template itemstyle.xsl Grid.
ItemStyle.xsl kutumia kwamba emit wazi na kufunga <meza> tags.
-->
<xsl:wakati mtihani="@ Sinema = 'Grid'">
<xsl:kuomba templates- kuchagua="." mode="itemstyle">
<xsl:na-param jina="CurPos" kuchagua="$CurPosition" />
<xsl:na-param jina="Mwisho" kuchagua="$LastRow" />
</xsl:kuomba templates->
</xsl:wakati>
<xsl:vinginevyo>
<xsl:kuomba templates- kuchagua="." mode="itemstyle">
</xsl:kuomba templates->
</xsl:vinginevyo>
</xsl:kuchagua>
</xsl:template>
|
maoni kuelezea madhumuni ya mabadiliko.
Bila shaka, OuterTemplate.CallItemTemplate "" is itself called from another template. Locate that template by searching for this text string:
<xsl:template jina="OuterTemplate.Body">
Kitabu kupitia maelekezo katika OuterTemplate.Body na kuingiza parameter LastRow kama ifuatavyo (umeonyesha kama maoni katika italics):
<xsl:wito-template jina="OuterTemplate.CallItemTemplate">
<xsl:na-param jina="CurPosition" kuchagua="$CurPosition" />
<!-- Ingiza parameter LastRow. -->
<xsl:na-param jina="LastRow" kuchagua="$LastRow"/>
</xsl:wito-template>
Baada ya huu, sisi hatimaye kuwa mambo kuweka vizuri ili ItemStyle.xsl yetu inaweza emit <meza> tags katika mahali sahihi na.
ItemStyle.Xsl
NOTE: Tena, kuangalia katika ItemStyle.xsl baada ya kufanya mabadiliko yoyote ili kuona athari ya mabadiliko hayo.
Tuna kazi mbili hapa:
- Replace the entire Grid template. You can copy/paste from below.
- Kuongeza baadhi ya jumbo Mumbo nje ufafanuzi template kwamba inawezesha "formatcurrency" template to work. (Unaweza kuwaambia kwamba mimi kushughulikia tenuous juu XSL).
Kwanza, karibu na juu ya ItemStyle.xsl, kuongeza mstari huu:
<!-- Baadhi ya jumbo Mumbo kwamba unatuwezesha kuonyesha U.S. sarafu. -->
<xsl:decimal-format jina="wafanyakazi" tarakimu="D" />
<xsl:template jina="Default" mechi="*" mode="itemstyle">
Kumbuka kwamba mimi aliongeza ni moja kwa moja kabla ya <xsl:template jina = "Default" …> ufafanuzi.
Ijayo, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, lakini usisite kunitumia email au kuacha maoni kwenye blog yangu kama una maswali.
|
<xsl:template jina="Gridi ya taifa" mechi="Row[@ Sinema = 'Grid']" mode="itemstyle">
<!--
ContentMain.xsl hupita CurPos na wa mwisho.
Sisi kutumia haya masharti emit wazi na kufunga <meza> tags.
-->
<xsl:kuacha jina="CurPos" />
<xsl:kuacha jina="Mwisho" />
<!-- vigezo zifuatazo unmodified kutoka ItemStyle.xsl kiwango -->
<xsl:variable jina="SafeImageUrl">
<xsl:wito-template jina="OuterTemplate.GetSafeStaticUrl">
<xsl:na-param jina="UrlColumnName" kuchagua="'ImageUrl'"/>
</xsl:wito-template>
</xsl:variable>
<xsl:variable jina="SafeLinkUrl">
<xsl:wito-template jina="OuterTemplate.GetSafeLink">
<xsl:na-param jina="UrlColumnName" kuchagua="'LinkUrl'"/>
</xsl:wito-template>
</xsl:variable>
<xsl:variable jina="DisplayTitle">
<xsl:wito-template jina="OuterTemplate.GetTitle">
<xsl:na-param jina="Title" kuchagua="@ Title"/>
<xsl:na-param jina="UrlColumnName" kuchagua="'LinkUrl'"/>
</xsl:wito-template>
</xsl:variable>
<xsl:variable jina="LinkTarget">
<xsl:kama mtihani="@ OpenInNewWindow = 'kweli'" >_blank</xsl:kama>
</xsl:variable>
<!--
Hapa sisi define variable, "TableStart". Hii ina HTML
. Kumbuka kwamba kama CurPos = 1, ni pamoja na HTML katika tag CDATA.
Vinginevyo, itakuwa tupu.
thamani ya tableStart ni emited ItemStyle kila wakati inaitwa kupitia
.
-->
<xsl:variable jina="tableStart">
<xsl:kama mtihani="$CurPos = 1">
<![CDATA[
<meza mpaka = 1>
<tr Bgcolor = "blue">
<td><font Michezo = "nyeupe"><b>Mradi Jina</b></ni></td>
<td align = "haki"><font Michezo = "nyeupe"><b>Kukamilisha Tarehe</b></ni></td>
<td align = "haki"><font Michezo = "nyeupe"><b>Bajeti ya</b></ni></td>
<td align = "haki"><font Michezo = "nyeupe"><b>Gharama halisi</b></ni></td>
<td><font Michezo = "nyeupe"><b>Hali ya jumla ya</b></ni></td>
</tr>
]]>
</xsl:kama>
</xsl:variable>
<!--
Mwingine variable, tableEnd tu amefafanua meza kufunga tag.
Kama na tableStart, inazidi daima emited. Hii ni kwa nini thamani yake ni
.
-->
<xsl:variable jina="tableEnd">
<xsl:kama mtihani="$CurPos = $ Mwisho">
<![CDATA[ </meza> ]]>
</xsl:kama>
</xsl:variable>
<!--
Daima emit yaliyomo ya tableStart. Kama hii si mara ya kwanza
, basi tunajua thamani yake
.
Lemaza pato kukimbia kwa sababu wakati tableStart kuwa si tupu, ni
. Kama
, itakuwa kuzalisha<meza>" badala ya "<meza>".
-->
<xsl:thamani ya kuchagua="$tableStart" Disable-pato-kukimbia="ndiyo"/>
<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:thamani ya kuchagua="@ Project_x005F_x0020_Name"/>
</td>
<td align="haki">
<xsl:thamani ya kuchagua="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td align="haki">
<xsl:wito-template jina="formatCurrency">
<xsl:na-param jina="thamani" kuchagua="@ Project_x005F_x0020_Budget"></xsl:na-param>
</xsl:wito-template>
</td>
<td align="haki">
<xsl:wito-template jina="formatCurrency">
<xsl:na-param jina="thamani" kuchagua="@ Project_x005F_x0020_Expenses"> </xsl:na-param>
</xsl:wito-template>
</td>
<td>
<xsl:thamani ya kuchagua="@ Project_x005F_x0020_Status"/>
</td>
<!--
Yote ya yafuatayo ni maoni nje kufafanua mambo.
Hata hivyo, kuleta kwa nyuma na mambo ya kuwa katika <td> kuona wake
.
-->
<!--
<div id = "linkitem" darasa = "item">
<xsl:kama mtihani = "string-urefu($SafeImageUrl) != 0 ">
<div darasa = "SafeImageUrleft">
<href = "{$SafeLinkUrl}" lengo = "{$LinkTarget}">
<img darasa = "image-fasta-width src = "" src="{$SafeImageUrl}" alt = "{@ ImageUrlAltText}"/>
</a>
</div>
</xsl:kama>
<div darasa = "link-item">
<xsl:wito-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" lengo = "{$LinkTarget}" title = "{@ LinkToolTip}">
<xsl:thamani ya kuchagua = "$ DisplayTitle" />
</a>
<div darasa = "maelezo">
<xsl:thamani ya kuchagua = "@ Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Emit meza kufunga tag. Kama sisi si juu ya mstari wa mwisho,
hii itakuwa tupu.
-->
<xsl:thamani ya kuchagua="$tableEnd" Disable-pato-kukimbia="ndiyo"/>
</xsl:template>
<xsl:template jina="formatCurrency">
<xsl:kuacha jina="thamani" kuchagua="0" />
<xsl:thamani ya kuchagua='format-idadi($thamani, "$ DDD,DDD,DDD.DD ", "Mfanyakazi")' />
</xsl:template>
|