Yleiskatsaus ja tavoite
Kättelyssä, MOSS’ Sisältökysely-Web-osan (CQWP) näyttää tulokset luettelo muodossa, vastaavat hakutulokset. On myös mahdollista näyttää tulokset ruudukkomuodossa (ts. HTML-taulukkomuodossa). Ruudukon muodossa ovat parempia joissakin tapauksissa. Kerron miten saavuttaa tämä vaikutus tässä artiklassa.
Business skenaario
Olen työskennellyt asiakkaan yrityksen laajuinen MOSS mukaa. Olemme suunnitelleet niiden taksonomia siten, että hankkeet ovat ensimmäisen luokan kansalaisia hierarkiassa ja omia ylimmän tason sivuston. Projektipäälliköt luetteloa singleton projektin yhteenvetotiedot, kuten otsikko, talousarvion, odotettu päättymispäivä, jäljellä olevan budjetin ja muut yhteenvetotyyppi-kentät. By "singleton" Tarkoitan muokautetun SharePoint-luettelon taattu sisältää vain yhden kohteen. Yksinkertaistetusti, se näyttää tältä:
Tekninen lähestymistapa on paljon samaa kuvatulla Täällä (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP käyttää XSL-muunnoksen päästää HTML selain tehdä.
Olen aina kuvitella tulos ennen pulahtamista XSL, koska XSL on painajainen. Tässä on haluttu tulos:
HTML kuten tämä tuottaa tuloksen:
|
<HTML>
<kehon>
<Center>
<taulukko raja= 1>
<!-- Tarrat-->
<TR BgColor= sininen>
<TD><fontti väri= valkoinen><b>Projektinimi</b></fontti></TD>
<TD Tasaa= oikealle><fontti väri= valkoinen><b>Täydellinen päivämäärä</b></fontti></TD>
<TD Tasaa= oikealle><fontti väri= valkoinen><b>Talousarvion</b></fontti></TD>
<TD Tasaa= oikealle><fontti väri= valkoinen><b>Todellisten kulujen</b></fontti></TD>
<TD><fontti väri= valkoinen><b>Yleisen tilan</b></fontti></TD>
</TR>
<TR>
<TD>Uudelleen johdin atk-huone.</TD>
<TD Tasaa= oikealle>02/01/08</TD>
<TD Tasaa= oikealle>22,500.00</TD>
<TD Tasaa= oikealle>19,000.00</TD>
<TD>Käynnissä</TD>
</TR>
<TR>
<TD>Säännös palvelimia SQL päivittää</TD>
<TD Tasaa= oikealle>04/01/08</TD>
<TD Tasaa= oikealle>7,500.00</TD>
<TD Tasaa= oikealle>0.00</TD>
<TD>Suunnitellut</TD>
</TR>
</taulukko>
</Center>
</kehon>
</HTML>
|
Lähestymistapa
Voit luoda ruudukon seuraavasti:
- Tunnistaa verkon osat (Rivi/sarake).
- Määrittää ja luoda tarvittavat sivustosarakkeita.
- Luoda alisivustot hankkeita ja singleton luettelot.
- CQWP lisääminen web-sivun ja määrittää sen etsiä luettelot.
- Muokkaa CQWP's XML koota muita sarakkeita.
- Muokkaa XSL luoda.
Aion keskittyä numero kuusi. Numerot läpi neljä ovat suoraan eteenpäin ja mikä tahansa CQWP käyttäjä on jo tehnyt. Numero viisi on dokumentoitu hyvin muiden myös Tämä kattava näyttö-shot kuormattuna artikkeli polveutua MSDN Täällä (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ja Heather Salomonin blogi Täällä (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Ja mutterit
Aloittaa ja toteuttaa kohtien 1–5 kohti MSDN dokumentaatio ja Heather Salomonin artikla toimet.
Tässä vaiheessa, Olet lisännyt sinun CQWP sivun ja sinulla on oman <CommonViewFields> määritetty tarvittaessa.
Tavallista ohjeiden, Saan nämä välitulosten:
1. Luo sisältötyyppi, Julkaisusivuston luettelon sisältölajin ja saittien. Tässä on sisällön tyyppi:
Tässä on sivustorakenne:
2. Lisätä CQWP kun olet luonut projektin alisivustot ja singleton projektin Yhteenveto-luettelot:
3. Lisää kaikki lisätiedot haluan kautta <CommonViewFields>:
<ominaisuus Nimi="CommonViewFields" tyyppi="merkkijono">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</ominaisuus>
Huomaa, että jouduin pitämään ominaisuuskentät yksi tai se ei toimi (CQWP kertoisi minulle, että kysely palauttaa kohteita ei).
4. Tässä vaiheessa, Olemme valmiita siirtyä MSDN-artikkelissa ja kääntää yli Heather Salomonin artiklan. Seuraa hänen ohjeita alkaen lähelle vaihe #5 luoda oman / unghosted versio ItemStyle.xsl. I-kirjain harjoittaa Kanervan neuvoja, läpi vaihe 11 ja saada nämä välitulosten:
4.1: Nimi XSL-mallia seuraavasti:
<XSL:mallin nimi = "Grid" vastaa = "rivi[@Style = "Grid"]" Mode = "itemstyle">
Myös hieman muuttaa hänen ehdotti <XSL:for-each …> lisäämällä <br /> Tag antaa cleaner luettelon:
<XSL:for-each Valitse="@*">
P:<XSL:arvo Valitse="Nimi()" /><br/>
</XSL:for-each>
4.2: Web-osan muokkaaminen, Siirry ulkonäkö ja valitse "Grid" tyyli:
Käytä muutos ja tässä on tulos:
Näemme edellä että kentät haluamme (Projektinimi, kulut, tila, jne) ovat käytettävissä meille kun me päästää HTML. Paitsi että, mutta näemme nimet, joilla on viitattava näiden sarakkeiden xsl: ään. Esimerkiksi, me viittaus projektin tilaa "Project_x005F_x0020_Name".
Tässä vaiheessa, lähdetään Heather blogi ja näiden jättiläisten olkapäillä, Lisään oman hieman.
ContentQueryMain.xsl
HUOMAUTUS: Kun teet muutoksia niin ContentQueryMain.xsl kuin ItemStyle.xsl, sinun täytyy tarkistaa tiedostot takaisin ennen kuin näet tekemiesi muutosten vaikutukset.
Grid-making tarkoituksiin, MOSS käyttää kaksi erilaista XSL kuvaa tuloksia näemme CQWP. Tuottaa tuotoksen edellinen vähän, muutettu ItemStyle.xsl. MOSS tosiasiallisesti käyttää toisen XSL-tiedosto, ContentQueryMain.xsl ja yhdessä ItemStyle.xsl sen HTML-koodia. Kuten nimikin, ContentQueryMain.xsl on "main" XSL, joka ohjaa koko virtaus käännös. Se käy läpi kaikki löytötavarat ja välittää ne yksitellen malleja ItemStyle.xsl. Muokkaamalla ItemStyle.xsl tuottaa auki <taulukko> Tag ennen säteilevät ensimmäisen rivin tiedot ja sulkeminen <taulukko> Tag jälkeen säteilevät viimeisen rivin. Tämän tavoitteen saavuttamiseksi, ContentQueryMain.xsl muutetaan välittää parametreja "grid" malli ItemStyle.xsl, "viimeinen rivi" ja "nykyinen rivi". ItemStyle.xsl käyttää näitä ehdollisesti päästää tarvittavat Tunnisteet.
Heather Salomonin tekniikalla, Olemme löytäneet ContentQueryMain.xsl. Se sijaitsee samassa paikassa kuin ItemStyle.xsl. Tämä kuvakaappaus pitäisi auttaa:
Meidän on tehtävä seuraavat muutokset:
- Muuttaa xsl-mallia, "CallItemTemplate" että itse asiassa esiin meille ruudukon malli ItemStyle.xsl. Välitämme kaksi parametria ruudukon malliin niin, että se on tiedot ehdollinen luominen, avaaminen ja sulkeminen <taulukko> Tunnisteet.
- Muokkaa toinen vähän ContentQueryMain.xsl, joka kutsuu "CallItemTemplate" ohi se "LastRow" parametri joten että LastRow välitetään verkkoon malliin.
Etsi malli nimeltä "OuterTemplate.CallItemTemplate" tunnistaa merkkijono:
<XSL:malli Nimi="OuterTemplate.CallItemTemplate">
Vaihda koko malline seuraavasti:
|
<XSL:malli Nimi="OuterTemplate.CallItemTemplate">
<XSL:Param Nimi="CurPosition" />
<!--
Lisää "LastRow" parametri.
Me vain käyttää sitä, kun kohteen tyyli pass on "Grid".
-->
<XSL:Param Nimi="LastRow" />
<XSL:Valitse>
<XSL:Milloin testi="@Style = "NewsRollUpItem"">
<XSL:Käytä malleja Valitse="." tila="itemstyle">
<XSL:param kanssa Nimi="Edit" Valitse="$cbq_iseditmode" />
</XSL:Käytä malleja>
</XSL:Milloin>
<XSL:Milloin testi="@Style = "NewsBigItem"">
<XSL:Käytä malleja Valitse="." tila="itemstyle">
<XSL:param kanssa Nimi="CurPos" Valitse="$CurPosition" />
</XSL:Käytä malleja>
</XSL:Milloin>
<XSL:Milloin testi="@Style = "NewsCategoryItem"">
<XSL:Käytä malleja Valitse="." tila="itemstyle">
<XSL:param kanssa Nimi="CurPos" Valitse="$CurPosition" />
</XSL:Käytä malleja>
</XSL:Milloin>
<!--
Nykyinen asema ja lastrow siirtyy verkkoon itemstyle.xsl malli.
ItemStyle.xsl käyttää tätä päästää auki ja sulkeminen <taulukko> Tunnisteet.
-->
<XSL:Milloin testi="@Style = "Grid"">
<XSL:Käytä malleja Valitse="." tila="itemstyle">
<XSL:param kanssa Nimi="CurPos" Valitse="$CurPosition" />
<XSL:param kanssa Nimi="Viimeksi" Valitse="$LastRow" />
</XSL:Käytä malleja>
</XSL:Milloin>
<XSL:muuten>
<XSL:Käytä malleja Valitse="." tila="itemstyle">
</XSL:Käytä malleja>
</XSL:muuten>
</XSL:Valitse>
</XSL:malli>
|
Kommentit kuvaavat muutosten tavoitteena.
Tietysti, "OuterTemplate.CallItemTemplate" kutsutaan itse toisesta mallista. Etsi mallin etsimällä tämän merkkijonon:
<XSL:malli Nimi="OuterTemplate.Body">
Selata ohjeita OuterTemplate.Body ja LastRow-parametrin lisääminen seuraavasti (JavaScript kommentin kursiivilla):
<XSL:Call-template Nimi="OuterTemplate.CallItemTemplate">
<XSL:param kanssa Nimi="CurPosition" Valitse="$CurPosition" />
<!-- LastRow-parametrin lisääminen. -->
<XSL:param kanssa Nimi="LastRow" Valitse="$LastRow"/>
</XSL:Call-template>
Kaiken tämän jälkeen, vihdoinkin asiat asennettu oikein niin, että meidän ItemStyle.xsl voi lähettää <taulukko> Tunnisteet oikeassa paikassa.
ItemStyle.Xsl
HUOMAUTUS: Uudelleen, Tarkista ItemStyle.xsl kun olet tehnyt muutokset siten, että näiden muutosten vaikutus.
Meillä kaksi tehtävää:
- Korvata koko ruudukon malli. Voi kopioida/liittää alla.
- Lisää jotkut hölynpölyä ulkopuolella mallipohjan määritys, jonka avulla "formatcurrency" toimii. (Voit kertoa, että minulla on heikko kahva XSL).
Ensimmäinen, yläosassa ItemStyle.xsl, Lisää tämä rivi:
<!-- Jotkut hölynpölyä, jonka avulla voimme näyttää USA: n. valuutta. -->
<XSL:desimaalin-format Nimi="henkilökunta" numero="D" />
<XSL:malli Nimi="Oletus" ottelu="*" tila="itemstyle">
Huomaa, että olen lisännyt sen suoraan ennen <XSL:mallin nimi = "laiminlyöminen" …> määritelmä.
Seuraava, Siirry takaisin verkkoon malliin. Korvaa koko ruudukon mallin koodi alla. Se huolellisesti kommentoi, mutta älä epäröi sähköpostia minulle tai jättää kommentteja blogiin, jos sinulla on kysyttävää.
|
<XSL:malli Nimi="Ruudukko" ottelu="Rivi[@Style = "Grid"]" tila="itemstyle">
<!--
ContentMain.xsl kulkee CurPos ja viime.
Käytämme näitä ehdollisesti päästää auki ja sulkeminen <taulukko> Tunnisteet.
-->
<XSL:Param Nimi="CurPos" />
<XSL:Param Nimi="Viimeksi" />
<!-- Seuraavat muuttujat ovat muuttamattomia standard ItemStyle.xsl -->
<XSL:muuttuja Nimi="SafeImageUrl">
<XSL:Call-template Nimi="OuterTemplate.GetSafeStaticUrl">
<XSL:param kanssa Nimi="UrlColumnName" Valitse=""ImageUrl""/>
</XSL:Call-template>
</XSL:muuttuja>
<XSL:muuttuja Nimi="SafeLinkUrl">
<XSL:Call-template Nimi="OuterTemplate.GetSafeLink">
<XSL:param kanssa Nimi="UrlColumnName" Valitse=""LinkUrl""/>
</XSL:Call-template>
</XSL:muuttuja>
<XSL:muuttuja Nimi="DisplayTitle">
<XSL:Call-template Nimi="OuterTemplate.GetTitle">
<XSL:param kanssa Nimi="Otsikko" Valitse="@Title"/>
<XSL:param kanssa Nimi="UrlColumnName" Valitse=""LinkUrl""/>
</XSL:Call-template>
</XSL:muuttuja>
<XSL:muuttuja Nimi="LinkTarget">
<XSL:Jos testi="@OpenInNewWindow = "True"" >_blank</XSL:Jos>
</XSL:muuttuja>
<!--
Tässä määrittelemme muuttujan, "tableStart". Tämä on HTML-koodia, että käytämme määritellä avaaminen sekä taulukon sarakkeiden otsikot. Huomaa, että jos CurPos = 1, Se sisältää HTML-koodin CDATA-tag.
Muuten, se on tyhjä.
TableStart arvo on emited aina ItemStyle kutsutaan ContentQueryMain.xsl.
-->
<XSL:muuttuja Nimi="tableStart">
<XSL:Jos testi="$CurPos = 1">
<![CDATA[
<taulukon reunan = 1>
<TR bgcolor = "blue">
<TD><fonttiväri = "valkoinen"><b>Projektinimi</b></fontti></TD>
<TD align = "oikealle"><fonttiväri = "valkoinen"><b>Täydellinen päivämäärä</b></fontti></TD>
<TD align = "oikealle"><fonttiväri = "valkoinen"><b>Talousarvion</b></fontti></TD>
<TD align = "oikealle"><fonttiväri = "valkoinen"><b>Todellisten kulujen</b></fontti></TD>
<TD><fonttiväri = "valkoinen"><b>Yleisen tilan</b></fontti></TD>
</TR>
]]>
</XSL:Jos>
</XSL:muuttuja>
<!--
Toinen muuttuja, tableEnd määritellään yksinkertaisesti sulkeminen taulukko tag.
Kuten tableStart, se on aina emited. Siksi sen arvo määritetään ehdollisesti perustuu onko olen ollut ohitimme viimeisen rivin ContentQueryMain.xsl.
-->
<XSL:muuttuja Nimi="tableEnd">
<XSL:Jos testi="$CurPos = $Last">
<![CDATA[ </taulukko> ]]>
</XSL:Jos>
</XSL:muuttuja>
<!--
Aina päästää tableStart sisältö. Jos tämä ei ole ensimmäinen rivi ContentQueryMain.xsl ohi, sitten tiedämme, että sen arvo on tyhjä.
Poistaa tuotannon pakenevat koska kun tableStart se ole tyhjä, Se sisältää varsinaisen HTML, että haluamme menettäisi jyrsiä. Jos me emme puolestaan tarjoa XSL-jäsentimen poistaa tuotannon paeta, se tuottaa juttuja"<taulukko>" sen sijaan, että"<taulukko>".
-->
<XSL:arvo Valitse="$tableStart" Poista lähtö paeta="Kyllä"/>
<TR>
<!--
P: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:arvo Valitse="@Project_x005F_x0020_Name"/>
</TD>
<TD Tasaa="oikeus">
<XSL:arvo Valitse="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD Tasaa="oikeus">
<XSL:Call-template Nimi="FormatCurrency">
<XSL:param kanssa Nimi="arvo" Valitse="@Project_x005F_x0020_Budget"></XSL:param kanssa>
</XSL:Call-template>
</TD>
<TD Tasaa="oikeus">
<XSL:Call-template Nimi="FormatCurrency">
<XSL:param kanssa Nimi="arvo" Valitse="@Project_x005F_x0020_Expenses"> </XSL:param kanssa>
</XSL:Call-template>
</TD>
<TD>
<XSL:arvo Valitse="@Project_x005F_x0020_Status"/>
</TD>
<!--
Kaikki seuraavat kommentoi pois selventää asioita.
Kuitenkin, tuo se takaisin ja kamaa se osaksi <TD> nähdäksesi niiden vaikutuksen.
-->
<!--
<div id = "linkitem" Class = "tavaraerän">
<XSL:Jos testi = "merkkijonon pituus($SafeImageUrl) != 0>
<div class = & quoSafeImageUrl vasemmalle ">
<href = "{$SafeLinkUrl}" Target = "{$LinkTarget}">
<IMG class = "kuva-kiinteän leveys" src = "{$SafeImageUrl}" ALT = "{@ImageUrlAltText}"/>
</a>
</div>
</XSL:Jos>
<div class = "linkin kohde">
<XSL:Call-template Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" Target = "{$LinkTarget}" otsikko = "{@LinkToolTip}">
<XSL:arvo ja valitse = "$DisXSLyTitle" />
</a>
<div class = "kuvaus">
<XSL:arvo-ja select="@Description" />
</div>
</div>
</div>
-->
</TR>
<!--
Päästää sulkeminen taulukko tag. Jos meillä ei ole viimeinen rivi,
Tämä on tyhjä.
-->
<XSL:arvo Valitse="$tableEnd" Poista lähtö paeta="Kyllä"/>
</XSL:malli>
<XSL:malli Nimi="FormatCurrency">
<XSL:Param Nimi="arvo" Valitse="0" />
<XSL:arvo Valitse='numeron muotoileminen($arvo, "$DDD,DDD,DDD.DD", "henkilökunta")' />
</XSL:malli>
|