Kourikoulòm ak objektif
Soti nan bwat la, BAB PANYÒL’ Requête contenu Web pati (CQWP) affiche rezilta li nan yon lis fòma, menm jan an pou fè rechèch rezilta yo. Se tou posib pou yo ekspoze rezilta nan yon fòma galri (c'est-à-dire. Fòma tab HTML). Gwiyad be'l varyete fo'm ki pi bon nan kèk sikonstans. Mwen kapab dekri kijan pou reyalize sa rive vre nan atik sa a.
Biznis Scénario
Mwen te travay ak yon kliyan an sou yon antrepwiz laj bab PANYÒL déploiement. Nou te fèt yo classification comme pou pwojè se sitwayen pwemye klas nan anbakasyon a yo ye pwòp kote ki gen sou tèt kiyè. Pwojè administratè genyen yon lis singleton pwojè rezime enfòmasyon, tankou Tit, bidjè, te ka espere fin dat, bidjè ki rete ak lòt kalite rezime sistèm yo. Pa "singleton" Mwen vle di yon repòtaj lis SharePoint ki garanti pou genyen sèlman yon atik. Manière, li sanble ke sa:
Approche teknik la. Se menm jan te dekri Isit (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). A CQWP itilize yon transform XSL è HTML pou browser a Ann.
Mwen toujou envision rezilta a devan plonje nan XSL a paske XSL se yon tèrib kòchma. Se isit la mwen bèl rezilta:
HTML kon sa génère rezilta sa:
|
<html>
<kò>
<sant>
<tab fontyè= 1>
<!-- Étiquettes->
<tr bgcolor= ble>
<td><klavye koulè= blanch><b>Pwojè non</b></klavye></td>
<td fè aliman= dwat><klavye koulè= blanch><b>Dat nèt sou tout pwen</b></klavye></td>
<td fè aliman= dwat><klavye koulè= blanch><b>Bidjè</b></klavye></td>
<td fè aliman= dwat><klavye koulè= blanch><b>Depans réel</b></klavye></td>
<td><klavye koulè= blanch><b>Tout estati</b></klavye></td>
</tr>
<tr>
<td>Re-fil chanm konpitè.</td>
<td fè aliman= dwat>02/01/08</td>
<td fè aliman= dwat>22,500.00</td>
<td fè aliman= dwat>19,000.00</td>
<td>Nan pwogrè</td>
</tr>
<tr>
<td>Serveurs pwovizyon pou SQL à</td>
<td fè aliman= dwat>04/01/08</td>
<td fè aliman= dwat>7,500.00</td>
<td fè aliman= dwat>0.00</td>
<td>Te planifye</td>
</tr>
</tab>
</sant>
</kò>
</html>
|
Aproche apròch
Swiv sa etap sa yo pou kreye gri an:
- Idantifye composants de la grille (èskonbwit/colonnes).
- Defini Et kreye colonnes kote ki gen nesesè.
- Kreye sub pozisyon pou pwojè ak nan lis singleton.
- Ajoute CQWP a yon paj entènèt ak configure li pou fè rechèch pou lis ou.
- Motifye CQWP la XML rasanble moute les colonnes supplémentaires.
- Motifye a XSL pou générer yon tab.
M pral konsantre sou anpil sis. Anpil moun yonn nan kat se kò-devlopman ak yon bagay ki gen CQWP kap itilize li an ki te deja fè. Nimewo, senk ki te byen documentés pa lòt moun ki genyen atik sa a exhaustive ekran te tire en nan MSDN Isit (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) Et blog Heather Salomon te Isit (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Reta ak Vis
Te chita nan Et aplike étapes UN nan senk as per a MSDN dokiman Et atik Heather Salomon te.
Nan pwen sa a, ou te vin ajoute nan CQWP ou paj Et ou gen ou <CommonViewFields> configuré comme nesesè.
Swiv les étapes selon lizaj, M gen rezilta entèmedyè sa:
1. Kreye yon jan de contenu, yon repòtaj lis templatized pou sa pi kontan tip e ki kote de. Se isit la pi kontan jan de:
Isit la se kote ki gen sipò:
2. Ajoute CQWP a aprè li te kreye m' pwojè sites Et singleton pwojè rezime lis:
3. Ajoute tout a plis enfòmasyon mwen vle via la <CommonViewFields>:
<pwopriyete fe-apel="CommonViewFields" tip="filè">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</pwopriyete>
N ap fè konnen mwen te gen pou kenbe tout pwopwiyete savann sou yon liy ou li pa ta travay (CQWP ta di m' sa requête la te retounen atik pa).
4. Nan pwen sa a, nou pwèt pou nou avanse dèyè a atik MSDN ak (sou sou pou atik Heather Salomon te. Swiv pye l' kòmanse tou pwe pa nan #5 pou kreye yon personnalisé / unghosted vèsyon pipiti de youn nan ItemStyle.xsl. Mwen swiv konsèy Heather a, leve kanpe par étape 11 Et obtenir rezilta entèmedyè sa:
4.1: Non M' modèle XSL comme piba:
<xsl:modèle non = "Grille" à = "ligne[@Style = 'Gwiyad']" mòd = "itemstyle">
Mwen tou pa yon ti jan motifye li a <xsl:pou-chak …> pa pandan l ajoute yon <br /> etikèt ki pou bay yon moun ki nan lis:
<xsl:pou-chak fè chwa="@*">
P I:<xsl:valè-de fè chwa="fe-apel()" /><br/>
</xsl:pou-chak>
4.2: Mwen motifye pati entènèt la, ale nan figi yo epi chwazi m "Grille" mod:
Aplike a chanje Et isit la se rezilta a:
Nou kapab wè de la CI-dessus ke jaden nou vle (Pwojè non, depans, estati, ets) ki disponib pou nou pou yo itilize lè nou fè sikile a HTML. Pa sèlman sa, Men, nou wè non a nou dwe référence kolòn sa nan XSL a. Pa ekzanp, nou référence pwojè estati ou kòm "Project_x005F_x0020_Name".
Nan pwen sa a, nou pati nan Heather an blog ak nan zepòl gran sa yo, Mwen ajoute ti afèm.
ContentQueryMain.xsl
NOTE: Lè fè chanjman pou toulède ContentQueryMain.xsl osi byen ke ItemStyle.xsl, ou bezwen pou yo tcheke fichiers sa tounen nan, anvan ou te wè fè chanjman ou.
Pou rezon an tankou ofrann grille, Bab PANYÒL yo itilize de diferan XSL fichiers pou pwodwi rezilta nou wè nan yon CQWP. Pou jenere ansyen moso pèsistans yap ogmante jiska, nou te modifye ItemStyle.xsl. Bab PANYÒL yo aktyèlman itilize yon lòt XSL ranpli, ContentQueryMain.xsl pou ansanm ak ItemStyle.xsl pou jenere HTML li. Menm jan li yo, non implique, ContentQueryMain.xsl, ki se "pwensipal la" XSL yo kontwole tout pèdi tradiksyon. Une nan tout atik a ak rann yo yonn pou modèles nan ItemStyle.xsl. Nou ap motifye ItemStyle.xsl pou jenere pòt <tab> etikèt devan émet dispit lan premye done e fèmen a <tab> etikèt apwè émet dènye dispit lan. Pou reyalize sa, ContentQueryMain.xsl modifye pou yo pase pou nou "grille de paramètres" modèle nan ItemStyle.xsl, "dènye ligne" ak "aktyèl afile". ItemStyle.xsl itilize sa è conditionnelle baj nesesè yo.
W ap itilize teknik Heather Salomon te, nou jwenn ContentQueryMain.xsl. Sitiye nan la, kote ke ItemStyle.xsl. Piki ekran sa a ta dwe ede:
Nou bezwen pou fè chanjman suivant yo:
- Motifye yon modèle xsl, "CallItemTemplate" ki aktyèlman appelle modèle gwiyad nou nan ItemStyle.xsl. Nou pral pase de karakteristik pou modèle galri a ke li pwal gen yon data li bezwen pou conditionnelle pwodui louvri ak fèmen <tab> baj.
- Motifye yon lòt ti ContentQueryMain.xsl ki rele la "CallItemTemplate" pou yo pase l' yon "LastRow" paramètre se konsa, LastRow sa ta dwe pase pou nou modèle Grille.
Recherchez modèle a ki rele "OuterTemplate.CallItemTemplate" idantifye nan kòd la:
<xsl:modèle fe-apel="OuterTemplate.CallItemTemplate">
Ranplase a an antye modèle comme piba:
|
<xsl:modèle fe-apel="OuterTemplate.CallItemTemplate">
<xsl:param fe-apel="CurPosition" />
<!--
Ajoute a "LastRow" paramètre.
Nou sèlman itilize li lè pase stil atik nan "Grille".
-->
<xsl:param fe-apel="LastRow" />
<xsl:chwazi>
<xsl:Kile tès="@Style = 'NewsRollUpItem'">
<xsl:modèles aplike fè chwa="." mòd="itemstyle">
<xsl:ak-param fe-apel="EditMode" fè chwa="$cbq_iseditmode" />
</xsl:modèles aplike>
</xsl:Kile>
<xsl:Kile tès="@Style = 'NewsBigItem'">
<xsl:modèles aplike fè chwa="." mòd="itemstyle">
<xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
</xsl:modèles aplike>
</xsl:Kile>
<xsl:Kile tès="@Style = 'NewsCategoryItem'">
<xsl:modèles aplike fè chwa="." mòd="itemstyle">
<xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
</xsl:modèles aplike>
</xsl:Kile>
<!--
Pase pozisyon aktyèl ak lastrow pou modèle itemstyle.xsl Grille.
ItemStyle.xsl pwal itilize sa pou fè sikile a louvri Et fèmen <tab> baj.
-->
<xsl:Kile tès="@Style = 'Grille'">
<xsl:modèles aplike fè chwa="." mòd="itemstyle">
<xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
<xsl:ak-param fe-apel="Dire" fè chwa="$LastRow" />
</xsl:modèles aplike>
</xsl:Kile>
<xsl:san sa>
<xsl:modèles aplike fè chwa="." mòd="itemstyle">
</xsl:modèles aplike>
</xsl:san sa>
</xsl:chwazi>
</xsl:modèle>
|
Kòmantè yo pou esplike sa chanjman.
Men wi, la "OuterTemplate.CallItemTemplate" li menm ki rele soti nan yon lòt modèle. Lokalize modèle sa pa chache kòd tèks sa a:
<xsl:modèle fe-apel="OuterTemplate.Body">
Ki gen nan sa pou nou fè nan OuterTemplate.Body epi mete paramètre LastRow a comme piba (montre kòm yon kòmantè nan en):
<xsl:apèl-modèle fe-apel="OuterTemplate.CallItemTemplate">
<xsl:ak-param fe-apel="CurPosition" fè chwa="$CurPosition" />
<!-- Mete a paramètre LastRow. -->
<xsl:ak-param fe-apel="LastRow" fè chwa="$LastRow"/>
</xsl:apèl-modèle>
Après tout sa, nou gen a la fen sa ki te mete sou pye correctement lè sa a, nou ItemStyle.xsl ka fè sikile <tab> baj nan sèl kote.
ItemStyle.Xsl
NOTE: Ankò, tcheke nan ItemStyle.xsl t' ap nenpòt chanjman ki fèt lè sa a, n' a wè effet-kou chanjman sa.
Nou gen de travay isit la:
- Ranplase modèle gri an antye. Ou kapab kopi/mòtye depi anba.
- Ajoute yon trames mumbo te deyò a definisyon modèle permet "formatcurrency" modèle pou travay. (Ou kapab di ke mwen gen yon rèl manch sou XSL).
Premye, près de ItemStyle.xsl sou tèt, ajoute liy sa a:
<!-- Kèk trames mumbo permet nou pou yo ekspoze aux. lajan. -->
<xsl:desimal-fòma fe-apel="anplwaye" chif="KRAZE-BRIZE" />
<xsl:modèle fe-apel="Par" jwenn mèt ke l="*" mòd="itemstyle">
Remarque te ajoute ke mwen ke li tou dwat anvan a <xsl:modèle non = "par" …> definisyon.
Pwochen, tounen al jwenn nou modèle galri. Ranplase modèle gri an antye ak kòd ki pi ba. Li devan dèyè a, Men, pa ezite e-mail m' pa kite kòmantè sou blog mwen si ou gen kesyon.
|
<xsl:modèle fe-apel="Galri" jwenn mèt ke l="Pagaye[@Style = 'Grille']" mòd="itemstyle">
<!--
ContentMain.xsl rann CurPos ak dènye.
Nou itilize sa yo pou conditionnelle fè sikile a louvri ak fèmen <tab> baj.
-->
<xsl:param fe-apel="CurPos" />
<xsl:param fe-apel="Dire" />
<!-- Apwe variables non a ItemStyle.xsl estanda -->
<xsl:varyab fe-apel="SafeImageUrl">
<xsl:apèl-modèle fe-apel="OuterTemplate.GetSafeStaticUrl">
<xsl:ak-param fe-apel="UrlColumnName" fè chwa="'ImageUrl'"/>
</xsl:apèl-modèle>
</xsl:varyab>
<xsl:varyab fe-apel="SafeLinkUrl">
<xsl:apèl-modèle fe-apel="OuterTemplate.GetSafeLink">
<xsl:ak-param fe-apel="UrlColumnName" fè chwa="'LinkUrl'"/>
</xsl:apèl-modèle>
</xsl:varyab>
<xsl:varyab fe-apel="DisplayTitle">
<xsl:apèl-modèle fe-apel="OuterTemplate.GetTitle">
<xsl:ak-param fe-apel="Tit" fè chwa="@Title"/>
<xsl:ak-param fe-apel="UrlColumnName" fè chwa="'LinkUrl'"/>
</xsl:apèl-modèle>
</xsl:varyab>
<xsl:varyab fe-apel="LinkTarget">
<xsl:Si tès="@OpenInNewWindow = 'Vre'" >_blank</xsl:Si>
</xsl:varyab>
<!--
Isit la nou defini yon varyab, "tableStart". Sa a genyen ladan HTML sa nou itilize pou defini sanvenmil tab la tankou étiquettes kolòn yo. Note si sa CurPos = 1, sa gen ladann HTML a nan yon etikèt CDATA.
San sa, se va vid.
Valè tableStart se emited chak fwa ItemStyle te rele via ContentQueryMain.xsl.
-->
<xsl:varyab fe-apel="tableStart">
<xsl:Si tès="$CurPos = 1">
<![CDATA[
<tab fontyè = 1>
<tr bgcolor = "ble">
<td><klavye koulè = "blanch"><b>Pwojè non</b></klavye></td>
<fè aliman td = "dwa"><klavye koulè = "blanch"><b>Dat nèt sou tout pwen</b></klavye></td>
<fè aliman td = "dwa"><klavye koulè = "blanch"><b>Bidjè</b></klavye></td>
<fè aliman td = "dwa"><klavye koulè = "blanch"><b>Depans réel</b></klavye></td>
<td><klavye koulè = "blanch"><b>Tout estati</b></klavye></td>
</tr>
]]>
</xsl:Si>
</xsl:varyab>
<!--
Yon lòt varyab, tableEnd tou senpleman définit la fèmen tab etikèt.
Kòm ak tableStart, se toujou emited. Se poutèt sa, pri pou li plase conditionnelle ki baze sou konnen si nou te gen te yo te fè pase dènye dispit lan ContentQueryMain.xsl sa.
-->
<xsl:varyab fe-apel="tableEnd">
<xsl:Si tès="$CurPos = $Last">
<![CDATA[ </tab> ]]>
</xsl:Si>
</xsl:varyab>
<!--
Toujou fè sikile tableStart sa ki nan liv. Si se pa premye ranje a, yo te fè pase pou nou ContentQueryMain.xsl, Lè sa a, nou konnen pri pou li yo va vid.
Rann enfim pèsistans yap ogmante jiska ke paske lè tableStart l pa vide, sa gen ladann aktyèl HTML sa nou vle fè an ki te rann pa browser a. Si nou pa di analyseur XSL la pou rann enfim sortie ke, li pral pwodui estaf kòm"<tab>" tan pou"<tab>".
-->
<xsl:valè-de fè chwa="$tableStart" rann enfim-pèsistans yap ogmante jiska-ke="Wi"/>
<tr>
<!--
P I: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
-->
<td>
<xsl:valè-de fè chwa="@Project_x005F_x0020_Name"/>
</td>
<td fè aliman="pa vre">
<xsl:valè-de fè chwa="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td fè aliman="pa vre">
<xsl:apèl-modèle fe-apel="formatcurrency">
<xsl:ak-param fe-apel="valè" fè chwa="@Project_x005F_x0020_Budget"></xsl:ak-param>
</xsl:apèl-modèle>
</td>
<td fè aliman="pa vre">
<xsl:apèl-modèle fe-apel="formatcurrency">
<xsl:ak-param fe-apel="valè" fè chwa="@Project_x005F_x0020_Expenses"> </xsl:ak-param>
</xsl:apèl-modèle>
</td>
<td>
<xsl:valè-de fè chwa="@Project_x005F_x0020_Status"/>
</td>
<!--
Tout moun sa yo a pou klarifye bagay.
Sepandan, pote kanè sa yo tounen lakay yo ak vant deboutonnen / li antre nan yon <td> pou wè li vre.
-->
<!--
<div didantite = "linkitem" klas = "élément">
<xsl:Si tès = "kòd longè($SafeImageUrl) != 0">
<klas div = "estati ki nan zòn ki bò gòch">
<yon href = "{$SafeLinkUrl}" sib = "{$LinkTarget}">
<klas img = "estati ki fikse-lajè" src = "{$SafeImageUrl}" alt = "{@ImageUrlAltText}"/>
</yon>
</div>
</xsl:Si>
<klas div = "lyen atik">
<xsl:apèl-modèle Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<yon href = "{$SafeLinkUrl}" sib = "{$LinkTarget}" tit = "{@LinkToolTip}">
<xsl:valè-de chwazi = "$DisxslyTitle" />
</yon>
<klas div = "dekri teren">
<xsl:valè-de select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Fè sikile la fermeture tab etikèt. Si nou pa fè sou dènye dispit lan,
sa va vid.
-->
<xsl:valè-de fè chwa="$tableEnd" rann enfim-pèsistans yap ogmante jiska-ke="Wi"/>
</xsl:modèle>
<xsl:modèle fe-apel="formatcurrency">
<xsl:param fe-apel="valè" fè chwa="0" />
<xsl:valè-de fè chwa='fòma-nombre($valè, "$DDD,DDD,DDD.JJ", "gwoup")' />
</xsl:modèle>
|