Archivy kategorií: Rozvoj služby SharePoint

Pozor na prolomení změny na ItemStyle.xsl

Pracoval jsem s ItemStyle.xsl upravit vzhled obsahu webové části dotaz a zrovna v době oběda, Udělal jsem lámání změnit na soubor xsl. Neuvědomil jsem si to, ale to mělo dalekosáhlé důsledky v celé kolekci webů. Jsem šel na oběd a po návratu, všiml si tuto zprávu v spoustu míst:

Nelze zobrazit tuto webovou část. Odstranění problému, Otevřete webovou stránku v editoru HTML kompatibilním se službou Windows SharePoint Services, například Microsoft Office SharePoint Designer. Pokud potíže potrvají, Obraťte se na správce webového serveru.

Já vinu klienta (neuvědomují si, ještě že to byla moje chyba v tomto bodě) ale nakonec si všiml, že aplikace visual studio intellisense byl varování mě že jsem měl chybně XSL. Opravil jsem to a všechno to začalo pracovat.

Být zatraceně opatrní při práci s ItemStyle.xsl (a globální soubory XSL) — lámání je ovlivňuje mnoho artefaktů v kolekci webů.

<Konec />

Zobrazit obsah webové části výsledky v mřížce / Tabulka

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:

obrázek

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:

obrázek

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:

  1. Určit součásti mřížky (řádky nebo sloupce).
  2. Definovat a vytvořit nezbytné místo sloupce.
  3. Vytvořit dílčí weby pro projekty a ojedinělým seznamů.
  4. Přidejte CQWP do webové stránky a nakonfigurujete ho k prohledávání pro seznamy.
  5. Upravit XML CQWP sbírat další sloupce.
  6. Ú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:

obrázek

Tady je struktura webu:

obrázek

2. Přidat CQWP po vytvoření mého projektu podřízené weby a ojedinělého projektu Souhrnné seznamy:

obrázek

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:

obrázek

Změnu a zde je výsledek:

obrázek

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:

obrázek

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"&lt;Tabulka&gt;" 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" 
vybrat="@Project_x005F_x0020_Budget"></XSL:s parametr> </XSL:volání šablona> </TD> <TD zarovnání="doprava"> <XSL:volání šablona Jméno="FormatCurrency"> <XSL:s parametr Jméno="hodnota" vybrat="@Project_x005F_x0020_Expenses">
</XSL:s parametr> </XSL:volání šablona> </TD> <TD> <XSL:hodnota z vybrat="@Project_x005F_x0020_Status"/> </TD> <!-- Všechny tyto je zakomentován k objasnění věci. Avšak, přivést ji zpět a tak to do <TD> Chcete-li vidět účinek. --> <!-- <div id = "linkitem" třída = "položka"> <XSL:Pokud zkušební = "řetězec délky($SafeImageUrl) != 0"> <div třída = "image oblast vlevo"> <href = "{$SafeLinkUrl}" cíl = "{$LinkTarget}"> <img třída = "image pevné šířky" src = "{$SafeImageUrl}"
ALT = "{@ImageUrlAltText}"/> </a> </div> </XSL:Pokud> <div třída = "link položka"> <XSL:volání šablona
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <href = "{$SafeLinkUrl}"
cíl = "{$LinkTarget}" title = "{@LinkToolTip}"> <XSL:hodnota-vyberte = "$DisplayTitle" /> </a> <div třída = "popis"> <XSL:hodnota z select="@Description" /> </div> </div> </div>
--> </TR> <!-- Vypouštějí uzavírací tag tabulky. Pokud nejsme v poslední řadě, to bude prázdná. --> <XSL:hodnota z vybrat="$tableEnd" zakázat výstup útěk="Ano"/> </XSL:Šablona> <XSL:Šablona Jméno="FormatCurrency"> <XSL:parametr Jméno="hodnota" vybrat="0" /> <XSL:hodnota z vybrat='formát čísla($hodnota, "$DDD,DDD,DDD. DD", "zaměstnanci")' /> </XSL:Šablona>

Standardní WSS/MOSS oken pro zadávání dat nepodporují kaskádové rozevírací seznamy (nebo jiné intra-od komunikace)

AKTUALIZOVAT (04/2008): Toto skvělé blogu ukazuje dobrý javascript založený přístup k tomuto problému: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

AKTUALIZACE II: (04/2008): Tento blog vstup vypadá slibně, stejně: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Několikrát za týden, ne-li denně, fórum uživatelů popisují požadavek, který by normálně se setkal prostřednictvím CSS rozevírací seznamy. Například, Mám dva rozevírací ovládací prvky:

  • Seznam USA. státy
  • Seznam USA. města.

Jako zodpovědný UI poskytovatelé, Chceme, aby pracoval jako:

  • Paul vybere USA. stát z drop-down.
  • To způsobí, že města drop dolů k filtrování pouze těch měst, které patří do vybraného stavu.
  • Paul vybere město z tohoto filtrovaného seznamu.

Out-of-the-box nepodporuje tuto funkci. Vlastně, neexistuje žádná podpora OOB pro jakýkoliv druh přímé intra forma komunikace. To zahrnuje programově skrývání/povolení/zakázání pole v reakci na změny pole na formuláři.

Skutečný cíl tohoto článku k popisu možných řešení a tyto jsou možnosti, jak vím, že je:

  1. Vyvinout vlastní sloupce typ. Jako vlastní sloupce vývojář, Máte plnou kontrolu nad světem"" vlastní sloupce. Můžete implementovat kaskádové rozevíracího tak.
  2. Zvažte použití pracovního postupu. V některých případech, Chcete automaticky přiřadit hodnotu k poli na hodnoty jiného pole. V tomto případě, normálně pokusíte použít vypočítaný sloupec, ale některé časy, to prostě nebude mít práci. SharePoint Designer workflow je relativně spravovat šetrná alternativa k klesá dolů do kódu a visual studio. Pokud půjdete touto cestou, být si vědom problému řešit Tento článek (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Obslužné rutiny událostí: Jako pracovního postupu, To je fakt po řešení. Vaše obslužná rutina události je sestavení rozhraní .NET (C#, VB.NET) na které SharePoint předá řízení. Objekt, který vyvinete má přístup k datům v seznamu (a celý objektový model) a dělat všechny potřebné výpočty.
  4. Pomocí aplikace SharePoint Designer vytvářet vlastní položky formuláře. Já nemám přímou zkušenost s tímto přístupem, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Zahrnout vlastní funkce vstupu dat technologie ASP.NET (jako samostatné webové stránky, nebo jako webovou část) a místo toho použít.

Pokud někdo zná jiné a lepší možnosti, Prosím, psát komentáře a já budu aktualizovat tělo tento post.

<Konec />

Doplněk Technorati značky:

V SharePoint vytvořit pruhové grafy

Přehled:

(AKTUALIZOVAT 12/04/07: Přidána další zajímavé zdroje na konci, které odkazují na jiný blog, který to řeší prostřednictvím velmi zajímavou webovou část)

Tato položka blogu popisuje, jak vytvořit pruhový graf ve službě SharePoint. To funguje v WSS nebo MOSS prostředí závisí pouze na webovou část zobrazení dat..

Celkový přístup je následující:

  1. Vytvořit seznam nebo knihovnu dokumentů, která obsahuje data, která chcete graf.
  2. Místo přidružená knihovna dokumentů / vlastní seznam na stránku a převést ji do webové části zobrazení dat (DVWP).
  3. Úprava XSL DVWP pro generování HTML, který zobrazuje jako graf.

Obchodní scénář / Instalace:

Vytvořil jsem vlastní seznam s standardní název sloupec a jeden další sloupec, "Status". Tyto modely (velmi Zjednodušeně) "povolení pro výdaje" scénář, kde název představuje projekt a stav hodnotu ze seznamu:

  • Navrhované
  • V procesu
  • Zastavil

Cílem je vytvářet interaktivní vodorovný pruhový graf, který ukazuje tyto stavové kódy.

Jsem naplněn seznamu a to vypadá takto:

obrázek

Vytvořit webové části zobrazení dat:

Přidáním vlastního seznamu na stránku vytvořit DVWP (Web stránky v mém případě) a podle pokynů Tady (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Kromě jednoduše vytvořit DVWP, rovněž je třeba nastavit vlastnost stránkování a zobrazit všechny dostupné řádky. Pro mě, To je něco takového:

obrázek

V tomto okamžiku, Jsem vždy blízko, SPD a prohlížeč. Já znovu otevřít stránku pomocí prohlížeče. Tím je zabráněno náhodnému komolili rozložení webové části na stránce.

Upravit soubor XSLT:

Nyní je čas Chcete-li upravit soubor XSLT.

Já vždy použít visual studio pro tento. (Viz Tady Důležité upozornění o intellisense, který vám pomůže hodně).

Vytvořit prázdný projekt přidat čtyři nové soubory (nahrazení slova "originál" a "New" podle potřeby):

  • Original.XSLT
  • New.XSLT
  • Původní Params.xml
  • Nové Params.xml

V mém případě, Vypadá to jako to:

obrázek

Upravit webovou část a zkopírujte parametry a XSL do originálu"" verze v aplikaci Visual Studio.

Cílem je způsobit XSL Transformace výsledky, které jsme se vrátili z DVWP dotazu do kódu HTML, který rendruje jako graf.

Za tímto účelem, To pomáhá nejprve zvážit, co HTML by měl vypadat jako předtím, než jsme se zmást šílenství, která je známá jako "XSL". (Aby bylo jasno, je jen příklad; nechcete napsat nebo kopírovat/vložit do sady visual studio. Poskytuji plnou ránu, výchozí bod pro to později v psát-up). Následující ukázkový graf je vykresleno jako HTML, bezprostředně po:

Ukázkový sloupcový graf

Odpovídající HTML:

<HTML>
<tělo>
<centrum>
<tabulka šířka = 80 %>
<TR><TD><centrum>Vodorovný pruhový graf</TD></TR>
<TR>
<TD align = "na střed">
<ohraničení tabulky = "1" Šířka = 80 %>
<TR>
<TD width = 10 %>Otevřené</TD>
<TD><tabulka cellpadding ="0" CellSpacing ="0" hranice = 0 width = 50 %><TR bgcolor = červená><TD>&nbsp;</TD></TR></Tabulka></TD>
</TR>
<TR>
<TD width = 10 %>Zavřeno</TD>
<TD><tabulka cellpadding ="0" CellSpacing ="0" hranice = 0 width = 25 %><TR bgcolor = červená><TD>&nbsp;</TD></TR></Tabulka></TD>
</TR>
<TR>
<TD width = 10 %>Zastavil</TD>
<TD><tabulka cellpadding ="0" CellSpacing ="0" hranice = 0 width = 25 %><TR bgcolor = červená><TD>&nbsp;</TD></TR></Tabulka></TD>
</TR>
</Tabulka>
</TD>
</TR>
</Tabulka>
</tělo>
</HTML>

Použil jsem mrtvý jednoduchý přístup k vytváření plno nastavením barvu pozadí řádku "Red".

S sebou tady je to: Na konci, vše co děláme je vytváření HTML s řádky a sloupci.

Šablony XSLT:

Zkopíroval jsem XSLT, který generuje vodorovný pruhový graf. Je to docela dobře poznamenal, takže nebudu přidávat mnohem zde kromě těchto poznámek:

  • Začal jsem s výchozí šablonu stylů XSL, které aplikace SharePoint Designer mi dal, když jsem poprvé vytvořil DVWP.
  • Byl jsem schopen to kácet od SPD 657 řádky 166 čáry.
  • Nechtěl nepořádek kolem s parametry XML souboru (který je oddělen od XSL a budete vědět, co mám na mysli, když jdete k úpravě DVWP, sama o sobě; Existují dva soubory, které lze upravit). Avšak, za účelem zjednodušení it, Téměř všechny z nich odebírat XSL. To znamená, že pokud chcete využít těchto parametrů, Potřebujete jen přidat jejich definice proměnných do XSL. To bude snadné, protože budete mít původní definice proměnných XSL v projektu aplikace visual studio.
  • Měl bys být schopen kopírovat a vložit přímo do projektu aplikace visual studio. Pak, mé volání a vložte svůj vlastní volání "ShowBar".
  • Procházení dolů funguje vytvořením <href> Nějak tak: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Tato technika může být hodnoty v jiných kontextech. Zpočátku, Myslel jsem, že budu muset odpovídat složitější formátu: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, ale v mém prostředí, které není nutné. V seznamu adresa URL je předána k nám službou SharePoint, takže to je docela snadné zobecnit.

Tady to je:

<XSL:Šablona stylů verze="1.0" vyloučit výsledek předpony="r z o s ddwrt dt msxsl" 
xmlns.:msxsl="Urna:schémata microsoft-com:XSLT" xmlns.:XSL="http://www.w3.org/ 1999 / / transformace XSL"
xmlns.:SharePoint="Microsoft.SharePoint.WebControls" xmlns.:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns.:prostředí ASP="http://schemas.microsoft.com/ASPNET/20" xmlns.:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns.:o="Urna:schémata microsoft-com:kancelář" xmlns.:s="UUID:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns.:DT="UUID:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns.:RS="Urna:schémata microsoft-com:sada řádků" xmlns.:z="#RowsetSchema"
xmlns.:ddwrt2="Urna:aplikace FrontPage:vnitřní"
> <XSL:výstup Metoda="HTML" odsazení="Ne" /> <XSL:desetinný formát NaN="" /> <XSL:parametr Jméno="ListUrlDir"></XSL:parametr> <!-- Potřebuji to pro podporu drill-down. --> <XSL:Šablona shoda="/" xmlns.:SharePoint="Microsoft.SharePoint.WebControls"
xmlns.:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns.:prostředí ASP="http://schemas.microsoft.com/ASPNET/20"
> <XSL:Proměnná Jméno="dvt_StyleName">Tabulka</XSL:Proměnná> <XSL:Proměnná Jméno="Řádky" vybrat="/dsQueryResponse/řádky/řádek" /> <XSL:Proměnná Jméno="dvt_RowCount" vybrat="hrabě($Řádky)" /> <XSL:Proměnná Jméno="IsEmpty" vybrat="$dvt_RowCount = 0" /> <XSL:Proměnná Jméno="dvt_IsEmpty" vybrat="$dvt_RowCount = 0" /> <XSL:zvolit> <XSL:Kdy Testovat="$dvt_IsEmpty"> Neexistují žádná data ke grafu!<BR/> </XSL:Kdy> <XSL:jinak> <!-- Začíná zde zajímavé věci. Musíme definovat dvojice proměnných pro každý řádek v grafu: Celkový počet položek a procento z celku.. --> <XSL:Proměnná Jméno="totalProposed" vybrat="hrabě(/dsQueryResponse/řádky/řádek[normalizovat prostor(@Status) =, "Navrhl"])" /> <XSL:Proměnná Jméno="percentProposed" vybrat="$totalProposed div $dvt_RowCount" /> <XSL:Proměnná Jméno="totalInProcess" vybrat="hrabě(/dsQueryResponse/řádky/řádek[normalizovat prostor(@Status) = "V procesu"])" /> <XSL:Proměnná Jméno="percentInProcess" vybrat="$totalInProcess div $dvt_RowCount" /> <XSL:Proměnná Jméno="totalStalled" vybrat="hrabě(/dsQueryResponse/řádky/řádek[normalizovat prostor(@Status) =, "Zastavil"])" /> <XSL:Proměnná Jméno="percentStalled" vybrat="$totalStalled div $dvt_RowCount" /> <!-- Definujeme naši HTML tabulka zde. Já si půjčuji od některých standardních stylů SharePoint zde aby byl v souladu. Myslím, že to bude ctít stejně jako téma přepíše změny globálního css souboru. --> <Tabulka Šířka="100%" CellSpacing="0" odsazení obsahu buněk="2" styl="pravého ohraničení: 1 pevné #C0C0C0; dolní ohraničení: 1 pevné #C0C0C0; styl ohraničení vlevo: pevné; Šířka ohraničení vlevo: 1; styl ohraničení nahoře: pevné; Šířka ohraničení nahoře: 1;"> <TR> <TD zarovnání="centrum"> <Tabulka hranice="1" Šířka="100%"> <!-- Pro každý status, který chceme graf, nazýváme "ShowBar" Šablona. Jsme se projít: 1. Popis pro řádek. To je transformován do hypertextový odkaz. 2. Procento (Proměnná shora). 3. Skutečný název pole kódu z nadřízeném seznamu. To není třeba odpovídat zobrazovanému popisku. 4. Hodnota pole pro #3. 5. Celkový počet položek tohoto stavu kódu (není celkový součet všech stavových kódů). To vydává <TR></TR> a linka vodorovný pruhový graf. Nazýváme tuto šablonu pro každý kód stavu, který chceme zobrazit. --> <XSL:volání šablona Jméno="ShowBar"> <XSL:s parametr Jméno="BarDisplayLabel" vybrat=""Navrhl""/> <XSL:s parametr Jméno="BarPercent" vybrat="$percentProposed"/> <XSL:s parametr Jméno="QueryFilterFieldName" vybrat=""Status""/> <XSL:s parametr Jméno="QueryFilterFieldValue" vybrat=""Navrhl""/> <XSL:s parametr Jméno="TotalItems" vybrat="$totalProposed"></XSL:s parametr> </XSL:volání šablona> <XSL:volání šablona Jméno="ShowBar"> <XSL:s parametr Jméno="BarDisplayLabel" vybrat=""Zastavil""/> <XSL:s parametr Jméno="BarPercent" vybrat="$percentStalled"/> <XSL:s parametr Jméno="QueryFilterFieldName" vybrat=""Status""/> <XSL:s parametr Jméno="QueryFilterFieldValue" vybrat=""Zastavil""/> <XSL:s parametr Jméno="TotalItems" vybrat="$totalStalled"></XSL:s parametr> </XSL:volání šablona> <XSL:volání šablona Jméno="ShowBar"> <XSL:s parametr Jméno="BarDisplayLabel" vybrat=""V procesu""/> <XSL:s parametr Jméno="BarPercent" vybrat="$percentInProcess"/> <XSL:s parametr Jméno="QueryFilterFieldName" vybrat=""Status""/> <XSL:s parametr Jméno="QueryFilterFieldValue" vybrat=""V procesu""/> <XSL:s parametr Jméno="TotalItems" vybrat="$totalInProcess"></XSL:s parametr> </XSL:volání šablona> </Tabulka> </TD> </TR> </Tabulka> </XSL:jinak> </XSL:zvolit> </XSL:Šablona> <!-- Tato šablona funguje zobrazování jednotlivých řádků v pruhovém grafu. Budete pravděpodobně dělat většinu své vylepšování zde. --> <XSL:Šablona Jméno="ShowBar"> <XSL:parametr Jméno="BarDisplayLabel" /> <!-- Popis zobrazení --> <XSL:parametr Jméno="BarPercent"/> <!-- Procento z celku.. --> <XSL:parametr Jméno="QueryFilterFieldName"/> <!-- Umožňuje přejít na dotaz & filtr --> <XSL:parametr Jméno="QueryFilterFieldValue"/> <!-- Umožňuje přejít na dotaz & filtr --> <XSL:parametr Jméno="TotalItems" /> <!-- Celkový počet tohoto barlabel --> <TR> <!-- Pruhového sama. --> <TD Třída="MS-formbody" Šířka="30%"> <!-- Tato další sada příkazy vytvoří řetězec dotazu, který umožňuje nám k podrobnostem a filtrované zobrazení podkladových dat. Vyrábíme využívají tu pár věcí: 1. Můžeme předat FilterField1 a FilterValue1 do seznamu Filtrovat sloupec. 2. SharePoint je předání klíčový parametr k nám, ListUrlDir, který odkazuje na nadřízeném seznamu, proti němuž tento DVWP "běží". Není legrace XSL? --> <XSL:text zakázat výstup útěk="Ano"> <![CDATA[<href ="]]></XSL:text> <XSL:hodnota z vybrat="$ListUrlDir"/> <XSL:text zakázat výstup útěk="Ano"><![CDATA[?FilterField1 =]]></XSL:text> <XSL:hodnota z vybrat="$QueryFilterFieldName"/> <XSL:text zakázat výstup útěk="Ano"><![CDATA[&FilterValue1 =]]></XSL:text> <XSL:hodnota z vybrat="$QueryFilterFieldValue"/> <XSL:text zakázat výstup útěk="Ano"><![CDATA[">]]></XSL:text> <XSL:hodnota z vybrat="$BarDisplayLabel"/> <XSL:text zakázat výstup útěk="Ano"><![CDATA[</a>]]></XSL:text> <!-- Další část ukazuje nějaká čísla ve formátu: "(celkem / % z celku)" --> (<XSL:hodnota z vybrat="$TotalItems"/> / <!-- Tím se vytvoří pěkný procentuální označení pro nás. Dík, Microsoft! --> <XSL:volání šablona Jméno="PercentFormat"> <XSL:s parametr Jméno="procenta" vybrat="$BarPercent"/> </XSL:volání šablona>) </TD> <!-- Konečně, vyzařování <TD> Značka pro bar sama.--> <TD> <Tabulka odsazení obsahu buněk="0" CellSpacing="0" hranice="0" Šířka="{kolo($BarPercent * 100)+1}%"> <TR Barva pozadí="červená"> <XSL:text zakázat výstup útěk="Ano"><![CDATA[&nbsp;]]></XSL:text> </TR> </Tabulka> </TD> </TR> </XSL:Šablona> <!-- To je převzata přímo z některých XSL, našel jsem v šabloně aplikace MS. --> <XSL:Šablona Jméno="PercentFormat"> <XSL:parametr Jméno="procenta"/> <XSL:zvolit> <XSL:Kdy Testovat="formát čísla($procenta, '#,##0%;-#,##0%')= "NaN"">0%</XSL:Kdy> <XSL:jinak> <XSL:hodnota z vybrat="formát čísla($procenta, '#,##0%;-#,##0%')" /> </XSL:jinak> </XSL:zvolit> </XSL:Šablona> </XSL:Šablona stylů>

Výsledky:

XSL shora generuje graf:

obrázek

Přejít na podkladová data po kliknutí na kód stavu:

obrázek

Závěrečné myšlenky:

Může to být generalizovaná?

Miluji tento rozšířil koncept, Ale nelíbí se mi že budu muset jít a udělat to ručně kódování. Dal jsem trochu myslel na to, zda může být generalizovaná a já jsem optimistický, Ale já jsem trochu strach, že může existovat cihlovou zeď někde po cestě, která nenabízí žádné řešení. Pokud má někdo nějaké dobré nápady na tomto, Prosím Povšimněte si v komentářích nebo napište mi.

Vertikální grafy:

To je vodorovný pruhový graf. To je jistě možné vytvořit svislý graf. Jen je třeba změnit kód HTML. Začal bych stejně: Vytvořit HTML podoba svislý pruhový graf a pak zjistit, jak se dostat, že pomocí XSL. Pokud někdo má zájem v tom, Jsem mohl přesvědčit, aby to vyzkoušet a věnovat. Pokud již někdo udělal, prosím dejte mi vědět a já budu rád odkaz na svůj blog 🙂

Myslím, že problém s vertikální graf je, že popisky grafu jsou obtížnější spravovat, ale rozhodně ne nemožné.

Pole název Gotcha:

Existují přinejmenším dvě věci dávat pozor s názvy polí.

První, Název pole s mezerou musí být uvozena v XSL. To bude pravděpodobně problém zde:

        <XSL:Proměnná Jméno="totalProposed" 
vybrat="hrabě(/dsQueryResponse/řádky/řádek[normalizovat prostor(@Status) =, "Navrhl"])" />

Pokud váš Status"" sloupec se jmenuje "stavový kód" pak je třeba se na něj odkazovat jako "Status_x0020_Code":

   <XSL:Proměnná Jméno="totalProposed" 
vybrat="hrabě(/dsQueryResponse/řádky/řádek[normalizovat prostor(@Status_x0020_Code) =, "Navrhl"])" />

Druhé, a já jsem trochu neostrý, v tomto, ale musíte také být v pohotovosti pro změny názvu pole. Pokud zadáte název pole "kód stavu" a pak později, přejmenovat na "AFE Status", "vnitřní název" nic nemění. Vnitřní název stále bude stavový kód"" a musí na něj odkazovat jako "Status_x0020_Code". "Jiné zdroje" odkazy mohou pomoci diagnostikovat a opravit tento druh problému.

O této barvy:

Vybral jsem "červená" protože je to potěšující pro mě v tuto chvíli. To nebude velký problém Ukázat různé barvy tak, aby se víc než jen vizuální popis čísla, ale také poskytnout užitečný ukazatel KPI. Například, je-li procento "zastavil" Je AFE je > 10% pak Ukázat červený, jinak to Ukázat v černém. Použití <XSL:zvolit> k dosažení tohoto.

Další zdroje:

Šťastný transformace!

<Konec />

Přihlásit se na mém blogu!

Doplněk Technorati značky: , , , , , ,

OM údaje prostřednictvím vlastního seznamu (nebo, Ještě další Data Displayor OM [jako YACC, ale jiné])

Dnes, Strávil jsem několik hodin vypátrat příčinu za zpráva "zadaný název sloupce je již používán nebo vyhrazena. Zvolte jiný název."

Nelze vytvořit na sloupec, odstraněna a znovu vytvořena v jiném prostředí, Takže jsem věděl, že to nebylo o vyhrazený název. Avšak, Jsem prostě nemohl najít sloupec kdekoliv přes standardní uživatelské rozhraní služby SharePoint na každém místě v kolekci webů.

Jsem vyslán do MSDN fóra zde a nezkrotný Andrew Woodward ukázal mi směrem z podkladového modelu objektu.

Jsem odešel do CodePlex Chcete-li najít některé nástroje, které by pomohly mi nahlédnout do podkladová data OM a pomozte mi najít potíže.

Zkoušel jsem několik nástrojů a oni byli velmi chladné a zajímavé, ale nakonec, uživatelské rozhraní není dost dobré pro mé účely. Nebudu kritizovat je všemi prostředky, ale jasně tvůrci nástrojů neměl můj problém v mysli, když oni vytvořili jejich UI :). Zdá se, že většina lidí se investují slušné množství času a úsilí při vytváření pracovní stanice / klientské aplikace, které poskytují výhled na strom, Klepněte pravým tlačítkem myši místní nabídky a tak dále. Jsou to pěkné a všem, ale je to spousta práce, vytvořit top z the-line uživatelské zkušenosti, který je také velmi flexibilní.

Jsem opravdu potřebovala odpověď na tento problém. Napadlo mě, že pokud bych mohl dostat všechny sloupce webu v kolekci webů do vlastního seznamu, Mohl filtrovat, Seřadit a vytvořit zobrazení, které by mi pomoci najít tento údajně existující sloupec (což se také stalo, BTW). Šel jsem dopředu a udělal to a za hodinu nebo dvě později, měl všechny mé sloupce webu načten do vlastního seznamu s seskupení, řazení a tak dále. Našel jsem odpověď o pět minut později.

Pokud úspěšně převzít svět, Myslím, že bude vyhláška, že všichni poskytovatelé nástroje SharePoint musí vážně uvažovat o povrchové úpravy jejich objektový model dat do vlastního seznamu. Tímto způsobem, Mám moc Chcete-li prohledávat jakýkoli způsob, jak chci (Vynucené, Samozřejmě, standardní sharepoint rysy).