Kategorija Arhiva: SharePoint razvoj

Čuvajte Breaking Promjene ItemStyle.xsl

Radila sam s ItemStyle.xsl prilagoditi izgled web-dio za pretraživanje sadržaja i pravo o vrijeme ručka, I made a breaking change to the xsl. I didn’t realize it, but this had far reaching effects throughout the site collection. I went off to lunch and upon my return, primijetio ovu poruku pojavljuje u hrpi mjesta:

Nije moguće prikazati taj web-dio. Da biste riješili problem, otvoriti ovu web-stranicu u programu Windows SharePoint Services kompatibilnom HTML editor kao što je Microsoft Office SharePoint Designer. Ako problem ne nestane, obratite se administratoru poslužitelja web.

Ja okrivio klijenta (ne shvaćajući još da je to moja krivnja u ovom trenutku) but eventually noticed that visual studio intellisense was warning me that I had malformed XSL. I corrected it and everything started working.

Budite oprezni darned prilikom rada s ItemStyle.xsl (i bilo koji od svjetskih XSL datoteke) — im nego što utječe na mnoge predmete u zbirci web-mjesta.

<kraj />

Prikaz sadržaja rezultate upita web-dijela u mreži / Stol

Pregled i cilj

Out of the box, MOSS’ Upit Sadržaj web-dio (CQWP) prikazuje svoje rezultate u obliku popisa, similar to search results. It is also possible to display the results in a grid format (i.e. HTML obliku tablice). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.

Poslovni Scenarij

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, poput naslova, budžet, Očekuje se datum završetka, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, to izgleda ovako:

slika

Tehnički pristup je isti kao što je opisano ovdje (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:

slika

HTML kao što to stvara taj rezultat:

<html>
 <tijelo>
 <centar>
 <stol granica= 1>

<!-- Etikete ->
 <tr bgcolor= Blue>
 <td><su boja= Bijeli><b>Naziv projekta</b></su></td>
 <td svrstati= Desno><su boja= Bijeli><b>Cijela Datum</b></su></td>
 <td svrstati= Desno><su boja= Bijeli><b>Budžet</b></su></td>
 <td svrstati= Desno><su boja= Bijeli><b>Stvarni rashodi</b></su></td>
 <td><su boja= Bijeli><b>Cjelokupna Status</b></su></td>
 </tr>

<tr>
 <td>Re-wire računalo soba.</td>
 <td svrstati= Desno>02/01/08</td>
 <td svrstati= Desno>22,500.00</td>
 <td svrstati= Desno>19,000.00</td>
 <td>U tijeku</td>
 </tr>

<tr>
 <td>Pružanje poslužitelji za SQL Upgrade</td>
 <td svrstati= Desno>04/01/08</td>
 <td svrstati= Desno>7,500.00</td>
 <td svrstati= Desno>0.00</td>
 <td>Planiran</td>
 </tr>

</stol>
 </centar>
 </tijelo>
</html>

Pristup

Slijedite ove korake kako bi stvorili mrežu:

  1. Identificirajte komponente mreže (redaka / stupaca).
  2. Definirati i izraditi potrebne stupce stranice.
  3. Napravite pod-stranice za projekte i jednoplodnih listama.
  4. Dodaj u CQWP na web stranici i konfigurirati ga potražiti na popisima.
  5. Izmjena CQWP je XML skupiti dodatne stupce.
  6. Izmjena XSL generirati tablicu.

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 ovdje (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) Heather i Salomon blog ovdje (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Matice i vijci

Počnite i provesti korake od jedan do pet po MSDN dokumentacije i Heather Solomona članak.

U ovom trenutku, ste dodali svoj CQWP na stranici i imate <CommonViewFields> konfigurirati prema potrebi.

Nakon uobičajene korake, Ja se ove prijelazne rezultate:

1. Stvaranje vrste sadržaja, a templatized custom list for that content type and two sites. Here is the content type:

slika

Ovdje je site struktura:

slika

2. Dodajte CQWP nakon stvaranja podmjesta moj projekt i Singleton sažetak projekta popise:

slika

3. Dodajte sve dodatne informacije putem želim <CommonViewFields>:

        <svojstvo ime="CommonViewFields" tip="niz">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</svojstvo>

Imajte na umu da sam morao zadržati sve imovinsko polja u jednom retku ili neće raditi (CQWP će mi reći da je upit vratio artikala).

4. U ovom trenutku, 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 stvoriti prilagođeno / unghosted version of ItemStyle.xsl. I follow Heather’s advice, se kroz korak 11 i dobiti ove prijelazne rezultate:

4.1: Ime mi je XSL predložak kako slijedi:

<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">

Također sam nešto mijenjati joj predložili <XSL:za-svakog …> dodavanjem <br /> označiti osigurati čišći oglas:

    <XSL:za-svakog odabrati="@ *">
      P:<XSL:vrijednost od odabrati="ime()" /><br/>
    </XSL:za-svakog>

4.2: Ja izmijeniti dio web, go to appearance and select my "Grid" stil:

slika

Primijenite promjenu, a ovdje je rezultat:

slika

Možemo vidjeti iz gore da polja želimo (Ime projekta, rashod, status, itd.) 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. Na primjer, we reference Project Status as "Project_x005F_x0020_Name".

U ovom trenutku, krećemo iz Heather blog i na ramenima tih divova, Dodam svoje malo.

ContentQueryMain.xsl

NAPOMENA: Prilikom promjene na obje ContentQueryMain.xsl kao ItemStyle.xsl, trebate provjeriti te datoteke vratiti prije nego što vidjeti učinak vaših promjena.

Za grid odluka svrhe, 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 <stol> tag prije emitiranjem prvi redak podataka i zatvaranja <stol> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" Predložak u ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.

Koristeći tehniku ​​Heather Salamonovo, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:

slika

Moramo napraviti sljedeće promjene:

  • Izmjena XSL predložak, "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 <stol> tags.
  • Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" parametar, tako da LastRow može se prenijeti na naše Grid predložak.

Locate the template named "OuterTemplate.CallItemTemplate" prepoznaje se po nizu:

  <XSL:predložak ime="OuterTemplate.CallItemTemplate">

Vratite cijeli predloška kako slijedi:

  <XSL:predložak ime="OuterTemplate.CallItemTemplate">
    <XSL:zaustaviti ime="CurPosition" />

    <!--
      Add the "LastRow" parametar.
      We only use it when the item style pass in is "Grid".
    -->
    <XSL:zaustaviti ime="LastRow" />

    <XSL:izabrati>
      <XSL:kada test="@ Style = 'NewsRollUpItem'">
        <XSL:primjenjuju-predloške odabrati="." način="itemstyle">
          <XSL:s param- ime="Modus" odabrati="$cbq_iseditmode" />
        </XSL:primjenjuju-predloške>
      </XSL:kada>
      <XSL:kada test="@ Style = 'NewsBigItem'">
        <XSL:primjenjuju-predloške odabrati="." način="itemstyle">
          <XSL:s param- ime="CurPos" odabrati="$CurPosition" />
        </XSL:primjenjuju-predloške>
      </XSL:kada>
      <XSL:kada test="@ Style = 'NewsCategoryItem'">
        <XSL:primjenjuju-predloške odabrati="." način="itemstyle">
          <XSL:s param- ime="CurPos" odabrati="$CurPosition" />
        </XSL:primjenjuju-predloške>
      </XSL:kada>

      <!--
              Pass trenutnu poziciju i lastrow na predlošku Grid itemstyle.xsl.
              ItemStyle.xsl će koristiti da se emitiraju otvorena i zatvaranje <stol> tags.
      -->
      <XSL:kada test="@ Style = "Grid"">
        <XSL:primjenjuju-predloške odabrati="." način="itemstyle">
          <XSL:s param- ime="CurPos" odabrati="$CurPosition" />
          <XSL:s param- ime="Zadnji" odabrati="$LastRow" />
        </XSL:primjenjuju-predloške>
      </XSL:kada>

      <XSL:inače>
        <XSL:primjenjuju-predloške odabrati="." način="itemstyle">
        </XSL:primjenjuju-predloške>
      </XSL:inače>
    </XSL:izabrati>
  </XSL:predložak>

Komentari opisati svrhu promjene.

Naravno, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:

<XSL:predložak ime="OuterTemplate.Body">

Prođite kroz upute u OuterTemplate.Body i ubacite LastRow parametar na sljedeći (prikazano kao komentar u kurzivu):

<XSL:poziv-predložak ime="OuterTemplate.CallItemTemplate">
  <XSL:s param- ime="CurPosition" odabrati="$CurPosition" />
  <!-- Umetnite LastRow parametar. -->
  <XSL:s param- ime="LastRow" odabrati="$LastRow"/>
</XSL:poziv-predložak>

Nakon svega ovoga, konačno smo postavili stvari ispravno, tako da je naša ItemStyle.xsl može emitirati <stol> oznake na pravom mjestu.

ItemStyle.Xsl

NAPOMENA: Opet, prijava ItemStyle.xsl nakon donošenja bilo kakve promjene, tako da možete vidjeti učinak tih promjena.

Imamo dva zadatka ovdje:

  • 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. (Možete reći da imam slab ručku na XSL).

Prvi, pri vrhu ItemStyle.xsl, dodajte ovu liniju:

  <!-- Neki mumbo jumbo koja nam omogućuje da se prikazati dopuštenje vlade. valuta. -->
  <XSL:decimal-format ime="osoblje" cifra="D" />

  <XSL:predložak ime="Default" odgovarati="*" način="itemstyle">

Imajte na umu da sam ga dodao je neposredno pred <XSL:template name="Default" …> definicija.

Sljedeći, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, , ali nemojte se ustručavati da me e-mail ili ostavite komentare na mom blogu, ako imate pitanja.

  <XSL:predložak ime="Rešetka" odgovarati="Red[@ Style = "Grid"]" način="itemstyle">

    <!--
      ContentMain.xsl prolazi CurPos i Zadnja.
      Mi koristiti za uvjetno emitiraju otvorena i zatvaranje <stol> tags.
    -->
    <XSL:zaustaviti ime="CurPos" />
    <XSL:zaustaviti ime="Zadnji" />

    <!-- Sljedeće varijable su neizmijenjeni od standardnog ItemStyle.xsl -->
    <XSL:varijabla ime="SafeImageUrl">
      <XSL:poziv-predložak ime="OuterTemplate.GetSafeStaticUrl">
        <XSL:s param- ime="UrlColumnName" odabrati="'ImageUrl'"/>
      </XSL:poziv-predložak>
    </XSL:varijabla>
    <XSL:varijabla ime="SafeLinkUrl">
      <XSL:poziv-predložak ime="OuterTemplate.GetSafeLink">
        <XSL:s param- ime="UrlColumnName" odabrati="'LinkUrl'"/>
      </XSL:poziv-predložak>
    </XSL:varijabla>
    <XSL:varijabla ime="DisplayTitle">
      <XSL:poziv-predložak ime="OuterTemplate.GetTitle">
        <XSL:s param- ime="Naslov" odabrati="@ Naslov"/>
        <XSL:s param- ime="UrlColumnName" odabrati="'LinkUrl'"/>
      </XSL:poziv-predložak>
    </XSL:varijabla>
    <XSL:varijabla ime="LinkTarget">
      <XSL:ako test="@ OpenInNewWindow = 'True'" >_blank</XSL:ako>
    </XSL:varijabla>

    <!--
      Ovdje smo definirali varijablu, "tableStart".  Sadrži HTML
      .  Imajte na umu da ako CurPos = 1, to uključuje i HTML u cdata oznaku.
      Inače, to će biti prazna.

      Vrijednost tableStart je emited svaki put ItemStyle se zove putem
      .
    -->
    <XSL:varijabla ime="tableStart">
      <XSL:ako test="$CurPos = 1">
        <![CDATA[
        <Tablica border = 1>
          <tr bgcolor="blue">
            <td><font color="white"><b>Naziv projekta</b></su></td>
            <td align="right"><font color="white"><b>Cijela Datum</b></su></td>
            <td align="right"><font color="white"><b>Budžet</b></su></td>
            <td align="right"><font color="white"><b>Stvarni rashodi</b></su></td>
            <td><font color="white"><b>Cjelokupna Status</b></su></td>
          </tr>
        ]]>
      </XSL:ako>
    </XSL:varijabla>

    <!--
      Druga varijabla, tableEnd jednostavno definira oznaku zatvaranja stol.

      Kao i kod tableStart, uvijek je emited.  To je razlog zašto je njegova vrijednost
      .
    -->
    <XSL:varijabla ime="tableEnd">
      <XSL:ako test="$CURPOS = $ Zadnji">
        <![CDATA[ </stol> ]]>
      </XSL:ako>
    </XSL:varijabla>

    <!--
      Uvijek emitiraju sadržaj tableStart.  Ako to nije prvi
      , onda znamo svoju vrijednost
      .

      Bez izlaz bježi jer kad tableStart nije prazan, to
      .  Ako
      , it will generate
      stuff like "&Bilo;stol&gt;" instead of "<stol>".
    -->
    <XSL:vrijednost od odabrati="$tableStart" disable-output-bijegu="da"/>


    <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:vrijednost od odabrati="@ Project_x005F_x0020_Name"/>
      </td>

      <td svrstati="pravo">
        <XSL:vrijednost od odabrati="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
      </td>

      <td svrstati="pravo">
        <XSL:poziv-predložak ime="formatCurrency">
          <XSL:s param- ime="vrijednost" 
odabrati="@ Project_x005F_x0020_Budget"></XSL:s param-> </XSL:poziv-predložak> </td> <td svrstati="pravo"> <XSL:poziv-predložak ime="formatCurrency"> <XSL:s param- ime="vrijednost" odabrati="@ Project_x005F_x0020_Expenses">
</XSL:s param-> </XSL:poziv-predložak> </td> <td> <XSL:vrijednost od odabrati="@ Project_x005F_x0020_Status"/> </td> <!-- Sve od navedenog je komentirao kako bi pojasniti stvari. Međutim, ga vratiti i stvari u <td> vidjeti njegovu         . --> <!-- <div id="linkitem" class="item"> <XSL:if test="string-length($SafeImageUrl) != 0"> <div class="image-area-left"> <a href="{$SafeLinkUrl}" target="{$LinkTarget}"> <img class="image-fixed-width" src="{$SafeImageUrl}"
alt="{@ ImageUrlAltText}"/> </a> </div> </XSL:ako> <div class="link-item"> <XSL:poziv-predložak
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href="{$SafeLinkUrl}"
target="{$LinkTarget}" title="{@ LinkToolTip}"> <XSL:value-of select="$DisplayTitle"/> </a> <div class="description"> <XSL:value-of select="@Description" /> </div> </div> </div>
--> </tr> <!-- Šalji oznaku tablice zatvaranja. Ako nismo u zadnjem redu, to će biti prazan. --> <XSL:vrijednost od odabrati="$tableEnd" disable-output-bijegu="da"/> </XSL:predložak> <XSL:predložak ime="formatCurrency"> <XSL:zaustaviti ime="vrijednost" odabrati="0" /> <XSL:vrijednost od odabrati='Oblik-broj($vrijednost, "$DDD,DDD,DDD.DD", "staff")' /> </XSL:predložak>

Standardni WSS / MOSS podataka Zasloni Entry ne podržavaju prelijevaju Drop-padovi (ili druge unutar iz komunikacije)

UPDATE (04/2008): Ovaj veliki blog entry pokazuje dobru javascript pristup temeljen na taj problem: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

UPDATE II: (04/2008): Ovaj blog ulaz izgleda obećavajuće kao i: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Nekoliko puta tjedno, ako ne i svakodnevno, forum users describe a requirement that would normally be met via cascading drop-downs. Na primjer, Imam dvije kap-dolje kontrole:

  • Popis SAD-a. države
  • Popis SAD-a. gradova.

Kao odgovorne UI usluga, želimo da djeluju poput ove:

  • Paul bira dopuštenje vlade. state from the drop-down.
  • This causes the cities drop-down to filter only those cities that belong to the selected state.
  • Pavao odabire grad iz ovog izdvojenog popisa.

There is no out-of-the-box support for this feature. Zapravo, there is no OOB support for any kind of direct intra-form communication. This includes programmatically hiding/enabling/disabling fields in response to field changes elsewhere on the form.

Pravi cilj ovog članka je opisati moguća rješenja, a to su opcije kao što sam ih znali:

  1. Develop a custom column type. As a custom-column-developer, you have full control over the "world" of that custom column. You can implement a cascading drop-down that way.
  2. Consider using workflow. In some cases, you want to automatically assign a value to field based on another field’s value. U tom slučaju, inače bi pokušati koristiti izračunatog stupca, ali neki puta, it just won’t get the job done. SharePoint Designer workflow is a relatively administer-friendly alternative to dropping down into code and visual studio. If you go this route, biti svjesni tog problema obratili ovaj članak (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Događaj rukuju: Kao i tijekom rada, this is an after-the-fact solution. Your event handler is a .NET assembly (C #, VB.NET) to which SharePoint passes control. The object you develop has access to the data of the list (, a cijeli objekt Model) i može učiniti bilo potrebno izračun.
  4. Use SharePoint Designer to create custom entry forms. I don’t have direct experience with this approach, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Roll svoj ASP.NET podataka funkciju unosa (kao stand-alone web stranicu ili kao web-dio) i koristiti da umjesto.

Ako netko zna druge i / ili bolja opcija, molimo Vas da objavite komentar, a ja ću ažurirati tijelo ovog posta.

<kraj />

Technorati Tags:

Napravite Bar Grafovi u SharePoint

Pregled:

(UPDATE 12/04/07: Dodao još jedan zanimljiv resurs na kraju povezuje s drugom blogu koji se bavi to putem vrlo zanimljivog web-dijela)

This blog entry describes how to create a bar graph in SharePoint. This works in both WSS and MOSS environments as it only depends upon the data view web part.

Ukupna pristup je sljedeći:

  1. Napravite popis ili biblioteku dokumenata koja sadrži podatke koje želite graf.
  2. Postavite pridružene knjižnicu dokument / prilagođeni popis na stranicu i pretvoriti ga u web podataka pogled dijelu (DVWP).
  3. Izmjena DVWP je XSL za generiranje HTML-a na kojima se vidi kao graf.

Poslovni Scenarij / Postava:

Ja sam stvorio prilagođeni popis sa standardnim Naslov stupca i jednu dodatnu kolonu, "Status". This models (Vrlo pojednostavljeno) an "Authorization For Expense" Scenarij u kojem naslov predstavlja projekt i status vrijednost s popisa:

  • Predloženi
  • U procesu
  • Zastoju

Cilj je proizvesti interaktivni šipkom graf koji pokazuje ta oznaka stanja.

Ja sam naseljena popisa i to izgleda ovako:

slika

Stvaranje podataka za web-dio Pogled:

Napravite DVWP dodavanjem prilagođeni popis na stranici (stranica stranica u mom slučaju) i slijedite upute ovdje (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Uz jednostavno stvaranje DVWP, we also need to set the paging property to show all available rows. Za mene je, to izgleda ovako:

slika

U ovom trenutku, I always close SPD and the browser. I then re-open the page using the browser. This avoids accidentally mucking up the web part layout on the page.

Izmjena XSLT:

Sada je vrijeme za izmjenu XSLT.

I always use visual studio for this. (Vidjeti ovdje za važnu napomenu o INTELLISENSE koji će vam pomoći puno).

I stvoriti prazna projekt dodati četiri nove datoteke (replacing the words "Original" and "New" po potrebi):

  • Original.xslt
  • New.xslt
  • Izvorni Params.xml
  • Novi Params.xml

U mom slučaju, to izgleda ovako:

slika

Modify the web part and copy the params and XSL to the "Original" Verzija u Visual Studio.

Cilj je da se ovdje izazvati XSL transformirati rezultate smo dobili natrag od DVWP upita u HTML-a koji čini kao graf.

U tom cilju, it helps to first consider what the HTML should look like before we get confused by the insanity that is known as "XSL". (Da bude jasno, Sljedeći je samo primjer; don’t type it or copy/paste into visual studio. I provide a full blow starting point for that later in the write-up). The following sample graph is rendered as per the HTML immediately following:

Uzorak histogram

Odgovarajući HTML:

<html>
<tijelo>
<centar>
<širina tablice = 80%>
<tr><td><centar>Vodoravna traka Grafikon</td></tr>
<tr>
<td align="center">
<table border="1" Širina = 80%>
<tr>
<td width = 10%>Otvoreno</td>
<td><Tablica cellpadding ="0" cellspacing ="0" border = 0 width = 50%><tr bgcolor = crvena><td>&nbsp;</td></tr></stol></td>
</tr>
<tr>
<td width = 10%>Zatvoreno</td>
<td><Tablica cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = crvena><td>&nbsp;</td></tr></stol></td>
</tr>
<tr>
<td width = 10%>Zastoju</td>
<td><Tablica cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = crvena><td>&nbsp;</td></tr></stol></td>
</tr>
</stol>
</td>
</tr>
</stol>
</tijelo>
</html>

I used a dead simple approach to creating my bars by setting the background color of a row to "red".

Take-away ovdje je to: Na kraju, Svi mi radimo je stvaranje HTML s redaka i stupaca.

Predložak XSLT:

I’ve copied the XSLT that generates a horizontal bar graph. It’s fairly well commented so I won’t add much here except for these notes:

  • Počeo sam sa zadanim XSL koji SharePoint Designer mi dao kad sam prvi put stvorio DVWP.
  • Bio sam u mogućnosti smanjiti ovaj dolje od SPD-a 657 linije za 166 lines.
  • Nisam zabrljati okolo sa spisom parametara XML (koji je odvojen od XSL i znat ćete što mislim kad idete mijenjati DVWP sama; postoje dvije datoteke možete izmijeniti). Međutim, kako bi se pojednostaviti, I did remove nearly all of them from the XSL. This means that if you want to make use of those parameters, you just need to add their variable definitions back to the XSL. That will be easy since you will have the original XSL variable definitions in your visual studio project.
  • You ought to be able to copy and paste this directly into your visual studio project. Tada, remove my calls and insert your own calls to "ShowBar".
  • Spustite se radi stvaranjem <href> ovako: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. This technique may be of value in other contexts. Na početku, Mislila sam da ću morati odgovarati na složenije formatu: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, but in my environment that is not necessary. The List’s URL is passed to us by SharePoint so this is quite easy to generalize.

Ovdje je:

<XSL:stilovima verzija="1.0" uključuju-rezultat-prefiksi="RS z oa je ddwrt DT msxsl" 
xmlns:msxsl="urna:sheme-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/1999/XSL/Transform"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:trepetljika="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="urna:sheme-microsoft-com:ured" xmlns:s="UUID:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:DT="UUID:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urna:sheme-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urna:Naslovnica:interni"
> <XSL:izlaz način="html" uvući="ne" /> <XSL:decimal-format NaN="" /> <XSL:zaustaviti ime="ListUrlDir"></XSL:zaustaviti> <!-- Ovo bi podržao drill-down. --> <XSL:predložak odgovarati="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:trepetljika="http://schemas.microsoft.com/ASPNET/20"
> <XSL:varijabla ime="dvt_StyleName">Stol</XSL:varijabla> <XSL:varijabla ime="Redovi" odabrati="/dsQueryResponse / Redovi / Row" /> <XSL:varijabla ime="dvt_RowCount" odabrati="brojati($Redovi)" /> <XSL:varijabla ime="IsEmpty" odabrati="$dvt_RowCount = 0" /> <XSL:varijabla ime="dvt_IsEmpty" odabrati="$dvt_RowCount = 0" /> <XSL:izabrati> <XSL:kada test="$dvt_IsEmpty"> Nema podataka u grafikonu!<br/> </XSL:kada> <XSL:inače> <!-- Interesantno počinje ovdje. Moramo definirati par varijabli za svaki red u grafu: ukupan broj           . --> <XSL:varijabla ime="totalProposed" odabrati="brojati(/dsQueryResponse / Redovi / Row[normalizirati-prostor(@ Status) = 'Prijedlog'])" /> <XSL:varijabla ime="percentProposed" odabrati="$totalProposed div $ dvt_RowCount" /> <XSL:varijabla ime="totalInProcess" odabrati="brojati(/dsQueryResponse / Redovi / Row[normalizirati-prostor(@ Status) = 'U procesu'])" /> <XSL:varijabla ime="percentInProcess" odabrati="$totalInProcess div $ dvt_RowCount" /> <XSL:varijabla ime="totalStalled" odabrati="brojati(/dsQueryResponse / Redovi / Row[normalizirati-prostor(@ Status) = "Zastoju"])" /> <XSL:varijabla ime="percentStalled" odabrati="$totalStalled div $ dvt_RowCount" /> <!-- Mi smo definirali naše HTML tablicu ovdje. Ja sam posudio iz neke standardne           . Mislim da će čast           . --> <stol širina="100%" cellspacing="0" cellpadding="2" stil="border-right: 1 solid # C0C0C0; border-bottom: 1 solid # C0C0C0; border-lijevo-stilu: solidan; border-lijevo-širina: 1; border-top-style: solidan; border-top-širina: 1;"> <tr> <td svrstati="centar"> <stol granica="1" širina="100%"> <!-- Za svako stanje koje želimo graf, we call the "ShowBar" predložak. Mi ga proći: 1. Oznaka za redom. Ovo se pretvara u hiperveze. 2. Posto (razlikuju od gore). 3. Stvarni Polje naziv koda od osnovne liste. Ovo                      . 4. Vrijednost polja odgovara za #3. 5. Ukupno stavke tog statusa koda (Ne ukupni iznos svih                      ). Ona emitira <tr></tr> i vodoravna traka Grafikon linije. Mi to nazivamo predložak za svaki status kod želimo vidjeti. --> <XSL:poziv-predložak ime="ShowBar"> <XSL:s param- ime="BarDisplayLabel" odabrati="'Prijedlog'"/> <XSL:s param- ime="BarPercent" odabrati="$percentProposed"/> <XSL:s param- ime="QueryFilterFieldName" odabrati="'Status'"/> <XSL:s param- ime="QueryFilterFieldValue" odabrati="'Prijedlog'"/> <XSL:s param- ime="TotalItems" odabrati="$totalProposed"></XSL:s param-> </XSL:poziv-predložak> <XSL:poziv-predložak ime="ShowBar"> <XSL:s param- ime="BarDisplayLabel" odabrati=""Zastoju""/> <XSL:s param- ime="BarPercent" odabrati="$percentStalled"/> <XSL:s param- ime="QueryFilterFieldName" odabrati="'Status'"/> <XSL:s param- ime="QueryFilterFieldValue" odabrati=""Zastoju""/> <XSL:s param- ime="TotalItems" odabrati="$totalStalled"></XSL:s param-> </XSL:poziv-predložak> <XSL:poziv-predložak ime="ShowBar"> <XSL:s param- ime="BarDisplayLabel" odabrati=""U proces '"/> <XSL:s param- ime="BarPercent" odabrati="$percentInProcess"/> <XSL:s param- ime="QueryFilterFieldName" odabrati="'Status'"/> <XSL:s param- ime="QueryFilterFieldValue" odabrati=""U proces '"/> <XSL:s param- ime="TotalItems" odabrati="$totalInProcess"></XSL:s param-> </XSL:poziv-predložak> </stol> </td> </tr> </stol> </XSL:inače> </XSL:izabrati> </XSL:predložak> <!-- Ovaj predložak obavlja posao prikazivanja pojedine linije u grafikona. Vjerojatno ćete najviše učiniti za svoju ugađati ovdje. --> <XSL:predložak ime="ShowBar"> <XSL:zaustaviti ime="BarDisplayLabel" /> <!-- Oznaka pokazati --> <XSL:zaustaviti ime="BarPercent"/> <!-- Postotak od ukupnog. --> <XSL:zaustaviti ime="QueryFilterFieldName"/> <!-- Koristi se za skok na upit & filter --> <XSL:zaustaviti ime="QueryFilterFieldValue"/> <!-- Koristi se za skok na upit & filter --> <XSL:zaustaviti ime="TotalItems" /> <!-- Ukupan broj ovog barlabel --> <tr> <!-- Traka oznaka sama. --> <td klasa="ms-formbody" širina="30%"> <!-- Ovaj sljedeći set izvještaja gradi upita koji omogućuje           . Mi iskoristiti nekoliko stvari ovdje: 1. Možemo proći FilterField1 i FilterValue1 na popisu za filtriranje na stupcu. 2. SharePoint prolazi ključni parametar za nas, ListUrlDir that points to the underlying list against which this DVWP is "running". Nije zabavno XSL? --> <XSL:tekst disable-output-bijegu="da"> <![CDATA[<a href ="]]></XSL:tekst> <XSL:vrijednost od odabrati="$ListUrlDir"/> <XSL:tekst disable-output-bijegu="da"><![CDATA[?FilterField1 =]]></XSL:tekst> <XSL:vrijednost od odabrati="$QueryFilterFieldName"/> <XSL:tekst disable-output-bijegu="da"><![CDATA[&FilterValue1 =]]></XSL:tekst> <XSL:vrijednost od odabrati="$QueryFilterFieldValue"/> <XSL:tekst disable-output-bijegu="da"><![CDATA[">]]></XSL:tekst> <XSL:vrijednost od odabrati="$BarDisplayLabel"/> <XSL:tekst disable-output-bijegu="da"><![CDATA[</a>]]></XSL:tekst> <!-- Sljedeći bitni pokazuje neke brojeve u obliku: "(ukupan / % od ukupnog)" --> (<XSL:vrijednost od odabrati="$TotalItems"/> / <!-- To stvara lijepu posto naljepnicu za nas. Hvala, Microsoft! --> <XSL:poziv-predložak ime="percentformat"> <XSL:s param- ime="posto" odabrati="$BarPercent"/> </XSL:poziv-predložak>) </td> <!-- Konačno, emitiraju <td> Oznaka za bar sama.--> <td> <stol cellpadding="0" cellspacing="0" granica="0" širina="{okrugli($BarPercent * 100)+1}%"> <tr bgcolor="crven"> <XSL:tekst disable-output-bijegu="da"><![CDATA[&nbsp;]]></XSL:tekst> </tr> </stol> </td> </tr> </XSL:predložak> <!-- Ovo je preuzet izravno iz nekog XSL sam pronašao u MS predložak. --> <XSL:predložak ime="percentformat"> <XSL:zaustaviti ime="posto"/> <XSL:izabrati> <XSL:kada test="Oblik-broj($posto, "#, # # 0%;-#,##0%')= 'NaN'">0%</XSL:kada> <XSL:inače> <XSL:vrijednost od odabrati="Oblik-broj($posto, "#, # # 0%;-#,##0%')" /> </XSL:inače> </XSL:izabrati> </XSL:predložak> </XSL:stilovima>

U Rezultati:

XSL odozgor generira ovaj graf:

slika

Spustite se do temeljnih podataka klikom na statusnoj koda:

slika

Završne misli:

Može li ovo biti generalizirani?

Volim ovaj koncept grafičkim, but I hate the fact that I have to go in and do so much hand-coding. I’ve given a little thought to whether it can be generalized and I’m optimistic, but I’m also a little fearful that there may be a brick wall somewhere along the path that won’t offer any work-around. If anyone has some good ideas on this, molimo zabilježite u komentarima ili elektronička pošta mene.

Vertikalni Grafikoni:

This is a horizontal bar graph. It’s certainly possible to create a vertical graph. We just need to change the HTML. I would start the same way: Create an HTML representation of a vertical bar graph and then figure out how to get that via XSL. If anyone is interested in that, I could be persuaded to try it out and work out the kinks. If someone has already done that, molim javite mi i rado ću link na svoj blog 🙂

Mislim da je izazov s vertikalnom graf je da su naljepnice za grafu su teže upravljati, ali svakako ne i nemoguće.

Naziv polja Ulovio je:

Postoje najmanje dvije stvari koje treba paziti s nazivima polja.

Prvi, a field name with a space has to be escaped in the XSL. This will probably be an issue here:

        <XSL:varijabla ime="totalProposed" 
odabrati="brojati(/dsQueryResponse / Redovi / Row[normalizirati-prostor(@ Status) = 'Prijedlog'])" />

If your "Status" column is actually named "Status Code" then you need to reference it as "Status_x0020_Code":

   <XSL:varijabla ime="totalProposed" 
odabrati="brojati(/dsQueryResponse / Redovi / Row[normalizirati-prostor(@ Status_x0020_Code) = 'Prijedlog'])" />

Drugi, i ja sam malo fuzzy na ovo, but you also need to be on the alert for field name changes. If you name your field "Status Code" i onda kasnije, rename it to "AFE Status", the "internal name" does not change. The internal name will still be "Status Code" and must be referenced as "Status_x0020_Code". The "other resources" linkovi mogu pomoći u dijagnosticiranju i ispraviti ovu vrstu problema.

O toj boji:

I picked "red" because it’s pleasing to me at the moment. It would not be a big deal to show different colors so as to provide more than just a visual description of a number, but to also provide a useful KPI. Na primjer, if the percentage of "stalled" AFE-a je > 10% tada prikazati u crveno, otherwise show it in black. Koristiti <XSL:izabrati> da to postigne.

Ostali resursi:

Sretan pretvarajući!

<kraj />

Pretplatite se na moj blog!

OM Sadašnje podataka putem prilagođeni popis (ili, Još jedan OM podataka Displayor [kao Yacc, ali različite])

Danas, I spent a handful of hours tracking down the root cause behind the message "The column name that you entered is already in use or reserved. Choose another name."

Stupac u pitanje mogao biti stvoren, izbrisati i ponovno stvara u drugom okruženju, so I knew it wasn’t a reserved name. Međutim, Ja jednostavno ne mogu naći nigdje stupac putem standardnih SharePoint korisničko sučelje, na bilo kojem mjestu u zbirci web-mjesta.

Ja objavljena na MSDN forumi ovdje i odlučna Andrew Woodward mi je ukazao u smjeru predmetnih objekata model podataka.

Sam otišao codeplex pronaći neki alat koji bi mi pomoći zaviriti u dublje OM podataka i pomoći mi locirati problem.

Pokušao sam nekoliko alata, a oni su jako cool i zanimljiva, ali na kraju, the UI wasn’t good enough for my purpose. I’m not criticizing them by any means, ali jasno funkcije odluka nije imala moj problem na umu kada su je stvorili UI :). Most people seem to be investing a fair amount of time and effort in creating workstation / klijentske aplikacije koje pružaju stabla pogled, right-click context menus and so forth. These are nice and all, ali to je puno posla za napraviti top-of-the-line korisničko iskustvo koje je također vrlo fleksibilni.

Ja stvarno potreban odgovor na ovaj problem. Ona se dogodila mi se da sam mogao dobiti sve od stupova mjestu u zbirci web-mjesta u prilagođenom popisu, Ja mogu filtrirati, sortirati i stvoriti stavove koji će mi pomoći pronaći ovog navodno postojeći stupac (koji je to učinio, BTW). I went ahead and did that and an hour or two later, su svi moji licu stupovi učitava u prilagođenom popisu s grupiranjem, sorting and so forth. I found my answer five minutes later.

Ako i kada sam uspješno preuzeti svijet, I think I will decree that all SharePoint tools providers must seriously consider surfacing their object model data in a custom list. That way, Imam moć Usporedite bilo koji način na koji želim (ograničen, naravno, standardnom SharePoint značajke).