Přehled a cíle
Out of the box, MECH’ Webová část obsah dotazu (CQWP) jeho výsledky se zobrazí ve formátu seznamu, podobné výsledky hledání. Je také možné zobrazit výsledky ve formátu mřížky (tj. Formát tabulky HTML). Formáty tabulky jsou lepší, v některých případech. Popisují, jak dosáhnout tohoto efektu v tomto článku.
Obchodní scénář
Pracoval jsem s klientem na rollout MOSS rozlehlých. Navrhli jsme jejich taxonomie, tak, že projekty jsou první třídy občanů v hierarchii a mají své vlastní stránky nejvyšší úrovně. Vedoucí projektu udržovat seznam ojedinělého projektu souhrnné informace, například titul, rozpočet, předpokládaný termín dokončení, Zbývající rozpočet a další pole typ souhrnu. Podle "singleton" Mám na mysli vlastní seznam služby SharePoint zaručeno, že obsahují pouze jednu položku. Zjednodušujícím způsobem, Vypadá to jako to:
Technický přístup je stejný jak je uvedeno Tady (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP používá transformaci XSL generuje HTML v prohlížeči vykreslit.
Vždy jsem si představit výsledek před ponořením se do XSL, protože XSL je noční můra. Tady je můj požadovaného výsledku:
Generuje HTML jako výsledku:
<HTML> <tělo> <centrum> <Tabulka hranice= 1> <!-- Popisky –> <TR Barva pozadí= modrá> <TD><písmo Barva= bílá><b>Název projektu</b></písmo></TD> <TD zarovnání= doprava><písmo Barva= bílá><b>Datum dokončení</b></písmo></TD> <TD zarovnání= doprava><písmo Barva= bílá><b>Rozpočet</b></písmo></TD> <TD zarovnání= doprava><písmo Barva= bílá><b>Skutečné výdaje</b></písmo></TD> <TD><písmo Barva= bílá><b>Celkový stav</b></písmo></TD> </TR> <TR> <TD>Re-drát počítačové místnosti.</TD> <TD zarovnání= doprava>02/01/08</TD> <TD zarovnání= doprava>22,500.00</TD> <TD zarovnání= doprava>19,000.00</TD> <TD>V průběhu</TD> </TR> <TR> <TD>Poskytování serverů pro SQL Upgrade</TD> <TD zarovnání= doprava>04/01/08</TD> <TD zarovnání= doprava>7,500.00</TD> <TD zarovnání= doprava>0.00</TD> <TD>Plánováno</TD> </TR> </Tabulka> </centrum> </tělo> </HTML> |
Přístup
Postupujte podle těchto kroků k vytvoření mřížky:
- Určit součásti mřížky (řádky nebo sloupce).
- Definovat a vytvořit nezbytné místo sloupce.
- Vytvořit dílčí weby pro projekty a ojedinělým seznamů.
- Přidejte CQWP do webové stránky a nakonfigurujete ho k prohledávání pro seznamy.
- Upravit XML CQWP sbírat další sloupce.
- Úprava XSL aby vytvářela.
Budu se soustředit na číslo šest. Čísla jedna až čtyři jsou přímočará a něco, co už udělal každý uživatel CQWP. Číslo pět je Well-documented jiní včetně tento vyčerpávající screen-shot naloženého článek z webu MSDN Tady (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) a Heather Solomon's blog Tady (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Šrouby a matice
Zahájit a provádět kroky jedna až pět dle MSDN dokumentaci a Heather Solomon článek.
V tomto okamžiku, vaše CQWP jste přidali na stránku a máte své <CommonViewFields> v případě potřeby nakonfigurovat.
Po obvyklé kroky, Tyto průběžné výsledky:
1. Vytvořit typ obsahu, šablonou vlastního seznamu pro tento typ obsahu a dva weby. Zde je typ obsahu:
Tady je struktura webu:
2. Přidat CQWP po vytvoření mého projektu podřízené weby a ojedinělého projektu Souhrnné seznamy:
3. Přidat všechny další informace, chci prostřednictvím <CommonViewFields>:
<Vlastnost Jméno="CommonViewFields" Typ="řetězec">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</Vlastnost>
Všimněte si, že jsem musel držet všechna pole vlastností na jednom řádku, nebo to nebude fungovat (CQWP by mi, že dotaz nevrátil žádné položky).
4. V tomto okamžiku, jsme připraveni posunout se dále v článku MSDN a převrátit Heather Solomon článku. Její postup začíná u kroku #5 Chcete-li vytvořit vlastní / unghosted verze ItemStyle.xsl. Sleduji Heather poradenství, až po krocích 11 a získat tyto výsledky zprostředkujících:
4.1: Jméno mé šablony XSL následovně:
<XSL:Název šablony = "Grid" zápas = "řádek[@Style = 'Grid']" Mode = "itemstyle">
Jsem jí navrhl také mírně upravit <XSL:pro každý …> přidáním <BR /> značky, které poskytují čistší výpis:
<XSL:pro každý vybrat="@*"> P:<XSL:hodnota z vybrat="Jméno()" /><BR/> </XSL:pro každý>
4.2: Upravit webovou část, Přejděte na vzhledu a vyberte mřížku"" styl:
Změnu a zde je výsledek:
Můžeme vidět z výše uvedeného, že pole chceme (Název projektu, výdaj, stav, atd) jsou k dispozici pro nás při jsme generuje HTML. Nejen, že, Ale vidíme, že jména, kterými jsme musí odkazovat na sloupce v XSL. Například, jsme odkaz stav projektu jako "Project_x005F_x0020_Name".
V tomto okamžiku, jsme odchylují od Heather blog a ramena těchto obrů, Přidat vlastní kulička.
ContentQueryMain.xsl
POZNÁMKA:: Při provádění změn jak ContentQueryMain.xsl tak i ItemStyle.xsl, je třeba zkontrolovat, že tyto soubory zpět dříve, než uvidíte vaše změny.
Pro účely mřížky výroba, MOSS používá dva různé soubory XSL produkovat výsledky, které vidíme z CQWP. Chcete-li generovat předchozí bit výstup, Upravili jsme ItemStyle.xsl. MOSS skutečně používá jiný soubor XSL, ContentQueryMain.xsl se ve spojení s ItemStyle.xsl generování jeho HTML. Jak jeho název napovídá, ContentQueryMain.xsl je hlavní"" Šablona stylů XSL, která řídí celkový tok překladu. Iteruje přes všechny nalezené položky a předává je jeden po druhém do šablony v ItemStyle.xsl. Upravíme ItemStyle.xsl generovat open <Tabulka> značka před vysílání první řádek dat a uzavření <Tabulka> značka po výstupu v posledním řádku. K dosažení tohoto, ContentQueryMain.xsl je upraven tak, aby dva parametry předat naši "mřížky" Šablona v ItemStyle.xsl, "poslední řádek" a "aktuální řádek". ItemStyle.xsl využívá je k podmíněně vydávat potřebné.
Heather Solomon technikou, Musíme najít ContentQueryMain.xsl. Nachází se na stejném místě jako ItemStyle.xsl. Tento snímek obrazovky by měla pomoci:
Musíme provést následující změny:
- Upravit šablonu ve formátu xsl, "CallItemTemplate" ve skutečnosti to vyvolá naši mřížky šablony v ItemStyle.xsl. Mineme dva parametry šablony tabulky tak, že bude mít data, je třeba podmínečně generovat otevírání a zavírání <Tabulka> značky.
- Upravit další kousek z ContentQueryMain.xsl, která volá "CallItemTemplate" předat FIRSTROW"" parametr tak že FIRSTROW může být přeneseno na naši mřížky šablony.
Vyhledejte šablonu s názvem "OuterTemplate.CallItemTemplate" identifikované řetězce:
<XSL:Šablona Jméno="OuterTemplate.CallItemTemplate">
Nahradit celou šablonu následovně:
<XSL:Šablona Jméno="OuterTemplate.CallItemTemplate"> <XSL:parametr Jméno="CurPosition" /> <!-- Přidejte FIRSTROW"" parametr. Ji používáme pouze při průchodu styl položky v "Mřížka". --> <XSL:parametr Jméno="FIRSTROW" /> <XSL:zvolit> <XSL:Kdy Testovat="@Style = 'NewsRollUpItem'"> <XSL:použít šablony vybrat="." mód="ItemStyle"> <XSL:s parametr Jméno="EditMode" vybrat="$cbq_iseditmode" /> </XSL:použít šablony> </XSL:Kdy> <XSL:Kdy Testovat="@Style = 'NewsBigItem'"> <XSL:použít šablony vybrat="." mód="ItemStyle"> <XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" /> </XSL:použít šablony> </XSL:Kdy> <XSL:Kdy Testovat="@Style = 'NewsCategoryItem'"> <XSL:použít šablony vybrat="." mód="ItemStyle"> <XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" /> </XSL:použít šablony> </XSL:Kdy> <!-- Aktuální pozici a lastrow předat itemstyle.xsl šablony tabulky. ItemStyle.xsl, použije k emitování otevřít a zavřít <Tabulka> značky. --> <XSL:Kdy Testovat="@Style = 'Grid'"> <XSL:použít šablony vybrat="." mód="ItemStyle"> <XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" /> <XSL:s parametr Jméno="Poslední" vybrat="$FIRSTROW" /> </XSL:použít šablony> </XSL:Kdy> <XSL:jinak> <XSL:použít šablony vybrat="." mód="ItemStyle"> </XSL:použít šablony> </XSL:jinak> </XSL:zvolit> </XSL:Šablona> |
Komentáře popisují účel, změn.
Samozřejmě, "OuterTemplate.CallItemTemplate" se sám nazývá z jiné šablony. Vyhledejte tuto šablonu hledání pro tento textový řetězec:
<XSL:Šablona Jméno="OuterTemplate.Body">
Procházejte instrukce v OuterTemplate.Body a vložení parametru LastRow následovně (jako komentář v kurzívě):
<XSL:volání šablona Jméno="OuterTemplate.CallItemTemplate"> <XSL:s parametr Jméno="CurPosition" vybrat="$CurPosition" /> <!-- Vložení parametru LastRow. --> <XSL:s parametr Jméno="FIRSTROW" vybrat="$FIRSTROW"/> </XSL:volání šablona>
Po tom všem, to, Konečně máme věci správně nastaveno tak, aby naše ItemStyle.xsl může <Tabulka> značky na správném místě.
ItemStyle.Xsl
POZNÁMKA:: Znovu, po provedení změn tak, že vidíte vliv těchto změn se změnami ItemStyle.xsl.
Tady máme dva úkoly:
- Nahradit celý mřížky šablony. Můžete kopírovat/vložit zespodu.
- Přidat nějaké mumlání mimo definici šablony, která umožňuje "formatcurrency" Šablona pro práci. (Můžete říct, že mám slabý úchyt na XSL).
První, v horní části ItemStyle.xsl, Přidejte tento řádek:
<!-- Někteří hatmatilky, který jí umožní zobrazit USA. Měna. --> <XSL:desetinný formát Jméno="zaměstnanci" číslice="D" /> <XSL:Šablona Jméno="Výchozí" shoda="*" mód="ItemStyle">
Poznámka, že jsem přidal to přímo před <XSL:Název šablony = "výchozí" …> definice.
Další, Vraťte se do naší tabulky Šablona. Celý mřížky šablony nahraďte následující kód. Důkladně je Komentováno, Neváhejte a napište mi, nebo zanechat komentář na mém blogu, pokud máte otázky, ale.
<XSL:Šablona Jméno="Mřížka" shoda="Řádek[@Style = 'Grid']" mód="ItemStyle"> <!-- ContentMain.xsl prochází CurPos a poslední. Jsme využívali podmíněně vypouštět otevřít a zavřít <Tabulka> značky. --> <XSL:parametr Jméno="CurPos" /> <XSL:parametr Jméno="Poslední" /> <!-- Následující proměnné nezměněné od standardních ItemStyle.xsl --> <XSL:Proměnná Jméno="SafeImageUrl"> <XSL:volání šablona Jméno="OuterTemplate.GetSafeStaticUrl"> <XSL:s parametr Jméno="UrlColumnName" vybrat=""ImageUrl""/> </XSL:volání šablona> </XSL:Proměnná> <XSL:Proměnná Jméno="SafeLinkUrl"> <XSL:volání šablona Jméno="OuterTemplate.GetSafeLink"> <XSL:s parametr Jméno="UrlColumnName" vybrat=""LinkUrl""/> </XSL:volání šablona> </XSL:Proměnná> <XSL:Proměnná Jméno="DisplayTitle"> <XSL:volání šablona Jméno="OuterTemplate.GetTitle"> <XSL:s parametr Jméno="Titul" vybrat="@Title"/> <XSL:s parametr Jméno="UrlColumnName" vybrat=""LinkUrl""/> </XSL:volání šablona> </XSL:Proměnná> <XSL:Proměnná Jméno="LinkTarget"> <XSL:Pokud Testovat="@OpenInNewWindow = 'True'" >_blank</XSL:Pokud> </XSL:Proměnná> <!-- Tady jsme definovat proměnnou, "tableStart". Tento článek obsahuje kód HTML, který používáme k definování otevření tabulky, stejně jako popisky sloupců. Všimněte si, že pokud CurPos = 1, To zahrnuje HTML v tagu CDATA. Jinak, to bude prázdná. Hodnota tableStart je vyzáří, pokaždé, když ItemStyle se nazývá přes ContentQueryMain.xsl. --> <XSL:Proměnná Jméno="tableStart"> <XSL:Pokud Testovat="$CurPos = 1"> <![CDATA[ <ohraničení tabulky = 1> <TR bgcolor = "blue"> <TD><Barva písma = "bílý"><b>Název projektu</b></písmo></TD> <TD align = "vpravo"><Barva písma = "bílý"><b>Datum dokončení</b></písmo></TD> <TD align = "vpravo"><Barva písma = "bílý"><b>Rozpočet</b></písmo></TD> <TD align = "vpravo"><Barva písma = "bílý"><b>Skutečné výdaje</b></písmo></TD> <TD><Barva písma = "bílý"><b>Celkový stav</b></písmo></TD> </TR> ]]> </XSL:Pokud> </XSL:Proměnná> <!-- Jiné proměnné, tableEnd jednoduše definuje uzavírací tag tabulky. Stejne jako tableStart, je to vždycky vyzáří. Právě proto, že jeho hodnota je přiřazena podmíněně založený na zda jsme už byl přijat na poslední řádek ContentQueryMain.xsl. --> <XSL:Proměnná Jméno="tableEnd"> <XSL:Pokud Testovat="$CurPos = $Last"> <![CDATA[ </Tabulka> ]]> </XSL:Pokud> </XSL:Proměnná> <!-- Vždy posílat obsah tableStart. Pokud to není první řádek předány nám ContentQueryMain.xsl, pak víme, že její hodnota bude prázdná. Zakázat výstup úniku, protože když tableStart to není prázdné, To zahrnuje skutečné HTML, který chceme být vykreslen v prohlížeči. Pokud neříkáme analyzátor XSL zakázat výstup úniku, to bude vytvářet věci jako"<Tabulka>" místo toho"<Tabulka>". --> <XSL:hodnota z vybrat="$tableStart" zakázat výstup útěk="Ano"/> <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:hodnota z vybrat="@Project_x005F_x0020_Name"/> </TD> <TD zarovnání="doprava"> <XSL:hodnota z vybrat="@Project_x005F_x0020_End_x005F_x0020_Date"/> </TD> <TD zarovnání="doprava"> <XSL:volání šablona Jméno="FormatCurrency"> <XSL:s parametr Jméno="hodnota" |
To bylo neuvěřitelně užitečné. Děkuju!
Aah… to bylo proto, že můj styl seznamu přejmenovány a neuvědomil, že v ContentQueryMain.xsl jej kontroluje "styl":
<XSL:Když test="@Style='NameOfMyStyle'">
S tím přejmenoval to fungovalo. 🙂
Téměř pracoval pro mě: Dokážu se výstup </Tabulka> správně koncovou značku, ale chybí počáteční značka. Zdá se, test = "$CurPos = 1" nevrací skutečné. Ale proč?
Velké Post. Paul jsem udělal všechny výše uvedené věci. Mám dotaz, Jak mohu dosáhnout součtem "celkové skutečné náklady" nebo součet hodnoty ze dvou sloupců.
Jste udělali nějaké práce s vytvářením vlastních souborů xsl ContentQueryMain a ItemStyle? Důvod, proč jsem se zeptat je, že já nechci se starat o své vlastní styly přepsání s upgrady nebo záplaty. Máte příklady? Snažil jsem se dělat identickou kopii ContentQueryMain.xsl a nahrávání nové vlastní kopie do knihovny stylů. Při uvedení odkaz na soubor xsl .webpart MainXslLink vlastnosti, Dostanu 401 neoprávněný přístup. Vlastní xsl soubor publikovanou verzi a každý má přístup pro čtení k němu.
fantastické místo díky! Se potýkali s tím teď posledních pár dní.
Ahoj, to bylo opravdu užitečné, účtování. Mám to všechny pracovní, a také realizované Mike Brown změnu tak seskupuje
výsledky uvnitř tabulky tím, co jsem si jako parametr Group By v panelu vlastností CQWB.
Udělal jsem titul odkaz také, tak to funguje pěkně. Mám ještě jeden problém, Ačkoliv. Já jsem seskupování výsledků podle názvu webu. Uvnitř tabulky, To je pěkně skupiny, a vypadá to skvěle, ale stále je tisk z celé skupiny
názvy(v mém případě názvy serverů) nad tabulkou. Ví někdo, jak se zbavit těchto?
Dík,
Greg
Pěkný článek. Podařilo se dát můj stůl vzhled seznamů služby Sharepoint výchozí analýzou zdrojového kódu v seznamu. Zde jsou hlavní bloky HTML zobrazily v ItemStyle:
<TABULKA width = "100 %" třída = "ms-listviewtable" hranice = 0 cellspacing = 0 cellpadding = 1 dir = "Žádný">
<!–ZÁHLAVÍ–>
<Třída TR = "ms-viewheadertr" VALIGN = TOP>
<TH nowrap obor = "col" třída = "ms-vh2"><div style = "width:100%;pozice:relativní;vlevo:0;vrchol:0;">
<Styl tabulky = "šířka:100%;" CtxNum = "1" výška = "100 %" CellSpacing = 1 cellpadding = 0 třída = "ms-unselectedtitle">
<TR>
<TD width = "100 %" Třída = "ms-vb" nowrap>
Texte du titr ici
</TD>
<TD style = "position:absolutní;">
</TD>
</TR>
</TABULKA></div>
</TH>
<!–Opakujte u všech buněk záhlaví–>
</TR>
<!– Tabulka dat –>
<Třída TR = "">
<!–Datový sloupec, Pavla kód používejte pro první z nich s hypertextovým odkazem –>
<TD třída = "ms-vb2">Údaje zde</TD>
<!–Prázdné sloupce–>
<TD třída = "ms-vb2">
<rozpětí dir = None></rozpětí><
/TD>
<!–Sloupec Datum–>
<TD třída = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Alternativní řádek – Použít novou proměnnou XSL, který bude vložit alternativní třídy založené na aktuálním řádku modulo 2–>
<Třída TR = "ms střídání">
…
</TR>
</TABULKA>
Vladimirblahut právě jsem hledal...Jste rock muž...Ať žije...Tebe se na post..
<XSL:použít šablony vyberte = "." Mode = "itemstyle">
<XSL:s parametr název = "CurPos" Vyberte = "$CurPosition" />
<XSL:s parametr název = "poslední" Vyberte = "$LastRow" />
<XSL:s parametr název = "StartNewGroup" SELECT="@__begingroup" />
</XSL:Kdy>
<XSL:při testování = "$StartNewGroup = 'True'">
<TR>
<TD >
<XSL:volání šablona name="OuterTemplate.GetGroupName">
<XSL:s parametr název = "název_skupiny" SELECT="@*[Jméno()= $Group]"/>
<XSL:s parametr název = "GroupType" Vyberte = "$GroupType" />
</XSL:volání šablona>
</TD>
</TR>
</XSL:Kdy>
<XSL:jinak>
</XSL:jinak>
</XSL:zvolit>
Ahoj Paul,
Při práci s xml/xsl a obsahu dotaz webové části, Našli jste nějaké dobré způsoby, jak formátovat vaše xslt? Pokouší provést změny a testování návrhu se ukazuje správnou bolest v ** jen pomocí textového editoru…
Ať se daří
(např.. https://myweb.com/Marketing/images/icn-order.gif, )
Mám použít obrázek nebo obrázek v CommonViewFields pole typu? (např.. InternalColumnName, Obrázek)
Váš příspěvek je přesně to, co jsem hledal. Avšak, Nemůžu dostat do práce.
Mám dokumenty, které jsou uloženy v různých doc. knihovny ale tříděno pomocí sloupce vlastní třídy (volba: 1 nebo 2. Chci použít CQWP Ukázat tyto dokumenty založené na své třídě.
Byl jsem schopen přidat CQWP, exportovat do SPD, Konfigurace itemStyle.xls zobrazíte vlastní půlsnímků v seznamovém pohledu. Avšak, Nelze úspěšně realizovat, co zde popisujete.
Jedná se o sloupce, které chci zobrazit v mém CQWP:
Typ souboru (Chcete-li zobrazit ikonu)
Název souboru
Datum poslední změny
Kdo upravil
Rezervováno pro
Kontrolována v komentářích
V současné době mám výsledek ve formátu seznamu. Jak mohu změnit na formát talble.
Dík.
Plavy
Omlouváme se za missspelling na mé jméno, nevím, kde ” přišel z.