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" |
Þetta hefur verið ótrúlega gagnlegur. Þakka þér!
Aah… it was because I named my List Style differently and didn’t realise that in the ContentQueryMain.xsl it checks for the "style":
<XSL:when test="@Style=’NameOfMyStyle’">
Með því að gefa nýtt nafn það vann. 🙂
Það gekk nánast fyrir mig: Ég stjórna að framleiðsla á </borð> enda tag rétt, en byrja tag er vantar. It seems the test="$CurPos = 1" ekki aftur satt. En hvers vegna?
Great Post. Paul ég hef gert öll ofangreind atriði. Ég er með fyrirspurn, how can I achive the sum of "TOTAL ACTUAL Expences" eða summa af verðmæti tveimur dálkum.
Hefur þú gert einhverjar vinna við að búa til sérsniðna ContentQueryMain og ItemStyle XSL skrá? The ástæða ÉG spyrja er að ég vil ekki að hafa áhyggjur af sérsniðnum stíll minn að vera plága við hvaða blettir eða uppfærslu. Áttu dæmi? Ég hef reynt að gera sams konar afrit af ContentQueryMain.xsl og senda sem nýja sérsniðna afrit til Style Library. Þegar setja tilvísun í þessa XSL skrá í MainXslLink eign. Webpart er, Ég fæ 401 ekki heimilt. The siðvenja XSL skrá er birt útgáfa og allir hafa lesið aðgang að henni.
frábær takk staða! Hafa verið að berjast við þetta núna í síðustu daga.
Hæ, þetta var mjög hjálpsamur staða. Ég hef það allt að vinna, og einnig innleitt breytingar Mike Brown svo það hópar
niðurstöður inni borðinu með hvaða ég vel sem Flokks breytu í fasteigna CQWB er.
Ég gerði titilinn tengill einnig, svo það virkar vel. Ég hef enn eitt vandamál, þó. Ég er að flokka niðurstöður eftir nafni. Inni í töflunni, það hópar þá fallega, og það lítur vel, en það er samt prenta út alla hópinn
nöfn(í mínu tilfelli er síða nöfn) ofan töfluna. Hefur einhver veit hvernig á að losna við þetta?
Takk,
Greg
Nice grein. Ég náði að gefa mitt borð útliti sjálfgefið Sharepoint listar með því að greina kóðann á listanum. Hér eru helstu HTML blokkir þarf að passa í ItemStyle:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–HEADER–>
<TR class="ms-viewheadertr" VALIGN = Top>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;staða:miðað;vinstri:0;efst:0;">
<TABLE style="width:100%;" CtxNum="1" height="100%" cellspacing=1 cellpadding=0 class="ms-unselectedtitle">
<TR>
<TD width="100%" Class="ms-vb" nowrap>
Texte du títra ICI
</TD>
<TD style="position:alger;">
</TD>
</TR>
</TAFLA></div>
</TH>
<!–Endurtaka fyrir alla haus frumur–>
</TR>
<!– Borð gögn –>
<TR class="">
<!–Gögn dálki, nota kóða Páls í fyrsta einn með tengil –>
<TD Class="ms-vb2">Gögn sett hér</TD>
<!–Tómt dálki–>
<TD Class="ms-vb2">
<span dir = None></span><
/TD>
<!–Date dálki–>
<TD Class="ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Varamaður röð – Notaðu nýja XSL breytu sem mun setja inn annan flokk miðað við núverandi röð modulo 2–>
<TR class="ms-alternating">
…
</TR>
</TAFLA>
Thatz einmitt ég var að leita að .. Þú rokk maður .. Lifi .. elska þig fyrir the staða..
<XSL:apply-templates select="." mode="itemstyle">
<XSL:with-param name="CurPos" select="$CurPosition" />
<XSL:with-param name="Last" select="$LastRow" />
<XSL:with-param name="StartNewGroup" select="@__begingroup" />
</XSL:þegar>
<XSL:when test="$StartNewGroup = ‘True’">
<tr>
<td >
<XSL:call-template name="OuterTemplate.GetGroupName">
<XSL:with-param name="GroupName" select="@*[nafn()= $ Group]"/>
<XSL:with-param name="GroupType" select="$GroupType"/>
</XSL:kalla-sniðmát>
</td>
</tr>
</XSL:þegar>
<XSL:annars>
</XSL:annars>
</XSL:velja>
Hæ Paul,
Þegar unnið er með XML / XSL og efni fyrirspurn Web Part, hefur þú fundið einhverjar góðar leiðir til að forsníða XSLT þinn? Reynt að gera breytingar og prófa hönnun er að sanna rétt sársauka í a ** bara að nota texta ritil…
Allt það besta
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Ætti ég að nota mynd eða mynd í CommonViewFields sviði tegund? (e.g. InternalColumnName, Mynd)
Your post is exactly what I was looking for. Hins, I can’t get it to work.
I have documents that are stored in various doc. libraries but classified using a custom class column (choice: 1 eða 2. I want to use CQWP to show these documents based on thier class.
I was able to add the CQWP, export it to SPD, configure the itemStyle.xls to show custom fileds in list view. þó, I could not successfully implement what you describe here.
These are the columns I want to show in my CQWP:
File Type (to show icon)
File Title
Date Last Modified
Modified By Who
Checked Out To
Checked In Comments
I currently have the result in a list format. How do I change it to a talble format.
Takk.
Saji
Því miður fyrir missspelling á mínu nafni ekki viss þar sem ” kom frá.