Yfirlit og Markmið
Út af the kassi, Moss’ Efni Fyrirspurn Web Part (CQWP) birtir uppgjör sitt á lista sniði, similar to search results. It is also possible to display the results in a grid format (i.e. HTML töflu snið). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Viðskipti Atburðarás
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, svo sem titil, fjárhagsáætlun, ráð verklok, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, það lítur svona út:
Tæknilega nálgun er mikill the sami eins og lýst hér (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 svona býr að niðurstöðu:
|
<HTML>
<líkami>
<miðstöð>
<borð landamæri= 1>
<!-- Merki ->
<tr bgcolor= Blár>
<td><letur litur= Hvítt><B>Project Name</B></letur></td>
<td align= Rétt><letur litur= Hvítt><B>Ljúka Dagsetning</B></letur></td>
<td align= Rétt><letur litur= Hvítt><B>Budget</B></letur></td>
<td align= Rétt><letur litur= Hvítt><B>Raunveruleg kostnað</B></letur></td>
<td><letur litur= Hvítt><B>Alls Status</B></letur></td>
</tr>
<tr>
<td>Re-vír tölvu herbergi.</td>
<td align= Rétt>02/01/08</td>
<td align= Rétt>22,500.00</td>
<td align= Rétt>19,000.00</td>
<td>Í vinnslu</td>
</tr>
<tr>
<td>Framlag netþjóna fyrir SQL Uppfærsla</td>
<td align= Rétt>04/01/08</td>
<td align= Rétt>7,500.00</td>
<td align= Rétt>0.00</td>
<td>Planned</td>
</tr>
</borð>
</miðstöð>
</líkami>
</HTML>
|
Nálgun
Fylgdu þessum skrefum til að búa rist:
- Þekkja þá hluti af rist (raðir / dálka).
- Skilgreina og skapa nauðsynlegar dálka síða.
- Búa undir síður fyrir verkefni og Singleton lista.
- Bæta við CQWP á vefsíðu og stilla það til að leita að listum.
- Breyta XML í CQWP að safna upp frekari dálka.
- Breyta XSL til að búa til töflu.
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 hér (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) og bloggið Heather Salómons hér (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Hnetur og boltar
Byrja og framkvæma skref eitt til fimm eins og á MSDN skjöl og greinar Heather Salómons.
Á þessum tímapunkti, þú bættir CQWP til síðu og þú hafa þinn <CommonViewFields> stillt eftir þörfum.
Eftir venjulega skrefum, Ég fæ þessar millistig niðurstöður:
1. Búa gerð efnis, a templatized custom list for that content type and two sites. Here is the content type:
Hér er síða uppbygging:
2. Bæta við CQWP eftir að búa verkefni undirvefsvæðum mínar og Singleton verkefnisins samantekt listi:
3. Bæta allar frekari upplýsingar sem ég vil í gegnum <CommonViewFields>:
<eign nafn="CommonViewFields" tegund="band">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</eign>
Athugaðu að ég þurfti að halda öllum eignum reiti í einni línu eða það myndi ekki virka (CQWP myndi segja mér að fyrirspurn skilað engar vörur).
4. Á þessum tímapunkti, 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 til að búa til sérsniðna / unghosted version of ItemStyle.xsl. I follow Heather’s advice, upp í gegnum skref 11 og fá þessir millistig niðurstöður:
4.1: Nafn XSL sniðmát mitt eftirfarandi:
<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Ég líka örlítið breytt henni leiðbeinandi <XSL:fyrir-hvern …> með því að bæta <br /> merkja að veita hreinni skráningu:
<XSL:fyrir-hvern velja="@ *">
P:<XSL:gildi-af velja="nafn()" /><br/>
</XSL:fyrir-hvern>
4.2: Ég breyta vefur hluti, go to appearance and select my "Grid" stíl:
Sækja breytinguna og hér er útkoman:
Við sjáum af ofangreindu að reitir við viljum (Verkefnið nafn, kostnað, staða, o.fl.) 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. Til dæmis, we reference Project Status as "Project_x005F_x0020_Name".
Á þessum tímapunkti, við víkja úr blogginu lyngi og frá herðum þessara risa, Ég bæta við eigin svolítið minn.
ContentQueryMain.xsl
ATHUGIÐ: Þegar að gera breytingar á bæði ContentQueryMain.xsl auk ItemStyle.xsl, þú þarft að athuga þær skrár aftur í áður en þú sjá áhrif af breytingum þínum.
Fyrir rist-gerð tilgangi, 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 <borð> skipun á undan emitting fyrstu röðinni af gögnum og lokun <borð> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" sniðmát í ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Notkun tækni Heather Salómons, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Við þurfum að gera eftirfarandi breytingar:
- Breyta í XSL sniðmát, "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 <borð> merki.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" breytu þannig að LastRow má um að Grid sniðmát okkar.
Locate the template named "OuterTemplate.CallItemTemplate" auðkennd með streng:
<XSL:sniðmát nafn="OuterTemplate.CallItemTemplate">
Settu alla sniðmát sem fylgir:
|
<XSL:sniðmát nafn="OuterTemplate.CallItemTemplate">
<XSL:Gildi nafn="CurPosition" />
<!--
Add the "LastRow" breytu.
We only use it when the item style pass in is "Grid".
-->
<XSL:Gildi nafn="LastRow" />
<XSL:velja>
<XSL:þegar próf="@ Style = 'NewsRollUpItem'">
<XSL:gilda-sniðmát velja="." ham="itemstyle">
<XSL:með-Gildi nafn="EditMode" velja="$cbq_iseditmode" />
</XSL:gilda-sniðmát>
</XSL:þegar>
<XSL:þegar próf="@ Style = 'NewsBigItem'">
<XSL:gilda-sniðmát velja="." ham="itemstyle">
<XSL:með-Gildi nafn="CurPos" velja="$CurPosition" />
</XSL:gilda-sniðmát>
</XSL:þegar>
<XSL:þegar próf="@ Style = 'NewsCategoryItem'">
<XSL:gilda-sniðmát velja="." ham="itemstyle">
<XSL:með-Gildi nafn="CurPos" velja="$CurPosition" />
</XSL:gilda-sniðmát>
</XSL:þegar>
<!--
Pass núverandi stöðu og lastrow til itemstyle.xsl Grid sniðmát.
ItemStyle.xsl mun nota það til að senda frá sér opna og loka <borð> merki.
-->
<XSL:þegar próf="@ Style = 'Tafla'">
<XSL:gilda-sniðmát velja="." ham="itemstyle">
<XSL:með-Gildi nafn="CurPos" velja="$CurPosition" />
<XSL:með-Gildi nafn="Síðast" velja="$LastRow" />
</XSL:gilda-sniðmát>
</XSL:þegar>
<XSL:annars>
<XSL:gilda-sniðmát velja="." ham="itemstyle">
</XSL:gilda-sniðmát>
</XSL:annars>
</XSL:velja>
</XSL:sniðmát>
|
Athugasemdirnar lýsa tilgangi breytingar.
Auðvitað, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<XSL:sniðmát nafn="OuterTemplate.Body">
Fletta í gegnum leiðbeiningar á OuterTemplate.Body og settu LastRow breytu sem hér segir (sýndur sem athugasemd í skáletrun):
<XSL:kalla-sniðmát nafn="OuterTemplate.CallItemTemplate">
<XSL:með-Gildi nafn="CurPosition" velja="$CurPosition" />
<!-- Settu LastRow breytu. -->
<XSL:með-Gildi nafn="LastRow" velja="$LastRow"/>
</XSL:kalla-sniðmát>
Eftir allt þetta, við loksins hefur það sett upp á réttan hátt þannig að ItemStyle.xsl okkar getur gefið frá sér <borð> Tags á réttum stað.
ItemStyle.Xsl
ATHUGIÐ: Aftur, athuga í ItemStyle.xsl eftir að gera neinar breytingar þannig að þú sjá áhrif af þessum breytingum.
Við höfum tvö verkefni hér:
- 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. (Þú getur sagt að ég hafi örlitla séð á XSL).
Fyrsta, ofarlega ItemStyle.xsl, bæta við þessa línu:
<!-- Sumir muldra tröllvaxinn sem gerir okkur kleift að sýna bandarískt. mynt. -->
<XSL:aukastaf-sniði nafn="starfsfólk" stafa="D" />
<XSL:sniðmát nafn="Default" passa="*" ham="itemstyle">
Athugaðu að ég bætti það beint áður en <XSL:template name="Default" …> skýring.
Næsta, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, en ekki hika við að sendu mér tölvupóst eða leyfi athugasemdir á blogginu mínu ef þú hefur einhverjar spurningar.
|
<XSL:sniðmát nafn="Rist" passa="Róður[@ Style = 'Tafla']" ham="itemstyle">
<!--
ContentMain.xsl fer CurPos og síðasta.
Við notum þetta til skilyrðum losa opinn og loka <borð> merki.
-->
<XSL:Gildi nafn="CurPos" />
<XSL:Gildi nafn="Síðast" />
<!-- Eftirfarandi breytur eru óbreytt frá venjulegu ItemStyle.xsl -->
<XSL:breytu nafn="SafeImageUrl">
<XSL:kalla-sniðmát nafn="OuterTemplate.GetSafeStaticUrl">
<XSL:með-Gildi nafn="UrlColumnName" velja="'ImageUrl'"/>
</XSL:kalla-sniðmát>
</XSL:breytu>
<XSL:breytu nafn="SafeLinkUrl">
<XSL:kalla-sniðmát nafn="OuterTemplate.GetSafeLink">
<XSL:með-Gildi nafn="UrlColumnName" velja="'LinkUrl'"/>
</XSL:kalla-sniðmát>
</XSL:breytu>
<XSL:breytu nafn="DisplayTitle">
<XSL:kalla-sniðmát nafn="OuterTemplate.GetTitle">
<XSL:með-Gildi nafn="Titill" velja="@ Titill"/>
<XSL:með-Gildi nafn="UrlColumnName" velja="'LinkUrl'"/>
</XSL:kalla-sniðmát>
</XSL:breytu>
<XSL:breytu nafn="LinkTarget">
<XSL:ef próf="@ OpenInNewWindow = 'true'" >_blank</XSL:ef>
</XSL:breytu>
<!--
Hér við skilgreinum breytu, "tableStart". Þetta inniheldur HTML
. Athugið að ef CurPos = 1, það felur í sér HTML í cdata tag.
Annars, það mun vera tómur.
Verðmæti tableStart er emited hvert skipti ItemStyle er kallað í gegnum
.
-->
<XSL:breytu nafn="tableStart">
<XSL:ef próf="$CurPos = 1">
<![CDATA[
<Tafla border = 1>
<tr bgcolor="blue">
<td><font color="white"><B>Project Name</B></letur></td>
<td align="right"><font color="white"><B>Ljúka Dagsetning</B></letur></td>
<td align="right"><font color="white"><B>Budget</B></letur></td>
<td align="right"><font color="white"><B>Raunveruleg kostnað</B></letur></td>
<td><font color="white"><B>Alls Status</B></letur></td>
</tr>
]]>
</XSL:ef>
</XSL:breytu>
<!--
Annar breytu, tableEnd skilgreinir einfaldlega borðið lokun tag.
Eins og með tableStart, það er alltaf emited. Þetta er ástæða þess að gildi þess er
.
-->
<XSL:breytu nafn="tableEnd">
<XSL:ef próf="$CurPos = $ Síðast">
<![CDATA[ </borð> ]]>
</XSL:ef>
</XSL:breytu>
<!--
Alltaf losa innihald tableStart. Ef þetta er ekki í fyrsta
, þá vitum við gildi þess
.
Slökkva framleiðsla sleppi því þegar tableStart ekki autt, það
. Ef
, it will generate
stuff like "<borð>" instead of "<borð>".
-->
<XSL:gildi-af velja="$tableStart" disable-framleiðsla sleppi="Já"/>
<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:gildi-af velja="@ Project_x005F_x0020_Name"/>
</td>
<td align="rétt">
<XSL:gildi-af velja="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td align="rétt">
<XSL:kalla-sniðmát nafn="formatcurrency">
<XSL:með-Gildi nafn="gildi" velja="@ Project_x005F_x0020_Budget"></XSL:með-Gildi>
</XSL:kalla-sniðmát>
</td>
<td align="rétt">
<XSL:kalla-sniðmát nafn="formatcurrency">
<XSL:með-Gildi nafn="gildi" velja="@ Project_x005F_x0020_Expenses"> </XSL:með-Gildi>
</XSL:kalla-sniðmát>
</td>
<td>
<XSL:gildi-af velja="@ Project_x005F_x0020_Status"/>
</td>
<!--
Allar eftirfarandi er athugasemd út til að skýra hlutina.
Hins, koma með það aftur og efni það inn í a <td> að sjá sína
.
-->
<!--
<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}"/>
</a>
</div>
</XSL:ef>
<div class="link-item">
<XSL:kalla-sniðmát name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@ LinkToolTip}">
<XSL:value-of select="$DisplayTitle"/>
</a>
<div class="description">
<XSL:value-of select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Losa borðið lokun tag. Ef við erum ekki á síðustu röðinni,
þetta mun vera autt.
-->
<XSL:gildi-af velja="$tableEnd" disable-framleiðsla sleppi="Já"/>
</XSL:sniðmát>
<XSL:sniðmát nafn="formatcurrency">
<XSL:Gildi nafn="gildi" velja="0" />
<XSL:gildi-af velja="snið-númer($gildi, "$DDD,DDD,DDD.DD", "staff")" />
</XSL:sniðmát>
|