kategori Achiv: Développement SharePoint

Mefye kraze chanjman pou ItemStyle.xsl

M ap travay ak ItemStyle.xsl pou personnaliser la gade de Contenu Requête Web pati yon Et dwat lè manje midi, Mwen te fè ke yon chanjman pou xsl a. M pa t rann kont li, Men, sa te byen lwen ke l rive nan efè atravè koleksyon direksyon an. Mwen t' ap pou manje midi m retounen, a mesaj sa a parèt nan yon pakèt moun kote:

Pat kapab pou yo ekspoze pati entènèt sa a. Pou résoudre pwoblèm, louvri paj entènèt sa a nan yon fennèt SharePoint sèvis-konpatib HTML editè tankou biwo Microsoft SharePoint Designer. Si pwoblèm persiste, kontakte administratè sèvè Web ou.

Mwen te blame kliyan a (pa réaliser kòm ke l te bay tò mwen nan pwen sa) Men, evantyèlman te note ke izyèl estidyo intellisense te avèti m' ke mwen te defòme XSL. Mwen corrigées li yo ak tout bagay te kòmanse travay.

Darned pran san li lè travay ak ItemStyle.xsl (e nenpòt nan fichiers XSL mondyal) — kraze yo touche anpil objets nan koleksyon direksyon an.

<fin />

Afficher Contenu Requête Web pati rezilta nan yon Grille / Tab

Kourikoulòm ak objektif

Soti nan bwat la, BAB PANYÒL’ Requête contenu Web pati (CQWP) affiche rezilta li nan yon lis fòma, menm jan an pou fè rechèch rezilta yo. Se tou posib pou yo ekspoze rezilta nan yon fòma galri (c'est-à-dire. Fòma tab HTML). Gwiyad be'l varyete fo'm ki pi bon nan kèk sikonstans. Mwen kapab dekri kijan pou reyalize sa rive vre nan atik sa a.

Biznis Scénario

Mwen te travay ak yon kliyan an sou yon antrepwiz laj bab PANYÒL déploiement. Nou te fèt yo classification comme pou pwojè se sitwayen pwemye klas nan anbakasyon a yo ye pwòp kote ki gen sou tèt kiyè. Pwojè administratè genyen yon lis singleton pwojè rezime enfòmasyon, tankou Tit, bidjè, te ka espere fin dat, bidjè ki rete ak lòt kalite rezime sistèm yo. Pa "singleton" Mwen vle di yon repòtaj lis SharePoint ki garanti pou genyen sèlman yon atik. Manière, li sanble ke sa:

imaj

Approche teknik la. Se menm jan te dekri Isit (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). A CQWP itilize yon transform XSL è HTML pou browser a Ann.

Mwen toujou envision rezilta a devan plonje nan XSL a paske XSL se yon tèrib kòchma. Se isit la mwen bèl rezilta:

imaj

HTML kon sa génère rezilta sa:

<html>
 <>
 <sant>
 <tab fontyè= 1>

<!-- Étiquettes->
 <tr bgcolor= ble>
 <td><klavye koulè= blanch><b>Pwojè non</b></klavye></td>
 <td fè aliman= dwat><klavye koulè= blanch><b>Dat nèt sou tout pwen</b></klavye></td>
 <td fè aliman= dwat><klavye koulè= blanch><b>Bidjè</b></klavye></td>
 <td fè aliman= dwat><klavye koulè= blanch><b>Depans réel</b></klavye></td>
 <td><klavye koulè= blanch><b>Tout estati</b></klavye></td>
 </tr>

<tr>
 <td>Re-fil chanm konpitè.</td>
 <td fè aliman= dwat>02/01/08</td>
 <td fè aliman= dwat>22,500.00</td>
 <td fè aliman= dwat>19,000.00</td>
 <td>Nan pwogrè</td>
 </tr>

<tr>
 <td>Serveurs pwovizyon pou SQL à</td>
 <td fè aliman= dwat>04/01/08</td>
 <td fè aliman= dwat>7,500.00</td>
 <td fè aliman= dwat>0.00</td>
 <td>Te planifye</td>
 </tr>

</tab>
 </sant>
 </>
</html>

Aproche apròch

Swiv sa etap sa yo pou kreye gri an:

  1. Idantifye composants de la grille (èskonbwit/colonnes).
  2. Defini Et kreye colonnes kote ki gen nesesè.
  3. Kreye sub pozisyon pou pwojè ak nan lis singleton.
  4. Ajoute CQWP a yon paj entènèt ak configure li pou fè rechèch pou lis ou.
  5. Motifye CQWP la XML rasanble moute les colonnes supplémentaires.
  6. Motifye a XSL pou générer yon tab.

M pral konsantre sou anpil sis. Anpil moun yonn nan kat se kò-devlopman ak yon bagay ki gen CQWP kap itilize li an ki te deja fè. Nimewo, senk ki te byen documentés pa lòt moun ki genyen atik sa a exhaustive ekran te tire en nan MSDN Isit (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) Et blog Heather Salomon te Isit (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Reta ak Vis

Te chita nan Et aplike étapes UN nan senk as per a MSDN dokiman Et atik Heather Salomon te.

Nan pwen sa a, ou te vin ajoute nan CQWP ou paj Et ou gen ou <CommonViewFields> configuré comme nesesè.

Swiv les étapes selon lizaj, M gen rezilta entèmedyè sa:

1. Kreye yon jan de contenu, yon repòtaj lis templatized pou sa pi kontan tip e ki kote de. Se isit la pi kontan jan de:

imaj

Isit la se kote ki gen sipò:

imaj

2. Ajoute CQWP a aprè li te kreye m' pwojè sites Et singleton pwojè rezime lis:

imaj

3. Ajoute tout a plis enfòmasyon mwen vle via la <CommonViewFields>:

        <pwopriyete fe-apel="CommonViewFields" tip="filè">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</pwopriyete>

N ap fè konnen mwen te gen pou kenbe tout pwopwiyete savann sou yon liy ou li pa ta travay (CQWP ta di m' sa requête la te retounen atik pa).

4. Nan pwen sa a, nou pwèt pou nou avanse dèyè a atik MSDN ak (sou sou pou atik Heather Salomon te. Swiv pye l' kòmanse tou pwe pa nan #5 pou kreye yon personnalisé / unghosted vèsyon pipiti de youn nan ItemStyle.xsl. Mwen swiv konsèy Heather a, leve kanpe par étape 11 Et obtenir rezilta entèmedyè sa:

4.1: Non M' modèle XSL comme piba:

<xsl:modèle non = "Grille" à = "ligne[@Style = 'Gwiyad']" mòd = "itemstyle">

Mwen tou pa yon ti jan motifye li a <xsl:pou-chak …> pa pandan l ajoute yon <br /> etikèt ki pou bay yon moun ki nan lis:

    <xsl:pou-chak fè chwa="@*">
      P I:<xsl:valè-de fè chwa="fe-apel()" /><br/>
    </xsl:pou-chak>

4.2: Mwen motifye pati entènèt la, ale nan figi yo epi chwazi m "Grille" mod:

imaj

Aplike a chanje Et isit la se rezilta a:

imaj

Nou kapab wè de la CI-dessus ke jaden nou vle (Pwojè non, depans, estati, ets) ki disponib pou nou pou yo itilize lè nou fè sikile a HTML. Pa sèlman sa, Men, nou wè non a nou dwe référence kolòn sa nan XSL a. Pa ekzanp, nou référence pwojè estati ou kòm "Project_x005F_x0020_Name".

Nan pwen sa a, nou pati nan Heather an blog ak nan zepòl gran sa yo, Mwen ajoute ti afèm.

ContentQueryMain.xsl

NOTE: Lè fè chanjman pou toulède ContentQueryMain.xsl osi byen ke ItemStyle.xsl, ou bezwen pou yo tcheke fichiers sa tounen nan, anvan ou te wè fè chanjman ou.

Pou rezon an tankou ofrann grille, Bab PANYÒL yo itilize de diferan XSL fichiers pou pwodwi rezilta nou wè nan yon CQWP. Pou jenere ansyen moso pèsistans yap ogmante jiska, nou te modifye ItemStyle.xsl. Bab PANYÒL yo aktyèlman itilize yon lòt XSL ranpli, ContentQueryMain.xsl pou ansanm ak ItemStyle.xsl pou jenere HTML li. Menm jan li yo, non implique, ContentQueryMain.xsl, ki se "pwensipal la" XSL yo kontwole tout pèdi tradiksyon. Une nan tout atik a ak rann yo yonn pou modèles nan ItemStyle.xsl. Nou ap motifye ItemStyle.xsl pou jenere pòt <tab> etikèt devan émet dispit lan premye done e fèmen a <tab> etikèt apwè émet dènye dispit lan. Pou reyalize sa, ContentQueryMain.xsl modifye pou yo pase pou nou "grille de paramètres" modèle nan ItemStyle.xsl, "dènye ligne" ak "aktyèl afile". ItemStyle.xsl itilize sa è conditionnelle baj nesesè yo.

W ap itilize teknik Heather Salomon te, nou jwenn ContentQueryMain.xsl. Sitiye nan la, kote ke ItemStyle.xsl. Piki ekran sa a ta dwe ede:

imaj

Nou bezwen pou fè chanjman suivant yo:

  • Motifye yon modèle xsl, "CallItemTemplate" ki aktyèlman appelle modèle gwiyad nou nan ItemStyle.xsl. Nou pral pase de karakteristik pou modèle galri a ke li pwal gen yon data li bezwen pou conditionnelle pwodui louvri ak fèmen <tab> baj.
  • Motifye yon lòt ti ContentQueryMain.xsl ki rele la "CallItemTemplate" pou yo pase l' yon "LastRow" paramètre se konsa, LastRow sa ta dwe pase pou nou modèle Grille.

Recherchez modèle a ki rele "OuterTemplate.CallItemTemplate" idantifye nan kòd la:

  <xsl:modèle fe-apel="OuterTemplate.CallItemTemplate">

Ranplase a an antye modèle comme piba:

  <xsl:modèle fe-apel="OuterTemplate.CallItemTemplate">
    <xsl:param fe-apel="CurPosition" />

    <!--
      Ajoute a "LastRow" paramètre.
      Nou sèlman itilize li lè pase stil atik nan "Grille".
    -->
    <xsl:param fe-apel="LastRow" />

    <xsl:chwazi>
      <xsl:Kile tès="@Style = 'NewsRollUpItem'">
        <xsl:modèles aplike fè chwa="." mòd="itemstyle">
          <xsl:ak-param fe-apel="EditMode" fè chwa="$cbq_iseditmode" />
        </xsl:modèles aplike>
      </xsl:Kile>
      <xsl:Kile tès="@Style = 'NewsBigItem'">
        <xsl:modèles aplike fè chwa="." mòd="itemstyle">
          <xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
        </xsl:modèles aplike>
      </xsl:Kile>
      <xsl:Kile tès="@Style = 'NewsCategoryItem'">
        <xsl:modèles aplike fè chwa="." mòd="itemstyle">
          <xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
        </xsl:modèles aplike>
      </xsl:Kile>

      <!--
              Pase pozisyon aktyèl ak lastrow pou modèle itemstyle.xsl Grille.
              ItemStyle.xsl pwal itilize sa pou fè sikile a louvri Et fèmen <tab> baj.
      -->
      <xsl:Kile tès="@Style = 'Grille'">
        <xsl:modèles aplike fè chwa="." mòd="itemstyle">
          <xsl:ak-param fe-apel="CurPos" fè chwa="$CurPosition" />
          <xsl:ak-param fe-apel="Dire" fè chwa="$LastRow" />
        </xsl:modèles aplike>
      </xsl:Kile>

      <xsl:san sa>
        <xsl:modèles aplike fè chwa="." mòd="itemstyle">
        </xsl:modèles aplike>
      </xsl:san sa>
    </xsl:chwazi>
  </xsl:modèle>

Kòmantè yo pou esplike sa chanjman.

Men wi, la "OuterTemplate.CallItemTemplate" li menm ki rele soti nan yon lòt modèle. Lokalize modèle sa pa chache kòd tèks sa a:

<xsl:modèle fe-apel="OuterTemplate.Body">

Ki gen nan sa pou nou fè nan OuterTemplate.Body epi mete paramètre LastRow a comme piba (montre kòm yon kòmantè nan en):

<xsl:apèl-modèle fe-apel="OuterTemplate.CallItemTemplate">
  <xsl:ak-param fe-apel="CurPosition" fè chwa="$CurPosition" />
  <!-- Mete a paramètre LastRow. -->
  <xsl:ak-param fe-apel="LastRow" fè chwa="$LastRow"/>
</xsl:apèl-modèle>

Après tout sa, nou gen a la fen sa ki te mete sou pye correctement lè sa a, nou ItemStyle.xsl ka fè sikile <tab> baj nan sèl kote.

ItemStyle.Xsl

NOTE: Ankò, tcheke nan ItemStyle.xsl t' ap nenpòt chanjman ki fèt lè sa a, n' a wè effet-kou chanjman sa.

Nou gen de travay isit la:

  • Ranplase modèle gri an antye. Ou kapab kopi/mòtye depi anba.
  • Ajoute yon trames mumbo te deyò a definisyon modèle permet "formatcurrency" modèle pou travay. (Ou kapab di ke mwen gen yon rèl manch sou XSL).

Premye, près de ItemStyle.xsl sou tèt, ajoute liy sa a:

  <!-- Kèk trames mumbo permet nou pou yo ekspoze aux. lajan. -->
  <xsl:desimal-fòma fe-apel="anplwaye" chif="KRAZE-BRIZE" />

  <xsl:modèle fe-apel="Par" jwenn mèt ke l="*" mòd="itemstyle">

Remarque te ajoute ke mwen ke li tou dwat anvan a <xsl:modèle non = "par" …> definisyon.

Pwochen, tounen al jwenn nou modèle galri. Ranplase modèle gri an antye ak kòd ki pi ba. Li devan dèyè a, Men, pa ezite e-mail m' pa kite kòmantè sou blog mwen si ou gen kesyon.

  <xsl:modèle fe-apel="Galri" jwenn mèt ke l="Pagaye[@Style = 'Grille']" mòd="itemstyle">

    <!--
      ContentMain.xsl rann CurPos ak dènye.
      Nou itilize sa yo pou conditionnelle fè sikile a louvri ak fèmen <tab> baj.
    -->
    <xsl:param fe-apel="CurPos" />
    <xsl:param fe-apel="Dire" />

    <!-- Apwe variables non a ItemStyle.xsl estanda -->
    <xsl:varyab fe-apel="SafeImageUrl">
      <xsl:apèl-modèle fe-apel="OuterTemplate.GetSafeStaticUrl">
        <xsl:ak-param fe-apel="UrlColumnName" fè chwa="'ImageUrl'"/>
      </xsl:apèl-modèle>
    </xsl:varyab>
    <xsl:varyab fe-apel="SafeLinkUrl">
      <xsl:apèl-modèle fe-apel="OuterTemplate.GetSafeLink">
        <xsl:ak-param fe-apel="UrlColumnName" fè chwa="'LinkUrl'"/>
      </xsl:apèl-modèle>
    </xsl:varyab>
    <xsl:varyab fe-apel="DisplayTitle">
      <xsl:apèl-modèle fe-apel="OuterTemplate.GetTitle">
        <xsl:ak-param fe-apel="Tit" fè chwa="@Title"/>
        <xsl:ak-param fe-apel="UrlColumnName" fè chwa="'LinkUrl'"/>
      </xsl:apèl-modèle>
    </xsl:varyab>
    <xsl:varyab fe-apel="LinkTarget">
      <xsl:Si tès="@OpenInNewWindow = 'Vre'" >_blank</xsl:Si>
    </xsl:varyab>

    <!--
      Isit la nou defini yon varyab, "tableStart".  Sa a genyen ladan HTML sa nou itilize pou defini sanvenmil tab la tankou étiquettes kolòn yo.  Note si sa CurPos = 1, sa gen ladann HTML a nan yon etikèt CDATA.
      San sa, se va vid.

      Valè tableStart se emited chak fwa ItemStyle te rele via ContentQueryMain.xsl.
    -->
    <xsl:varyab fe-apel="tableStart">
      <xsl:Si tès="$CurPos = 1">
        <![CDATA[
        <tab fontyè = 1>
          <tr bgcolor = "ble">
            <td><klavye koulè = "blanch"><b>Pwojè non</b></klavye></td>
            <fè aliman td = "dwa"><klavye koulè = "blanch"><b>Dat nèt sou tout pwen</b></klavye></td>
            <fè aliman td = "dwa"><klavye koulè = "blanch"><b>Bidjè</b></klavye></td>
            <fè aliman td = "dwa"><klavye koulè = "blanch"><b>Depans réel</b></klavye></td>
            <td><klavye koulè = "blanch"><b>Tout estati</b></klavye></td>
          </tr>
        ]]>
      </xsl:Si>
    </xsl:varyab>

    <!--
      Yon lòt varyab, tableEnd tou senpleman définit la fèmen tab etikèt.

      Kòm ak tableStart, se toujou emited.  Se poutèt sa, pri pou li plase conditionnelle ki baze sou konnen si nou te gen te yo te fè pase dènye dispit lan ContentQueryMain.xsl sa.
    -->
    <xsl:varyab fe-apel="tableEnd">
      <xsl:Si tès="$CurPos = $Last">
        <![CDATA[ </tab> ]]>
      </xsl:Si>
    </xsl:varyab>

    <!--
      Toujou fè sikile tableStart sa ki nan liv.  Si se pa premye ranje a, yo te fè pase pou nou ContentQueryMain.xsl, Lè sa a, nou konnen pri pou li yo va vid.

      Rann enfim pèsistans yap ogmante jiska ke paske lè tableStart l pa vide, sa gen ladann aktyèl HTML sa nou vle fè an ki te rann pa browser a.  Si nou pa di analyseur XSL la pou rann enfim sortie ke, li pral pwodui estaf kòm"&lt;tab&gt;" tan pou"<tab>".
    -->
    <xsl:valè-de fè chwa="$tableStart" rann enfim-pèsistans yap ogmante jiska-ke="Wi"/>


    <tr>
      <!--
      P I: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:valè-de fè chwa="@Project_x005F_x0020_Name"/>
      </td>

      <td fè aliman="pa vre">
        <xsl:valè-de fè chwa="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </td>

      <td fè aliman="pa vre">
        <xsl:apèl-modèle fe-apel="formatcurrency">
          <xsl:ak-param fe-apel="valè" 
fè chwa="@Project_x005F_x0020_Budget"></xsl:ak-param> </xsl:apèl-modèle> </td> <td fè aliman="pa vre"> <xsl:apèl-modèle fe-apel="formatcurrency"> <xsl:ak-param fe-apel="valè" fè chwa="@Project_x005F_x0020_Expenses">
</xsl:ak-param> </xsl:apèl-modèle> </td> <td> <xsl:valè-de fè chwa="@Project_x005F_x0020_Status"/> </td> <!-- Tout moun sa yo a pou klarifye bagay. Sepandan, pote kanè sa yo tounen lakay yo ak vant deboutonnen / li antre nan yon <td> pou wè li vre. --> <!-- <div didantite = "linkitem" klas = "élément"> <xsl:Si tès = "kòd longè($SafeImageUrl) != 0"> <klas div = "estati ki nan zòn ki bò gòch"> <yon href = "{$SafeLinkUrl}" sib = "{$LinkTarget}"> <klas img = "estati ki fikse-lajè" src = "{$SafeImageUrl}"
alt = "{@ImageUrlAltText}"/> </yon> </div> </xsl:Si> <klas div = "lyen atik"> <xsl:apèl-modèle
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <yon href = "{$SafeLinkUrl}"
sib = "{$LinkTarget}" tit = "{@LinkToolTip}"> <xsl:valè-de chwazi = "$DisxslyTitle" /> </yon> <klas div = "dekri teren"> <xsl:valè-de select="@Description" /> </div> </div> </div>
--> </tr> <!-- Fè sikile la fermeture tab etikèt. Si nou pa fè sou dènye dispit lan, sa va vid. --> <xsl:valè-de fè chwa="$tableEnd" rann enfim-pèsistans yap ogmante jiska-ke="Wi"/> </xsl:modèle> <xsl:modèle fe-apel="formatcurrency"> <xsl:param fe-apel="valè" fè chwa="0" /> <xsl:valè-de fè chwa='fòma-nombre($valè, "$DDD,DDD,DDD.JJ", "gwoup")' /> </xsl:modèle>

Bab estanda WSS/PANYÒL done antre Écrans sipòte en ane ke yo bliye-downs (ou lòt echanj rejyonal-de kominikasyon)

AJOU (04/2008): Antre nan gwo blog sa a montre ke yon bon javascript baze approche pou pwoblèm sa a: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

À II: (04/2008): Sa a antre blog semble prometteurs osi byen: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Plizyè fwa pa semèn, si pa chak jou, foròm nèg ki dekri yon kondisyon ki ta nòmalman pou te rankontre via en ane ke yo bliye-downs. Pa ekzanp, Mwen gen de ane ke yo bliye ki anba kontwòl yo:

  • Lis aux. Etazini
  • Lis aux. vil yo.

Kòm chèf fanmi UI fournisseurs, nou vle li pou opere kon sa:

  • Pòl sélectionne aux yon. eta nan ane ke yo bliye-desann.
  • Sa lakòz vil yo, ane ke yo bliye anba pou filtre sèlman sa vil yo ki fè pati pou eta a sélectionné.
  • Pòl sélectionne yon vil de filtrage lis sa a.

Se pa deyò-de-a-bwat sipò yo pou mak sa a. an reyalite, se pa OOB sipò pou nenpòt kalite dirèk andedan-fòm kominikasyon. Sa gen ladann par masquer/e/kòkò jaden nan repons pou chanjman jaden sou fòm lan, yon lòt kote.

A objèktif reyèl ki atik sa a pou pou Espliké sa posib solisyon yo ak sa yo se pwogram ki sa mwen konnen yo:

  1. Devlope yon kolòn repòtaj tip. Tankou yon vye koutim-kolòn-devlope, ou gen anpil kontwole "mond lan" ki sa repòtaj kolòn. Ou ka aplike yon en ane ke yo bliye ki anba menm wout.
  2. Konsidere itilize workflow. Nan kèk ka, ou vle li otomatik valè yon jaden baze sou valè yon lòt jaden. Nan ka sa a, ou ta nòmalman eseye pou yo itilize yon kolòn calculé, Men, gen kèk fwa, li jis pa p fè travay la. Concepteur SharePoint workflow, ki se yon relativman administre zanmi altènatif pou lapli nan kòd ak izyèl estidyo. Si ou ale nan wout sa a, konnen byen sa a adrese pa atik sa a (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Evènman D': Tankou workflow, sa se yon solisyon apwè-a-reyalite. Ou D' evènman se yon .NET asanble (C#, VB.NET) pou SharePoint ki rann kontwòl. Objè nou devlope gen aksè a enfòmasyon nan lis la (Et modèl ki tout bagay la) Et kapab fè nenpòt bezwen kalkil.
  4. Sèvi ak SharePoint Concepteur pou kreye fòmilè repòtaj antre. M pa gen eksperyans dirèk ak apwòch sa a, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Ti pen pwòp ASP.NET done antre fonksyon (kòm yon autonome paj entènèt ou tankou yon pati nan yon web) ak epi itilize sa au.

Si yon moun konnen lòt ak pi bon chwa, souple afiche yon kòmantè de Et m' ap à kadav la nan pòs sa a.

<fin />

Kreye Bar Graphiques nan SharePoint

Kourikoulòm:

(AJOU 12/04/07: Te ajoute yon lòt resous enteresan nan finisman entre pou yon lòt blog sa adresses sa via yon trè bon nan entènèt)

Antre blog sa a dekri kijan pou kreye yon graf bar nan SharePoint. Sa a travay nan tou de WSS ak bab PANYÒL environnements kòm li sèlman depann sou a done vi web pati.

A tout approche se comme piba:

  1. Kreye yon lis ou bibliyotèk dokiman ki gen ladann data ou vle trase graf.
  2. Kote ki asosye dokiman bibliyotèk la / personnalisés lis sou yon paj Et kouvri l' pou yon done view entènèt nan (DVWP).
  3. Motifye DVWP la XSL pou générer HTML ki montre kòm yon graf.

Biznis Scénario / Du:

Mwen te kreye yon lis personnalisé ak nivo kolòn Tit Et yon kolòn supplémentaires, "Estati". Modèl sa a (trè simplement) yon "otorizasyon pou frè" scénario kote tit yo repwezante pwojè a ak estati a yon valè de lis:

  • Pwopoze
  • Nan yon pwosè
  • Au

Objektif la se pou pwodwi yon interactive kouche plat bar graf ki montre codes kondisyon sa yo.

M' ont rempli lis e li parèt tankou sa:

imaj

Kreye done View Web pati:

Kreye DVWP a pa ajout personnalisé lis pou yon paj (kote ki gen paj nan ka mwen) Et swiv eksplikasyon Isit (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

San konte yo senpleman ap kreye a DVWP, nou bezwen to pou mete sou byen échange pou montre tout èskonbwit disponib. Pou mwen, sa ki sanble yon bagay tankou sa:

imaj

Nan pwen sa a, Mwen toujou fèmen Pati Demokrat Sosyal ak browser a. Mwen lè sa a re-louvri paj la ap itilize a browser. Sa kapab anpeche a aza/chans mucking moute en pati entènèt la nan paj la.

Motifye XSLT a:

Kounye a se moman pou motifye XSLT a.

Mwen toujou sèvi ak izyèl estidyo pou sa. (Gade Isit pou yon nòt enpòtan sou intellisense ki pwal ede ou anpil).

Mwen kreye yon pwojè vid ajoute kat nouvo fichiers (ranplase les mots "orijinal" Et "New" comme apwopriye):

  • Original.xslt
  • New.xslt
  • Params.xml orijinal
  • Nouvo Params.xml

Nan ka mwen, li sanble ke sa:

imaj

Motifye pati entènèt la ak copie a params Et XSL pou a "orijinal" vèsyon pipiti de youn nan estidyo izyèl.

Objektif isit la, se pou koze a XSL transfòme rezilta nou tounen de la requête DVWP nan HTML renders kòm yon graf.

Pou sa a fini, li te ede pou premye konsidere sa HTML la ta dwe sanble anvan nou pran an boulvès/magregò pa erezon sa ke yo rekonèt tankou "XSL". (Pou yo, sa a se senpman yon egzanp; pa gwoup li ni kopi/mòtye nan estidyo izyèl. Mwen bay yon kou plen kòmanse pwen pou sa ta nan write-up a). Graf echantiyon sa an ki te rann as per HTML a imedyatman apwe:

Egzanp Bar graf

Korespondan HTML:

<html>
<kò>
<sant>
<tab lajè = 80%>
<tr><td><sant>Graf Bar orizontal</td></tr>
<tr>
<fè aliman td = "Centre">
<tab fontyè = "1" lajè = 80%>
<tr>
<lajè td = 10%>Louvri</td>
<td><tab cellpadding ="0" cellspacing ="0" fontyè = 0 lajè = 50%><tr bgcolor = wouj><td>&nbsp;</td></tr></tab></td>
</tr>
<tr>
<lajè td = 10%>Fèmen</td>
<td><tab cellpadding ="0" cellspacing ="0" fontyè = 0 lajè = 25%><tr bgcolor = wouj><td>&nbsp;</td></tr></tab></td>
</tr>
<tr>
<lajè td = 10%>Au</td>
<td><tab cellpadding ="0" cellspacing ="0" fontyè = 0 lajè = 25%><tr bgcolor = wouj><td>&nbsp;</td></tr></tab></td>
</tr>
</tab>
</td>
</tr>
</tab>
</kò>
</html>

Mwen te itilize yon apwòch mouri senp pou kreye anpeche m' pa mete jan nou koumanse koulè lot pou "wouj".

A take-away isit la se sa a: Nan fen, tou sa n' ap fè kreye HTML èskonbwit ak colonnes.

Modèle XSLT:

Mwen te gen copié XSLT sa génère yon graf kouche plat bar. Sa pa fè anyen nivo a se poutèt sa mwen pa p ajoute anpil isit la eksepte sa yo nòt:

  • Mwen te kòmanse avèk a defo XSL SharePoint Concepteur ban m' lè mwen te kreye premye a DVWP.
  • Mwen pa t ' kapab pou voye sa jete nan pati sosyal Demokratik la 657 liy yo pou 166 ranje.
  • M pa t fatra autour ak fichier XML paramètres (sa pa menm ak XSL a Et w ap konnen sa mwen vle di lè ou ale nan motifye DVWP tèt li; genyen de fichiers ou kapab motifye). Sepandan, pou senplifye li, Mwen te retire pwèske tout yo nan XSL a. Sa vle di ke si ou vle fè sèvi ak karakteristik sa, ou annik bezwen pou ajoute définitions varyasyon yo tounen pou XSL a. Sa ki ka fasil depi ou orijinal XSL varyasyon définitions nan pwojè izyèl estidyo ou.
  • Ou ta dwe kapab kopi e pat sa a tou dwat nan pwojè izyèl estidyo ou. apre, wete m' apèl yo ak mete pwòp apèl pou "ShowBar".
  • Sèvi ak machin tonbe nan fè sa pa kreye yon <yon href> konsa: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Teknik sa ka gen anpil valè contextes lòt. Nan premye, Mwen te panse mwen ta bezwen trèz pou yon fòma plis konplèks: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, Men, nan anviwonman mwen sa pa nesesè. Adrès entènèt lis la te fè pase pou nou SharePoint poutèt sa jan sa dwe fèt fasil pou généraliser.

Isit la se:

<xsl:stylesheet vèsyon pipiti de youn="1.0" exclure-rezilta-préfixes="rs z o s ddwrt dt msxsl" 
xmlns:msxsl="urn:kominote schémas microsoft:xslt" xmlns:xsl="http://www.w3.org/ 1999/XSL/transfòme"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:ou menm="urn:kominote schémas microsoft:biwo" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:rs="urn:kominote schémas microsoft:lignes" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:frontpage:ntèn"
> <xsl:pèsistans yap ogmante jiska metòd="html" retrait="Non" /> <xsl:desimal-fòma NaN="" /> <xsl:param fe-apel="ListUrlDir"></xsl:param> <!-- Mwen bezwen pou sipòte yon anba sèvi ak machin sa a. --> <xsl:modèle jwenn mèt ke l="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:varyab fe-apel="dvt_StyleName">Tab</xsl:varyab> <xsl:varyab fe-apel="Èskonbwit" fè chwa="/dsQueryResponse/èskonbwit/ligne" /> <xsl:varyab fe-apel="dvt_RowCount" fè chwa="konte($Èskonbwit)" /> <xsl:varyab fe-apel="IsEmpty" fè chwa="$dvt_RowCount = 0" /> <xsl:varyab fe-apel="dvt_IsEmpty" fè chwa="$dvt_RowCount = 0" /> <xsl:chwazi> <xsl:Kile tès="$dvt_IsEmpty"> Se pa done pou graf!<br/> </xsl:Kile> <xsl:san sa> <!-- Enteresan bagay la kòmanse isit la. Nou bezwen defini on variables pou chak ranje nan graf a: total kantite atik ak pousan de total. --> <xsl:varyab fe-apel="totalProposed" fè chwa="konte(/dsQueryResponse/èskonbwit/ligne[normaliser espas(@Status) = 'Te pwopoze'])" /> <xsl:varyab fe-apel="percentProposed" fè chwa="$totalProposed div $dvt_RowCount" /> <xsl:varyab fe-apel="totalInProcess" fè chwa="konte(/dsQueryResponse/èskonbwit/ligne[normaliser espas(@Status) = 'Nan pwosesis la])" /> <xsl:varyab fe-apel="percentInProcess" fè chwa="$totalInProcess div $dvt_RowCount" /> <xsl:varyab fe-apel="totalStalled" fè chwa="konte(/dsQueryResponse/èskonbwit/ligne[normaliser espas(@Status) = 'Reviv e enstale la'])" /> <xsl:varyab fe-apel="percentStalled" fè chwa="$totalStalled div $dvt_RowCount" /> <!-- Nou defini nou HTML tab la isit la. Mwen emprunt nan kèk estanda SharePoint estil isit la pou fè l' cohérente. Mwen panse ke li pwal lonè chanjman nan dokiman css mondyal an osi byen ke tèm Sur. --> <tab ajè="100%" cellspacing="0" cellpadding="2" mod="fontyè an ki dwat: 1 on jan #C0C0C0; bounda bough fontyè: 1 on jan #C0C0C0; mod fontyè a gòch: on jan; lajè fontyè a gòch: 1; mod fontyè an tèt: on jan; fontyè an tèt lajè: 1;"> <tr> <td fè aliman="sant"> <tab fontyè="1" ajè="100%"> <!-- Pou chak kondisyon sa nou vle trase graf, nou rele a "ShowBar" modèle. Nou pase li: 1. Yon etikèt pou dispit lan. Sa tounen tankou nan sal Lien yon. 2. Pousan an (varyab nan pi wo pase). 3. Reèl jaden non kòd nan lis de la. Sa a pa bezwen pou n konpare etikèt ki ekspozisyon. 4. Valè jaden correspondance pou #3. 5. Total de atik nan kòd estati sa a (pa a gran total de tout estati codes). Li mou yon <tr></tr> ak liy orizontal bar graf. Nou rele modèle sa a pou chak estati kòd nou vle wè. --> <xsl:apèl-modèle fe-apel="ShowBar"> <xsl:ak-param fe-apel="BarDisplayLabel" fè chwa="'Te pwopoze'"/> <xsl:ak-param fe-apel="BarPercent" fè chwa="$percentProposed"/> <xsl:ak-param fe-apel="QueryFilterFieldName" fè chwa="'Estati'"/> <xsl:ak-param fe-apel="QueryFilterFieldValue" fè chwa="'Te pwopoze'"/> <xsl:ak-param fe-apel="TotalItems" fè chwa="$totalProposed"></xsl:ak-param> </xsl:apèl-modèle> <xsl:apèl-modèle fe-apel="ShowBar"> <xsl:ak-param fe-apel="BarDisplayLabel" fè chwa="'Reviv e enstale la'"/> <xsl:ak-param fe-apel="BarPercent" fè chwa="$percentStalled"/> <xsl:ak-param fe-apel="QueryFilterFieldName" fè chwa="'Estati'"/> <xsl:ak-param fe-apel="QueryFilterFieldValue" fè chwa="'Reviv e enstale la'"/> <xsl:ak-param fe-apel="TotalItems" fè chwa="$totalStalled"></xsl:ak-param> </xsl:apèl-modèle> <xsl:apèl-modèle fe-apel="ShowBar"> <xsl:ak-param fe-apel="BarDisplayLabel" fè chwa="'Nan pwosesis la"/> <xsl:ak-param fe-apel="BarPercent" fè chwa="$percentInProcess"/> <xsl:ak-param fe-apel="QueryFilterFieldName" fè chwa="'Estati'"/> <xsl:ak-param fe-apel="QueryFilterFieldValue" fè chwa="'Nan pwosesis la"/> <xsl:ak-param fe-apel="TotalItems" fè chwa="$totalInProcess"></xsl:ak-param> </xsl:apèl-modèle> </tab> </td> </tr> </tab> </xsl:san sa> </xsl:chwazi> </xsl:modèle> <!-- Modèle sa a fè tou sa montre liy endividyèl yo nan graf bar a. Nou pwal pwobableman fè pifò nan ou réglages isit la. --> <xsl:modèle fe-apel="ShowBar"> <xsl:param fe-apel="BarDisplayLabel" /> <!-- etikèt ki pou montre --> <xsl:param fe-apel="BarPercent"/> <!-- Pousan de total. --> <xsl:param fe-apel="QueryFilterFieldName"/> <!-- Te itilize pou depeche ou la requête & oule --> <xsl:param fe-apel="QueryFilterFieldValue"/> <!-- Te itilize pou depeche ou la requête & oule --> <xsl:param fe-apel="TotalItems" /> <!-- total de konte barlabel sa a --> <tr> <!-- Kafe a make tèt li. --> <td klas="madanm-formbody" ajè="30%"> <!-- Sa kap vini ansanm nan deklarasyon yo baze yon kòd requête ki pèmèt nou sèvi ak machin sou yon vi filtrage de data. Fè nou sèvi ak kèk bagay isit la: 1. Nou kapab pase FilterField1 ak FilterValue1 pou yon lis pou koule sou yon kolòn. 2. SharePoint pase yon kle paramètre pou nou, ListUrlDir ki pwen yo pou de lis kont ki DVWP sa a "kouri". Se pat XSL amizan? --> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"> <![CDATA[<yon href ="]]></xsl:tèks> <xsl:valè-de fè chwa="$ListUrlDir"/> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"><![CDATA[?FilterField1 =]]></xsl:tèks> <xsl:valè-de fè chwa="$QueryFilterFieldName"/> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"><![CDATA[&FilterValue1 =]]></xsl:tèks> <xsl:valè-de fè chwa="$QueryFilterFieldValue"/> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"><![CDATA[">]]></xsl:tèks> <xsl:valè-de fè chwa="$BarDisplayLabel"/> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"><![CDATA[</yon>]]></xsl:tèks> <!-- Pwochen moso montre ke anpil moun kèk nan fòma a: "(total / % total a)" --> (<xsl:valè-de fè chwa="$TotalItems"/> / <!-- Sa kreye yon bon etikèt pousan pou nou. Mèsi, Microsoft! --> <xsl:apèl-modèle fe-apel="percentformat"> <xsl:ak-param fe-apel="pousan" fè chwa="$BarPercent"/> </xsl:apèl-modèle>) </td> <!-- A la fen, fè sikile yon <td> etikèt kafe a pou tèt li.--> <td> <tab cellpadding="0" cellspacing="0" fontyè="0" ajè="{bò kote($BarPercent * 100)+1}%"> <tr bgcolor="Rouj"> <xsl:tèks rann enfim-pèsistans yap ogmante jiska-ke="Wi"><![CDATA[&nbsp;]]></xsl:tèks> </tr> </tab> </td> </tr> </xsl:modèle> <!-- Sa ap pran ki soti dirèkteman nan kèk XSL mwen te jwenn nan yon Madanm modèle. --> <xsl:modèle fe-apel="percentformat"> <xsl:param fe-apel="pousan"/> <xsl:chwazi> <xsl:Kile tès="fòma-nombre($pousan, '#,##0%;-#,##0%')= 'NaN'">0%</xsl:Kile> <xsl:san sa> <xsl:valè-de fè chwa="fòma-nombre($pousan, '#,##0%;-#,##0%')" /> </xsl:san sa> </xsl:chwazi> </xsl:modèle> </xsl:stylesheet>

Rezilta:

A XSL de pi wo pase génère graf sa a:

imaj

Sèvi ak machin sou de data klike sou kòd estati a:

imaj

Conclusion lide:

Ka sa Être Générale?

Mwen renmen sa a graphiques konsèp, Men, mwen rayi Lefèt ke mwen gen pou ale, fè anpil men-codage. Mwen te gen vin sove yon ti pou konnen si li kapab fè généralisée ak mwen menm optimis, Men, mwen menm tou yon ti kras pèrèz ke ka gen yon mi an blòk lòt kote nan chemen sa yo ki pa vle ofwi okenn travay ki alantou. Si yon moun gen bon lide sou sa, Tanpri fè yon nòt nan kòmantè yo ou e-mail m.

Graphiques vètikal:

Sa se yon graf kouche plat bar. Sa se sètènman posib pou kreye yon graf vètikal. Nou sèlman bezwen chanje HTML a. Mwen pwal kòmanse a menm jan an tou: Kreye yon reprezantasyon HTML yon graf vètikal bar, lè sa a evalye kijan pou li ale sa via XSL. Si nenpòt moun ta enterese nan sa, Mwen te kapab convaincu kou l' yo ak travay sou kinks yo. Si yon moun te deja fè sa, tanpri kite m 'konnen epi mwen pral kè kontan ap mennen nan blog ou a 🙂

Mwen panse ke defi ak yon graf vètikal se étiquettes yo pou graf a sont pi difisil pou yo jere, Men, wè pa wè pa enposib.

Jaden non Gotcha:

Genyen anviwon de sa ki gen pou chèche pou ak non jaden ou.

Premye, yon non jaden ak yon espas ki bay pou sove nan XSL a. Sa pwal pwobableman vinn yon zafè isit la:

        <xsl:varyab fe-apel="totalProposed" 
fè chwa="konte(/dsQueryResponse/èskonbwit/ligne[normaliser espas(@Status) = 'Te pwopoze'])" />

Si ou "estati" Kolòn aktyèlman rele "stati kòd" Lè sa a ou bezwen référence li kòm "Status_x0020_Code":

   <xsl:varyab fe-apel="totalProposed" 
fè chwa="konte(/dsQueryResponse/èskonbwit/ligne[normaliser espas(@Status_x0020_Code) = 'Te pwopoze'])" />

Dezyèm, mwen se yon ti kras floue sou sa, Men, ou tou bezwen an alèt pou chanjman non jaden. Si ou non jaden nou, "estati kòd" Et puis plus sou, bay yon lòt non l' pou "AFE estati", "entèn non" pa chanje. A entèn toujou y' a rele "stati kòd" e se pou référencé kòm "Status_x0020_Code". "Lòt resous" lyen ka ede onde Et korije sa a jan de pwoblèm.

Osijè de sa koulè:

Mwen pran "wouj" Paske, Bondye vle pou m' nan moman. Li pa ta yon gwo kontra pou montre diferan koulè ki te ekri nan liv bay plis ke senpleman yon izyèl dekri teren anpil, Men, pou yon bon) ke bay tou. Pa ekzanp, Si pousantaj "a" AFE a se > 10% Lè sa a montre l' wouj, san sa montre li an nwa. Sèvi ak <xsl:chwazi> pou reyalize sa.

Lòt resous yo:

Benediksyon pou transformation!

<fin />

Vous pou m' blog!

La done OM Via yon lis Personnalisé (ou, Encore yon lòt OM done Displayor [tankou YACC, Men diferan])

Jodia, Mwen te pase se yon ti ponyen zèd tan pou desann fè rasin dèyè mesaj "a kolòn non sa ou te antre nan se deja nan itilize oubyen rezève. Chwazi yon lòt non."

Kolòn a nan yon kesyon te kapab kreye, supprimé Et re-te kreye nan yon lòt anviwònman, Se poutèt sa mwen te konnen se pa yon non rezève. Sepandan, Mwen tou senpleman pa t kapab jwenn kolòn a nenpòt kote via la estanda SharePoint utilisateur entèfas nenpòt nan koleksyon direksyon an.

Mwen te poste pou MSDN foròm isit la Et la indomitable Andrew Woodward a m' nan direksyon de objet modèl data.

Mwen t' ap pou codeplex pou jwenn yon zouti sa ta ka ede m' yo gen priyorite nan de done OM Et ede m jwenn à la.

Mwen te eseye plizyè zouti e yo te trè frais Et enteresan men nan tou sa li, UI a pa t bon ase pou m' te vle. Mwen menm ki pa kritike yo pa gen mwayen, Men, clairement konnen si yon moun ki konn fè pa t gen pwoblèm mwen chonje lè yo te kreye UI yo :). Pifò moun sanble ap envèsti yon bèl kantite tan ak efò nan kreye workstation / kliyan an aplikasyon ki bay pyebwa pwen de vi, le kontèks menus, se konsa suite. Sa ki bon ak tout, Men, se yon bann travay pou kreye yon eksperyans kap itilize li an sou tèt-de-a-liy se tou anpil likid.

Mwen vrèman bezwen pou yon repons pou pwoblèm sa a. Li te pase pou m' sa si m te kapab jwenn tout les colonnes kote ki gen nan kote ki gen koleksyon an nan yon lis personnalisé, Mwen te kapab filtre, tri Et kreye pwen de vi, ki ta ka ede m jwenn kolòn sipozeman ki ekziste sa a (sa li te fè, AK). Mwen ale devan ou, yo fè sa yo ak yon inèdtan oswa de pi ta, te gen tout m' kote ki gen colonnes chaje nan yon lis personnalisé ak pwesyonen, tri ak tout suite. Mwen te twouve mwen defann tèt mwen senk minit pita.

Si, lè mwen anpil siksè pran sou mond lan, Mwen panse mwen pral décret ke tout SharePoint zouti bayè dwe seryezman konsidere Lamanten done modèl bagay yo nan yon lis koutim. Konsa, Mwen gen pouvwa pou fè rechèch tout chemen mwen vle (contraintes, Men wi, pa nivo sharepoint fonctionnalités).