superrigardo kaj Objektivo
Ekstere de la skatolo, MUSKO’ Kontenta Demanda Araneaĵo Parto (CQWP) Montras ĝiajn rezultojn en lista formato, Simila serĉi rezultojn. Ĝi estas ankaŭ ebla montri la rezultojn en krada formato (T.e. HTMLa tablo formato). Kradaj formatoj estas pli bonaj en kelkaj cirkonstancoj. Mi priskribas kiel atingi tiun efikon en ĉi tiu artikolo.
Komerca Scenaro
Mi laboris kun kliento sur entrepreno-larĝa MUSKO rollout. Ni desegnis ilian taksonomion tia ke projektoj estas unuaj klasaj civitanoj en la hierarkio kaj havas ilian propran supran nivelan ejon. Projektaj manaĝeroj daŭrigas singleton listo de projekto resuma informo, Kiel titolo, Buĝeto, Atendata kompletiĝa dato, Restanta buĝeton kaj aliaj resumaj tipaj kampoj. De "singleton" Mi signifas laŭmendan SharePoint listo guaranteed enhavi nur unu eron. Simplistically, Ĝi similas tion ĉi:
La teknika alproksimiĝo estas multe da la sama kiel priskribita Ĉi tie (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). La CQWP uzas XSL transformas emanigi HTML por la retumilo fari.
Mi ĉiam antaŭvidas la rezulton antaŭ plonĝanta en la XSL ĉar XSL estas inkubo. Ĉi tie-a mia dezirita rezulton:
HTML tiel produktas ke rezulto:
|
<Html>
<Korpo>
<Centro>
<Tablo Landlimo=1>
<!-- Etikedoj -->
<Tr Bgcolor=Blua>
<Td><Fonto Koloro=Blanka><B>Projekta Nomo</B></Fonto></Td>
<Td Vicigi=Ĝusta><Fonto Koloro=Blanka><B>Kompleta Dato</B></Fonto></Td>
<Td Vicigi=Ĝusta><Fonto Koloro=Blanka><B>Buĝeto</B></Fonto></Td>
<Td Vicigi=Ĝusta><Fonto Koloro=Blanka><B>Reala Elspezo</B></Fonto></Td>
<Td><Fonto Koloro=Blanka><B>Entuta Statuso</B></Fonto></Td>
</Tr>
<Tr>
<Td>Re-drato komputila ĉambro.</Td>
<Td Vicigi=Ĝusta>02/01/08</Td>
<Td Vicigi=Ĝusta>22,500.00</Td>
<Td Vicigi=Ĝusta>19,000.00</Td>
<Td>En Progreso</Td>
</Tr>
<Tr>
<Td>Kondiĉaj serviloj por SQLa Altgradigo</Td>
<Td Vicigi=Ĝusta>04/01/08</Td>
<Td Vicigi=Ĝusta>7,500.00</Td>
<Td Vicigi=Ĝusta>0.00</Td>
<Td>Planita</Td>
</Tr>
</Tablo>
</Centro>
</Korpo>
</Html>
|
Alproksimiĝo
Sekvi ĉi tiujn paŝojn krei la kradon:
- Identigi la erojn de la krado (Remas/kolumnojn).
- Difini kaj krei necesajn ejajn kolumnojn.
- Krei sub ejoj por la projektoj kaj singleton listoj.
- Aldoni la CQWP al retpaĝo kaj formi ĝin serĉi viajn listojn.
- Modifi la XML de la CQWP kolekti supre la suplementajn kolumnojn.
- Modifi la XSL produkti tablon.
Mi estas iranta koncentri sur nombro ses. Nombras unu tra kvar estas rekte-antaŭa kaj io ke ajna CQWPa uzanto jam faris. Nombri kvin estis bone-dokumentita de aliaj inkluzivanta ĉi tiun ĝisfundan ekranon-pafita ŝarĝitan artikolon de MSDN Ĉi tie (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) Kaj blogo de Heather Solomon Ĉi tie (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
nuksoj Kaj Boltoj
Komenci kaj efektivigi paŝojn unu tra kvin kiel por la MSDNa dokumentaro kaj Heather Solomon-a artikolo.
Ĉe ĉi tiu punkto, Vi aldonis vian CQWP al la paĝo kaj vi havas via <CommonViewFields> Formita kiel necesa.
Sekvanta la kutimajn paŝojn, Mi akiras ĉi tiujn mezajn rezultojn:
1. Krei kontentan tipon, templatized laŭmenda listo por tiu kontenta tipo kaj du ejoj. Ĉi tie estas la kontenta tipo:
Ĉi tie estas la eja strukturo:
2. Aldoni la CQWP post kreanta mian projekton subsites kaj singleton projekto resumaj listoj:
3. Aldoni ĉiuj la suplementa informo mi deziras tra la <CommonViewFields>:
<Nemoveblaĵo Nomo="CommonViewFields" Tipo="Ŝnuro">Projekti_x0020_Nomo;Projekti_x0020_Elspezoj;Projekti_x0020_Statuso;Projekti_x0020_Komenco_x0020_Dato;Projekti_x0020_Fino_x0020_Dato;Projekti_x0020_Buĝeto</Nemoveblaĵo>
Noti ke mi devis teni ĉiuj la nemoveblaĵaj kampoj sur unu linio aŭ ĝi ne laborus (CQWP dirus min ke la demando revenis neniujn erojn).
4. Ĉe ĉi tiu punkto, Ni estas pretaj movi pretere la MSDNan artikolon kaj flip sur super al artikolo de Heather Solomon. Sekvi ŝiajn paŝojn komencanta proksime al paŝo #5 Krei personigita / Unghosted versio de ItemStyle.Xsl. Mi sekvas la konsilon de Heather, Supre tra paŝo 11 Kaj akiri ĉi tiujn mezajn rezultojn:
4.1: Nomi mian XSLan ŝablonon kiel sekvas:
<Xsl:Ŝablona nomo="Krado" Matĉa="Disputo[@Stila='Krado']" Maniero="itemstyle">
Mi ankaŭ iomete modifas ŝin sugestita <Xsl:Pro tio ke-ĉiu …> De aldonanta <Br/> Etikedi provizi pli puran listeron:
<Xsl:Pro tio ke-ĉiu Elektita="@*">
P:<Xsl:Valoro-de Elektita="Nomo()" /><Br/>
</Xsl:Pro tio ke-ĉiu>
4.2: Mi modifas la araneaĵan parton, Iri al apero kaj elekti mian "Kradon" Stilo:
Apliki la ŝanĝon kaj ĉi tie estas la rezulto:
Ni povas vidi de la supra ke la kampoj ni deziras (Projekta nomo, Elspezo, Statuso, Ktp) Estas havebla por ni uzi kiam nin emanigas la HTML. Ne nur tio, Sed ni vidas la nomojn de kiu ni devas referenci tiujn kolumnojn en la XSL. Ekzemple, Ni referencas Projektan Statuson kiel "Projekto_x005F_x0020_Nomo".
Ĉe ĉi tiu punkto, Ni foriras de la blogo de Heather kaj de la ŝultroj de ĉi tiuj gigantoj, Mi aldonas mian propran malgrandan pecon.
ContentQueryMain.Xsl
NOTO: Kiam faranta ŝanĝojn al ambaŭ ContentQueryMain.Xsl tiel kiel ItemStyle.Xsl, Vi devas kontroli tiujn registras reen en antaŭ ol vi vidas la efikon de viaj ŝanĝoj.
Por krado-faranta celojn, MUSKAJ uzoj du malsamaj XSLaj dosieroj produkti la rezultojn ni vidas de CQWP. Produkti la antaŭan pecon de produktado, Ni modifis ItemStyle.Xsl. MUSKO efektive uzas alian XSLan dosieron, ContentQueryMain.Xsl al kune kun ItemStyle.Xsl produkti ĝian HTML. Kiel ĝia nomo implicas, ContentQueryMain.Xsl estas la "ĉefa" XSL kiu kontrolas la entutan fluon de traduko. Ĝi iterates tra ĉiuj la trovita erojn kaj pasas ilin unu de unu al ŝablonoj en ItemStyle.Xsl. Ni modifos ItemStyle.Xsl produkti la turniron <Tablo> Etikedi antaŭ ol emaniganta la unuan disputon de datumo kaj la fermo <Tablo> Etikedi post kiam emaniganta la lastan disputon. Plenumi tion ĉi, ContentQueryMain.Xsl estas modifita pasi du parametrojn al nia "krado" Ŝablono en ItemStyle.Xsl, "Lasta disputo" Kaj "nuna disputo". ItemStyle.Xsl uzas ĉi tiujn kondiĉe emanigi la necesajn etikedojn.
Uzanta teknikon de Heather Solomon, Ni troviĝas ContentQueryMain.Xsl. Ĝi estas troviĝita en la sama loko kiel ItemStyle.Xsl. Tio ĉi kribras pafita devus helpi:
Ni devas fari la sekvantajn ŝanĝojn:
- Modifi xsl ŝablono, "CallItemTemplate" KE efektive alvokas nian Kradan ŝablonon en ItemStyle.Xsl. Ni pasos du parametrojn al la Krada ŝablono por ke ĝi havos la datumon ĝi devas kondiĉe produkti komencan kaj fermo <Tablo> Etikedoj.
- Modifi alian mordis de ContentQueryMain.Xsl kiu vokas la "CallItemTemplate" Pasi ĝin "LastRow" Parametro por ke LastRow povas esti pasita sur al nia Krada ŝablono.
Troviĝi la ŝablonon nomis "OuterTemplate.CallItemTemplate" Identigita de la ŝnuro:
<Xsl:Ŝablono Nomo="OuterTemplate.CallItemTemplate">
Anstataŭigi la tutan ŝablonon kiel sekvas:
|
<Xsl:Ŝablono Nomo="OuterTemplate.CallItemTemplate">
<Xsl:Param Nomo="CurPosition" />
<!--
Aldoni la "LastRow" Parametro.
Ni nur uzas ĝin kiam la era stila transludo je estas "Krado".
-->
<Xsl:Param Nomo="LastRow" />
<Xsl:Elekti>
<Xsl:Kiam Testo="@Stilo='NewsRollUpItem'">
<Xsl:Apliki-ŝablonoj Elektita="." Maniero="Itemstyle">
<Xsl:Kun-param Nomo="EditMode" Elektita="$Cbq_iseditmode" />
</Xsl:Apliki-ŝablonoj>
</Xsl:Kiam>
<Xsl:Kiam Testo="@Stilo='NewsBigItem'">
<Xsl:Apliki-ŝablonoj Elektita="." Maniero="Itemstyle">
<Xsl:Kun-param Nomo="CurPos" Elektita="$CurPosition" />
</Xsl:Apliki-ŝablonoj>
</Xsl:Kiam>
<Xsl:Kiam Testo="@Stilo='NewsCategoryItem'">
<Xsl:Apliki-ŝablonoj Elektita="." Maniero="Itemstyle">
<Xsl:Kun-param Nomo="CurPos" Elektita="$CurPosition" />
</Xsl:Apliki-ŝablonoj>
</Xsl:Kiam>
<!--
Pasi nunan pozicion kaj lastrow al la Krado itemstyle.Xsl ŝablono.
ItemStyle.Xsl uzos tion emanigi la turniron kaj fermon <Tablo> Etikedoj.
-->
<Xsl:Kiam Testo="@Stila='Krado'">
<Xsl:Apliki-ŝablonoj Elektita="." Maniero="Itemstyle">
<Xsl:Kun-param Nomo="CurPos" Elektita="$CurPosition" />
<Xsl:Kun-param Nomo="Lasta" Elektita="$LastRow" />
</Xsl:Apliki-ŝablonoj>
</Xsl:Kiam>
<Xsl:Alie>
<Xsl:Apliki-ŝablonoj Elektita="." Maniero="Itemstyle">
</Xsl:Apliki-ŝablonoj>
</Xsl:Alie>
</Xsl:Elekti>
</Xsl:Ŝablono>
|
La rimarkoj priskribas la celon de la ŝanĝoj.
Nature, La "OuterTemplate.CallItemTemplate" Estas ĝi mem vokita de alia ŝablono. Troviĝi tiun ŝablonon de serĉanta ĉi tiun tekstan ŝnuron:
<Xsl:Ŝablono Nomo="OuterTemplate.Korpo">
Scroll tra la instruoj en OuterTemplate.Korpo kaj inserti la LastRow parametro kiel sekvas (Montrita kiel rimarko en italics):
<Xsl:Voko-ŝablono Nomo="OuterTemplate.CallItemTemplate">
<Xsl:Kun-param Nomo="CurPosition" Elektita="$CurPosition" />
<!-- Inserti la LastRow parametro. -->
<Xsl:Kun-param Nomo="LastRow" Elektita="$LastRow"/>
</Xsl:Voko-ŝablono>
Post kiam ĉiuj de tio ĉi, Ni fine havas aferojn instalis konvene por ke nia ItemStyle.Xsl povas emanigi <Tablo> Etikedoj ĉe la ĝusta loko.
ItemStyle.Xsl
NOTO: Denove, Kontrolo en ItemStyle.Xsl post kiam faranta ajnajn ŝanĝojn por ke vi vidas la efikon de tiuj ŝanĝoj.
Ni havas du taskojn ĉi tie:
- Anstataŭigi la tutan Kradan ŝablonon. Vi povas kopii/almeti de malsupre.
- Aldoni kelkaj mumbo elefanĉjo ekster la ŝablona difino kiu ebligas "formatcurrency" Ŝablono labori. (Vi povas diri ke mi havas maldikan anson sur XSL).
Unue, Proksime al la supro de ItemStyle.Xsl, Aldoni ĉi tiun linion:
<!-- Kelkaj mumbo elefanĉjo kiu ebligas nin montri Usonon. valuto. -->
<Xsl:Decimala-formato Nomo="Personaroj" Cifero="D" />
<Xsl:Ŝablono Nomo="Defaŭlta" Matĉo="*" Maniero="Itemstyle">
Noti ke mi aldonis ĝin rekte antaŭ ol la <Xsl:Ŝablona nomo="Nerepago" …> Difino.
Poste, Reveni al nia Krada ŝablono. Anstataŭigi la tutan Kradan ŝablonon kun la kodo sub. Ĝi estas plene rimarkita, Sed ne hezitas retpoŝtigi min aŭ forpermesaj rimarkoj sur mia blogo se vi havas demandojn.
|
<Xsl:Ŝablono Nomo="Krado" Matĉo="Disputo[@Stila='Krado']" Maniero="Itemstyle">
<!--
ContentMain.Xsl pasas CurPos kaj Lasta.
Ni uzas ĉi tiujn kondiĉe emanigi la turniron kaj fermon <Tablo> Etikedoj.
-->
<Xsl:Param Nomo="CurPos" />
<Xsl:Param Nomo="Lasta" />
<!-- La sekvanta variables estas nemodifita de la norma ItemStyle.Xsl -->
<Xsl:Varia Nomo="SafeImageUrl">
<Xsl:Voko-ŝablono Nomo="OuterTemplate.GetSafeStaticUrl">
<Xsl:Kun-param Nomo="UrlColumnName" Elektita="'ImageUrl'"/>
</Xsl:Voko-ŝablono>
</Xsl:Varia>
<Xsl:Varia Nomo="SafeLinkUrl">
<Xsl:Voko-ŝablono Nomo="OuterTemplate.GetSafeLink">
<Xsl:Kun-param Nomo="UrlColumnName" Elektita="'LinkUrl'"/>
</Xsl:Voko-ŝablono>
</Xsl:Varia>
<Xsl:Varia Nomo="DisplayTitle">
<Xsl:Voko-ŝablono Nomo="OuterTemplate.GetTitle">
<Xsl:Kun-param Nomo="Titolo" Elektita="@Titolo"/>
<Xsl:Kun-param Nomo="UrlColumnName" Elektita="'LinkUrl'"/>
</Xsl:Voko-ŝablono>
</Xsl:Varia>
<Xsl:Varia Nomo="LinkTarget">
<Xsl:Se Testo="@OpenInNewWindow = 'Vera'" >_Malplena</Xsl:Se>
</Xsl:Varia>
<!--
Ĉi tie ni difinas varian, "TableStart". Tio ĉi enhavas la HTML
ke ni uzas difini la malfermon de la tablo tiel kiel la kolumnaj
etikedoj. Noti ke se CurPos = 1, Ĝi inkluzivas la HTML en CDATAa etikedo.
Alie, Ĝi estos senhoma.
La valoro de tableStart estas emited ĉiu tempo ItemStyle estas vokita tra
ContentQueryMain.Xsl.
-->
<Xsl:Varia Nomo="TableStart">
<Xsl:Se Testo="$CurPos = 1">
<![CDATA[
<Tabla landlimo=1>
<Tr bgcolor="bluo">
<Td><Fonta koloro="blankulo"><B>Projekta Nomo</B></Fonto></Td>
<Td vicigas="ĝustan"><Fonta koloro="blankulo"><B>Kompleta Dato</B></Fonto></Td>
<Td vicigas="ĝustan"><Fonta koloro="blankulo"><B>Buĝeto</B></Fonto></Td>
<Td vicigas="ĝustan"><Fonta koloro="blankulo"><B>Reala Elspezo</B></Fonto></Td>
<Td><Fonta koloro="blankulo"><B>Entuta Statuso</B></Fonto></Td>
</Tr>
]]>
</Xsl:Se>
</Xsl:Varia>
<!--
Alia varia, TableEnd simple difinas la ferman tablan etikedon.
Kiel kun tableStart, Ĝi estas ĉiam emited. Tio ĉi estas kial ĝia valoro estas
asignita kondiĉe bazita al ĉu ni estis pasita la lastan
disputon de ContentQueryMain.Xsl.
-->
<Xsl:Varia Nomo="TableEnd">
<Xsl:Se Testo="$CurPos = $Lasta">
<![CDATA[ </Tablo> ]]>
</Xsl:Se>
</Xsl:Varia>
<!--
Ĉiam emanigi la enhavojn de tableStart. Se tio ĉi ne estas la unua
disputo pasita al ni de ContentQueryMain.Xsl, Tiam ni scias ĝian valoron
estos malplena.
Malfunkciigi eligita evitanta ĉar kiam tableStart ĝi ne malplena, Ĝi
inkluzivas realan HTML ke ni deziras esti farita de la retumilo. Se
ni ne diras la XSL parser malfunkciigi eligita evitanta, Ĝi produktos
aĵon ŝatas "≪Tablo≫" Anstataŭ "<Tablo>".
-->
<Xsl:Valoro-de Elektita="$TableStart" Malfunkciigi-produktado-evitanta="Jes"/>
<Tr>
<!--
P:Projekti_x005F_x0020_Nomo
P:Projekti_x005F_x0020_Fino_x005F_x0020_Dato
P:Projekti_x005F_x0020_Buĝeto
P:Projekti_x005F_x0020_Elspezoj
P:Projekti_x005F_x0020_Statuso
-->
<Td>
<Xsl:Valoro-de Elektita="@Projekti_x005F_x0020_Nomo"/>
</Td>
<Td Vicigi="Ĝusta">
<Xsl:Valoro-de Elektita="@Projekti_x005F_x0020_Fino_x005F_x0020_Dato"/>
</Td>
<Td Vicigi="Ĝusta">
<Xsl:Voko-ŝablono Nomo="Formatcurrency">
<Xsl:Kun-param Nomo="Valoro" Elektita="@Projekti_x005F_x0020_Buĝeto"></Xsl:Kun-param>
</Xsl:Voko-ŝablono>
</Td>
<Td Vicigi="Ĝusta">
<Xsl:Voko-ŝablono Nomo="Formatcurrency">
<Xsl:Kun-param Nomo="Valoro" Elektita="@Projekti_x005F_x0020_Elspezoj"> </Xsl:Kun-param>
</Xsl:Voko-ŝablono>
</Td>
<Td>
<Xsl:Valoro-de Elektita="@Projekti_x005F_x0020_Statuso"/>
</Td>
<!--
Ĉiuj de la sekvantaro estas elrimarkita klarigi aferojn.
Tamen, Alporti ĝin reen kaj ŝtopi ĝin en <Td> Vidi ĝian
efikon.
-->
<!--
<Div identigaĵo="linkitem" Klasa="ero">
<Xsl:Se testa="ŝnuro-longeco($SafeImageUrl) != 0">
<Div klasa="bildo-areo-lasita">
<href="{$SafeLinkUrl}" Celo="{$LinkTarget}">
<Img klasa="bildo-fiksa-larĝo" Src="{$SafeImageUrl}" Alt="{@ImageUrlAltText}"/>
</al>
</Div>
</Xsl:Se>
<Div klasa="ligo-ero">
<Xsl:Voko-ŝablono Nomi="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href="{$SafeLinkUrl}" Celo="{$LinkTarget}" Titolo="{@LinkToolTip}">
<Xsl:Valoro-de elektita="$DisXslyTitle"/>
</al>
<Div klasa="priskribo">
<Xsl:Valoro-de elektita="@Priskribo" />
</Div>
</Div>
</Div>
-->
</Tr>
<!--
Emanigi la ferman tablan etikedon. Se ni ne estas sur la lasta disputo,
Tio ĉi estos malplena.
-->
<Xsl:Valoro-de Elektita="$TableEnd" Malfunkciigi-produktado-evitanta="Jes"/>
</Xsl:Ŝablono>
<Xsl:Ŝablono Nomo="Formatcurrency">
<Xsl:Param Nomo="Valoro" Elektita="0" />
<Xsl:Valoro-de Elektita='Formato-nombro($Valoro, "$DDD,DDD,DDD.DD", "Personaroj")' />
</Xsl:Ŝablono>
|