Bar je još uvijek prilično visoke produljiti MAHOVINA

Danas, I was working with a client and describing how to modify the content query web part and display additional bits of information from a content type.

"Prvo, možete konfigurirati CQWP da se povežu sa svojim izvorima podataka, onda izvesti da se vaše radne stanice, izmijeniti <CommonViewFields>, upload, remove the original and now it’s ‘primed’ to display those other columns. Sljedeći, open up SharePoint designer, navigate to the site collection root and locate ItemStyle.xsl. Copy one of the templates as a useful starting point. Go back and modify the CQWP to make use of this new template. Konačno, modify the template to render your new fields! (Don’t forget to check it back in so that other users can see the results)."

It’s all quite clear to me (and most of us SharePoint developer types) what’s going on and how it’s quite nice, stvarno, that the data retrieval aspects of the CQWP are so well-separate from the data presentation aspects. Ali, it’s not so easy to explain, is it?

<kraj />

Technorati Tags: ,

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:

Da / Ne (potvrdni okvir) u dijelu za filtriranje sadržaja web-upita

Za filtriranje za upit za da / ne potvrdni okvir pod nazivom "Milestone PG", konfigurirati CQWP ovako:

slika

To je jedan od onih očito-jednom-you-know-it, ali teško pronaći--odgovor-na pitanja: Kako filtrirati na Da / Ne potvrdni okvir pomoću web-dijela za pretraživanje sadržaja.

The first search result I find using the search term "filter yes/no content query web part" is flat out wrong, so I thought I’d put this up there and see if it can replace the incorrect result in typical search results.

It’s quite easy: True values = "1" and false values do not equal "1" (pretty retro, actually).

In the above example, I created site column of type "Yes/No (checkbox)" named "PG Milestone". I added it to a doc library, uploaded a few documents, set the value for a couple and tested it.

<kraj />

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!

SharePoint ne daje “Tko ima pristup” Izvješća

UPDATE 01/28/08: Ovaj projekt codeplex bavi ovaj problem: http://www.codeplex.com/AccessChecker. I have not used it, ali izgleda obećavajuće, ako je to pitanje morate obratiti u vašem okruženju.

UPDATE 11/13/08: Joel Oleson napisao gore jako dobar post na većem broju upravljanja sigurnošću ovdje: http://www.sharepointjoel.com / Lists / Postova / Post.aspx?2D4fc2 2D183c% 2D8320%%% Lista = 0cd1a63d 2Dba5369008acb&ID = 113. It links to a number of other useful resources.

Forum korisnici i klijenti često postavljaju pitanje uzduž ovih linija: "Kako mogu generirati popis svih korisnika s pristupom na web-mjestu" ili "Kako mogu automatski upozoriti sve korisnike s pristupom na popis o promjenama na popis?"

There is no out of the box solution for this. If you think about it for a moment, to nije teško shvatiti zašto.

SharePoint security is very flexible. There are at least four major categories of users:

  • Anonimni korisnici.
  • Korisnici i SharePoint grupe.
  • Active Directory Korisnici.
  • Radi baziranu provjeru autentičnosti (FBA) Korisnici.

Fleksibilnost znači da, iz perspektive zaštite, any given SharePoint site will be dramatically different from another. In order to generate an access list report, potrebno je utvrditi koliko stranica je osiguran, query multiple different user profile repositories and then present it in a useful fashion. That’s a hard problem to solve generically.

Kako su to organizacije koje se bave? I’d love to hear from you in comments or e-mail.

</kraj>

MOSS mi govori Moj stupac Naziv je rezerviran ili u uporabi … Ali to nije

UPDATE 12/04/07: Vidjeti this Microsoft KB (http://support.microsoft.com/kb/923589) za informacije koje se odnose.

Zapravo, ispada da je, ali tricksy MOSS had to make it difficult.

My customer does some development work on his MOSS site over the weekend. It’s a bit of a jumble as to what he actually did, ali krajnji rezultat je to:

  • He tries to add a site column called "Quantity" and MOSS replies: "The column name that you entered is already in use or reserved. Choose another name."
  • He attempts to add it to another environment and that works. Stoga, "Quantity" is not a reserved name.
  • He tries to find an existing site column named "Quantity" in that site collection. He cannot find it.

I did some research, and even some coding, waxed philosophical and finally found that a column named Quantity did, zapravo, exist. It was in the "_Hidden" group. Hence, we could not find it via the SharePoint user interface.

How did it get there? I do not know, but I have a theory (or as my wife would call it, "blah blah blah"). Negdje duž linije, a fabulous forty template was added and probably activated at a site in the site collection. It was then deactivated (or the site removed). The site column, međutim, remained but in the "_Hidden" group. If someone knows better, please let me know via e-mail or post in the comments.

SharePoint was telling the truth. It’s hardly worth pointing out that that message is not as helpful as it could be. It would be nice to see that message fork into two different messages in the future: 1) Say that the column name is reserved or it is not. 2) If it’s not reserved, show the site, or at least the group, where the column name is already used.

</kraj>

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).

SharePoint Designer Workflow Custom Akcija — Promatranje O <Područje Kravata Dizajner Type =”StringBuilder” … />

Just a quick Ustanovljeno je da postoji vrlo važna razlika između ove dvije definicije:

<FieldBind Field="InParam1" DesignerType="StringBuilder" Id="2" Text="Input parameter #1"/>

protiv:

<FieldBind Field="InParam1" Id="2" Text="Input parameter #1"/>

Prvi pokazuje kao što je ovaj u SPD:

slika

dok je potonji pokazuje kao što je ovaj:

slika

I’m not sure how helpful these screen shots are but I put in the effort to make them so you have to view them 🙂

Promatranje je to: StringBuilder omogućiti da izgrade niz (očito) Zajedno string literali miješanjem podataka i workflow (via the "Add Lookup" Gumb u-donjem lijevom kutu). When you use the Add Lookup button, it inserts a token in the form "[%tokena%]". When SharePoint invokes your custom action, (C # koda u mom slučaju), SharePoint prolazi-token sama, not the value of the token. If you use the default designer type (-I drugi tip), Proširi SharePoint i položi-token-token za stvarne vrijednosti svog djelovanja.

StringBuilder = LOŠE, Zadana dizajnerica putovanja = DOBRO.

Naravno, that’s not what I really mean. Just don’t try and pass a parameter to your custom action when the designer type = StringBuilder. Use the default designer type and chain a StringBuilder to it up front if you need to build complex strings in your workflow (koji usput rečeno je točno ono što čovjek čini stvoriti dinamičnu temu za e-akcije, ali to je tema za neki drugi blog stupanja, Har Har).

<kraj />

Prijevremena Workflow Aktivacija — Non-Medicinski rješenje

UPDATE: Vidi ovu raspravu MSDN, pogotovo zadnji upis: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. In short, može biti kao jednostavan kao što barem jedan od polja obvezna.

Imam biblioteku dokumenata koja podržava osam vrsta sadržaja.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" jednostavnim oduzimanjem 30 dana od drugog stupca, "due date". This should only happen for one of the content types, "Insurance". The business objective is to produce a KPI that shows two categories of insurance documents: "about to expire" and "expired." (Možete pročitati više o ovoj vrsti KPI i jači drill-down ovdje).

I have configured the workflow to fire when a new item is created and when an item is modified. The idea is that when an insurance document is uploaded, we calculate a "warning date" based on the expiration date. A pair of views work in connection with a KPI List to highlight these conditions when users hit their home page.

Ova strategija ne radi kada ću uploadati dokument.

I upload the document and I am presented with the meta data entry screen. U ovom trenutku, I’m already in trouble. SharePoint has already, prerano iz moje perspektive, fired the workflow. I haven’t had a chance to pick the correct content type nor assign a due date. Istovremeno, the workflow does not fire when I hit the submit button at this time. There’s some built-in logic that "believes" that first submit is part of the "create" event. Tako … Moj workflow je pucao i kada je izvršena, it was passed default meta data values.

The best work-around I know of is to insert a "pause until" activity in the workflow. I have the workflow pause for 1 minute. While it’s pausing, Sam odabrati ispravnu vrstu sadržaja, enter the meta data and submit. The pause completes and the workflow proceeds as needed. (Imajte na umu da u mom okruženju, timer workflow activities from SPD do not work out of the box. You may have the same trouble. Vidjeti ovdje za više detalja).

I don’t like "magic delay" work-around. What happens if the user uploads a document and the phone rings and the ensuing conversation outlasts the pause? I can make the pause longer, ali ja još uvijek se ne sviđa.

Napisao sam o tome na MSDN forumima ovdje: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1