Baxış və obyektiv
Qutusu həyata, MOSS’ Məqalələr Query Web Part (CQWP) siyahısı formatda nəticələri göstərir, similar to search results. It is also possible to display the results in a grid format (i.e. HTML masa formatında). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Biznes Ssenari
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, belə adı kimi, büdcə, gözlənilən Tamamlanma tarixi, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, bu kimi görünür:
Təsvir kimi texniki yanaşma çox eyni burada (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:
Bu kimi HTML nəticəsində yaradır:
<html> <orqan> <mərkəz> <masa sərhəd= 1> <!-- Etiketler -> <tr bgcolor= Blue> <TD><şrift rəng= Ağ><b>Layihənin adı</b></şrift></TD> <TD align= Sağ><şrift rəng= Ağ><b>Tarix doldurun</b></şrift></TD> <TD align= Sağ><şrift rəng= Ağ><b>Büdcə</b></şrift></TD> <TD align= Sağ><şrift rəng= Ağ><b>Aktual Xərcləri</b></şrift></TD> <TD><şrift rəng= Ağ><b>Ümumi Status</b></şrift></TD> </tr> <tr> <TD>Re-tel kompüter otağı.</TD> <TD align= Sağ>02/01/08</TD> <TD align= Sağ>22,500.00</TD> <TD align= Sağ>19,000.00</TD> <TD>Davam</TD> </tr> <tr> <TD>SQL Upgrade üçün ehtiyat server</TD> <TD align= Sağ>04/01/08</TD> <TD align= Sağ>7,500.00</TD> <TD align= Sağ>0.00</TD> <TD>Planlı</TD> </tr> </masa> </mərkəz> </orqan> </html> |
Yanaşma
Bu grid yaratmaq üçün bu adımları edin:
- Grid komponentləri müəyyən (satır / sütun).
- Zəruri site sütun müəyyən və yaratmaq.
- Layihələr və Singleton siyahıları sub sites yaratmaq.
- Bir web page CQWP əlavə və siyahıları üçün axtarış üçün konfiqurasiya.
- Əlavə sütun qədər toplanması üçün CQWP XML Düzelt.
- Bir masa yaratmaq üçün XSL dəyişdirin.
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 burada (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) və Heather Süleymanın blog burada (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Qoz-fındıq və boltlar
Addımlar MSDN sənədlərin və Heather Süleymanın maddə uyğun olaraq beş vasitəsilə bir başlayın və həyata keçirilməsi.
Bu noktada, sahifada üçün CQWP əlavə etdik və sizin <CommonViewFields> zəruri olaraq yapılandırılmış.
Adi adımları, Mən bu aralıq nəticələr almaq:
1. Içerik növü yaratmaq, a templatized custom list for that content type and two sites. Here is the content type:
Burada site strukturu:
2. Mənim layihə subsites və Singleton layihə icmalı siyahıları yaratmaq sonra CQWP əlavə et:
3. Vasitəsilə istəyirəm bütün əlavə məlumat əlavə et <CommonViewFields>:
<əmlak ad="CommonViewFields" növü="sim">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</əmlak>
Mən bir line bütün əmlak sahələrində saxlamaq idi Qeyd edək ki, ya bu iş olmaz (CQWP sorğu yoxdur maddələr geri ki, mənə demək istəyirəm).
4. Bu noktada, 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 özelleştirilmiş bir yaratmaq üçün / unghosted version of ItemStyle.xsl. I follow Heather’s advice, addım vasitəsilə 11 bu aralıq nəticələr almaq:
4.1: Mənim XSL şablon kimi aşağıdakı adlandırın:
<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Mən də bir az onun təklif dəyişdirmək <XSL:-hər biri üçün …> bir əlavə <br /> təmiz siyahı təmin etmək üçün etiket yapışdırmaq:
<XSL:-hər biri üçün seçmək="@ *"> P:<XSL:dəyər və seçmək="ad()" /><br/> </XSL:-hər biri üçün>
4.2: Mən web hissəsi dəyişdirmək, go to appearance and select my "Grid" üslub:
Dəyişiklik müraciət və burada nəticəsidir:
Biz sahələrində biz istəyirik ki, yuxarıda göründüyü (Layihənin adı, xərc, vəziyyət, və s.) 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. Məsələn, we reference Project Status as "Project_x005F_x0020_Name".
Bu noktada, biz Heather blog və bu nəhənglərin çiyinlərində yola, Mən öz kiçik qədər əlavə.
ContentQueryMain.xsl
QEYD: Həm ContentQueryMain.xsl dəyişikliklər edilməsi, habelə ItemStyle.xsl zaman, Siz dəyişikliklərin təsiri görmək əvvəl geri bu faylları yoxlamaq lazımdır.
Grid vermə məqsədləri üçün, 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 <masa> məlumatların ilk sıraya emitting əvvəl tag və yekun <masa> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" ItemStyle.xsl ilə şablon, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Heather Süleymanın texnika istifadə, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Biz aşağıdakı dəyişiklik etmək lazımdır:
- Bir XSL şablon dəyişdirmək, "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 <masa> tags.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" LastRow bizim Grid şablon üçün qəbul edilə bilər parametri ki,.
Locate the template named "OuterTemplate.CallItemTemplate" simli tərəfindən müəyyən:
<XSL:şablon ad="OuterTemplate.CallItemTemplate">
Aşağıdakı kimi bütün şablon dəyişdirin:
<XSL:şablon ad="OuterTemplate.CallItemTemplate"> <XSL:Param ad="CurPosition" /> <!-- Add the "LastRow" parametr. We only use it when the item style pass in is "Grid". --> <XSL:Param ad="LastRow" /> <XSL:seçmək> <XSL:zaman sınaq="@ Style = 'NewsRollUpItem'"> <XSL:-şablonları tətbiq seçmək="." üsul="itemstyle"> <XSL:ilə-Param ad="EditMode" seçmək="$cbq_iseditmode" /> </XSL:-şablonları tətbiq> </XSL:zaman> <XSL:zaman sınaq="@ Style = 'NewsBigItem'"> <XSL:-şablonları tətbiq seçmək="." üsul="itemstyle"> <XSL:ilə-Param ad="CurPos" seçmək="$CurPosition" /> </XSL:-şablonları tətbiq> </XSL:zaman> <XSL:zaman sınaq="@ Style = 'NewsCategoryItem'"> <XSL:-şablonları tətbiq seçmək="." üsul="itemstyle"> <XSL:ilə-Param ad="CurPos" seçmək="$CurPosition" /> </XSL:-şablonları tətbiq> </XSL:zaman> <!-- Bu grid itemstyle.xsl şablon cari vəziyyəti və lastrow Pass. ItemStyle.xsl açıq və bağlanış ayırmaq üçün istifadə edəcək <masa> tags. --> <XSL:zaman sınaq="@ Style = 'Grid'"> <XSL:-şablonları tətbiq seçmək="." üsul="itemstyle"> <XSL:ilə-Param ad="CurPos" seçmək="$CurPosition" /> <XSL:ilə-Param ad="Sonuncu" seçmək="$LastRow" /> </XSL:-şablonları tətbiq> </XSL:zaman> <XSL:başqa cür> <XSL:-şablonları tətbiq seçmək="." üsul="itemstyle"> </XSL:-şablonları tətbiq> </XSL:başqa cür> </XSL:seçmək> </XSL:şablon> |
Şərh dəyişikliklərin məqsədi təsvir.
Əlbəttə, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<XSL:şablon ad="OuterTemplate.Body">
OuterTemplate.Body təlimatlara vasitəsilə gedin və LastRow parametri aşağıdakı kimi daxil edin (italik Şərh kimi göstərilir):
<XSL:Zəng şablon ad="OuterTemplate.CallItemTemplate"> <XSL:ilə-Param ad="CurPosition" seçmək="$CurPosition" /> <!-- Ki, LastRow parametr daxil edin. --> <XSL:ilə-Param ad="LastRow" seçmək="$LastRow"/> </XSL:Zəng şablon>
Bu bütün sonra, nəhayət, biz hər şeyi düzgün bizim ItemStyle.xsl buraxmaq olar ki, qurmaq <masa> sağ yer tags.
ItemStyle.Xsl
QEYD: Yenidən, bu dəyişikliklərin təsiri oldu ki, hər hansı dəyişikliklərdən sonra ItemStyle.xsl kontrol.
Biz burada iki vəzifələ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. (Mən XSL bir seyrək sapı var ki, deyə bilərsiniz).
Ilk, ItemStyle.xsl üstündeki, Bu xətt əlavə:
<!-- Bizə U.S keçirmək üçün imkan verir ki, bəzi mumbo jumbo. valyuta. --> <XSL:Mexanizmi Boylam decimal format ad="heyət" rəqəmli="D" /> <XSL:şablon ad="Default" matç="*" üsul="itemstyle">
Mən əvvəl birbaşa əlavə edək ki, <XSL:template name="Default" …> tərif.
Sonrakı, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, ancaq mənə e-poçt çekinmeyin və ya sualınız varsa, mənim blog comments tərk etmir.
<XSL:şablon ad="Tor" matç="Sıra[@ Style = 'Grid']" üsul="itemstyle"> <!-- ContentMain.xsl CurPos və son keçir. Biz şərti açıq və bağlanış buraxmaq üçün bu istifadə edin <masa> tags. --> <XSL:Param ad="CurPos" /> <XSL:Param ad="Sonuncu" /> <!-- Aşağıdakı dəyişənlər standart ItemStyle.xsl dən değiştirilmemiş olunur --> <XSL:dəyişən ad="SafeImageUrl"> <XSL:Zəng şablon ad="OuterTemplate.GetSafeStaticUrl"> <XSL:ilə-Param ad="UrlColumnName" seçmək="'ImageUrl'"/> </XSL:Zəng şablon> </XSL:dəyişən> <XSL:dəyişən ad="SafeLinkUrl"> <XSL:Zəng şablon ad="OuterTemplate.GetSafeLink"> <XSL:ilə-Param ad="UrlColumnName" seçmək="'LinkUrl'"/> </XSL:Zəng şablon> </XSL:dəyişən> <XSL:dəyişən ad="DisplayTitle"> <XSL:Zəng şablon ad="OuterTemplate.GetTitle"> <XSL:ilə-Param ad="Title" seçmək="@ Title"/> <XSL:ilə-Param ad="UrlColumnName" seçmək="'LinkUrl'"/> </XSL:Zəng şablon> </XSL:dəyişən> <XSL:dəyişən ad="LinkTarget"> <XSL:əgər sınaq="@ OpenInNewWindow = 'true'" >_blank</XSL:əgər> </XSL:dəyişən> <!-- Burada biz bir dəyişən müəyyən, "tableStart". Bu HTML ehtiva . Qeyd edək ki, əgər CurPos = 1, bir CDATA tag olan HTML daxildir. Başqa cür, boş olacaq. TableStart dəyəri hər zaman ItemStyle vasitəsilə adlanır hazırlayıb çap edir . --> <XSL:dəyişən ad="tableStart"> <XSL:əgər sınaq="$CurPos = 1"> <![CDATA[ <Cədvəl sərhəd = 1> <tr bgcolor="blue"> <TD><font color="white"><b>Layihənin adı</b></şrift></TD> <td align="right"><font color="white"><b>Tarix doldurun</b></şrift></TD> <td align="right"><font color="white"><b>Büdcə</b></şrift></TD> <td align="right"><font color="white"><b>Aktual Xərcləri</b></şrift></TD> <TD><font color="white"><b>Ümumi Status</b></şrift></TD> </tr> ]]> </XSL:əgər> </XSL:dəyişən> <!-- Digər dəyişən, tableEnd sadəcə yekun cədvəli tag müəyyən. TableStart ilə, həmişə hazırlayıb çap edir. Onun dəyəri Buna görə . --> <XSL:dəyişən ad="tableEnd"> <XSL:əgər sınaq="$CurPos Son $ ="> <![CDATA[ </masa> ]]> </XSL:əgər> </XSL:dəyişən> <!-- Həmişə tableStart məzmunu buraxmaq. Bu ilk deyil , sonra biz onun qədrini bilmək . Qaçan çıxış Disable çünki zaman tableStart onu boş deyil, o . Əgər , it will generate stuff like "<masa>" instead of "<masa>". --> <XSL:dəyər və seçmək="$tableStart" aradan çıxdı-qaçan="bəli"/> <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:dəyər və seçmək="@ Project_x005F_x0020_Name"/> </TD> <TD align="sağ"> <XSL:dəyər və seçmək="@ Project_x005F_x0020_End_x005F_x0020_Date"/> </TD> <TD align="sağ"> <XSL:Zəng şablon ad="formatcurrency"> <XSL:ilə-Param ad="dəyər" |
Bu inanılmaz faydalı olmuşdur. Sağ olun!
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’">
Ki işləmişdir adlandırılmışdır ilə. 🙂
Demək olar ki, mənim üçün işləyib: Mən çıxış idarə </masa> düzgün tag son, lakin başlanğıc etiketi eksik. It seems the test="$CurPos = 1" return true deyil. Amma niyə?
Böyük Post. Paul i bütün yuxarıda şeyi etdik. Mən bir sorğu var, how can I achive the sum of "TOTAL ACTUAL Expences" iki sütun dəyəri və ya məbləği.
Xüsusi ContentQueryMain və ItemStyle XSL faylları yaratmaq hər hansı bir iş görmüşük? Mən xahiş səbəbi mənim xüsusi üslub bir yamalar və ya yükseltmeleri ilə üzerine yazılacaq olan narahat istəmirəm ki,. Siz misal var? Mən Style Kitabxana üçün ContentQueryMain.xsl və yüklemek yeni xüsusi surəti eyni surəti edilməsi denedim. Edir. Webpart nin MainXslLink əmlak bu XSL fayl istinad edərkən, Mən almaq 401 səlahiyyətli deyil. Xüsusi XSL fayl çap versiyası və hər kəs bu çıxışı oxudu.
fantastik post thanks! Son bir neçə gün artıq bu ilə mübarizə edilmişdir.
Hi, Bu mesaj həqiqətən faydalı oldu. Mən bütün iş var, və həmçinin Mike Brown dəyişiklik həyata bu qruplar belə
Mən CQWB nin xassələri parametri tərəfindən Qrupa kimi seçmək hər hansı masa daxilində nəticələri.
Mən bir link də adı etdi, belə ki, gözəl işləyir. Mən hələ bir problem var, baxmayaraq ki. Site adı ilə nəticələri qruplaşdırılması alıram. Masa Inside, qəşəng bu qruplar onlara, və böyük görünür, lakin bütün qrup çap olub
adları(Mənim halda site adları) Tablonun üstündeki. Hər kəs bu qurtarmaq üçün necə bilir?
Təşəkkür,
Greg
Nice maddə. Mən siyahısı kodunu analiz mənim masa default SharePoint siyahıları görünüşünü vermək idarə. Burada ItemStyle uyğun lazım olan əsas HTML blokları var:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–HEADER–>
<TR class="ms-viewheadertr" = TOP Valign>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;mövqe:nisbi;sol:0;yuxarı:0;">
<TABLE style="width:100%;" CtxNum="1" height="100%" cellspacing=1 cellpadding=0 class="ms-unselectedtitle">
<TR>
<TD width="100%" Class="ms-vb" Kaydırma yok>
Ünvanı du texte ici
</TD>
<TD style="position:mütləq;">
</TD>
</TR>
</CƏDVƏL></div>
</TH>
<!–Bütün header hüceyrələri üçün təkrarlayın–>
</TR>
<!– Cədvəl data –>
<TR class="">
<!–Data sütun, Buraya ilə birinci üçün Paul istifadə kodu –>
<TD Class="ms-vb2">Burada Data</TD>
<!–Boş sütun–>
<TD Class="ms-vb2">
<span dir = Yox></aşırım><
/TD>
<!–Tarix sütun–>
<TD Class="ms-vb2">
<Nobr>11/12/2008</Nobr>
</TD>
</TR>
<!–***Alternativ sıra – Cari sıra modulo 2 əsaslanan alternativ sinif daxil olan yeni XSL dəyişən istifadə–>
<TR class="ms-alternating">
…
</TR>
</CƏDVƏL>
Thatz dəqiq Mən sizə man .. uzun yaşamaq .. vəzifəsinə siz sevgi rok .. axtarırdı..
<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:zaman>
<XSL:when test="$StartNewGroup = ‘True’">
<tr>
<TD >
<XSL:call-template name="OuterTemplate.GetGroupName">
<XSL:with-param name="GroupName" select="@*[ad()= $ Group]"/>
<XSL:with-param name="GroupType" select="$GroupType"/>
</XSL:Zəng şablon>
</TD>
</tr>
</XSL:zaman>
<XSL:başqa cür>
</XSL:başqa cür>
</XSL:seçmək>
Salam Paul,
XML / XSL və məzmun sorğu Web Part çalışırken, Siz XSLT format hər hansı bir yaxşı yolları tapılmışdır? Dəyişikliklər etmək və dizayn test üçün çalışırıq yalnız bir mətn redaktoru istifadə edərək bir ** bir doğru ağrı sübut edir…
Bütün yaxşı
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Mən CommonViewFields Alan Tipi Image və ya şəkil istifadə etməlidir? (e.g. InternalColumnName, Təsvir)
Your post is exactly what I was looking for. Lakin, 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 və ya 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. lakin, 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.
Təşəkkür.
Saji
Harada əmin deyil, mənim adını missspelling üçün Sorry ” gəldi.