maandelijkse archieven: December 2007

Bar Grafieken maken in SharePoint

Overzicht:

(UPDATE 12/04/07: Een andere interessante bron toegevoegd aan het einde te koppelen aan een andere blog dat dit via een zeer interessante webonderdeel adressen)

Deze blog entry wordt beschreven hoe u een staafdiagram in SharePoint. Dit werkt in zowel WSS en MOSS omgevingen zoals het hangt alleen af van het webonderdeel voor gegevensweergave.

De algemene aanpak is als volgt:

  1. Maken van een lijst of documentbibliotheek die de gegevens bevat die u wilt grafiek.
  2. Plaats de bijbehorende documentbibliotheek / aangepaste lijst naar een pagina en het omzetten in een webonderdeel voor gegevensweergave (DVWP).
  3. De DVWP de XSL voor het genereren van HTML-code als een grafiek toont wijzigen.

Bedrijfsscenario / Setup:

Ik heb een aangepaste lijst met de standaard titelkolom en één extra kolom, 'Status'. Deze modellen (zeer simplistisch) "vergunning voor kosten" scenario waar de titel het project en de Status van een waarde uit de lijst met vertegenwoordigt:

  • Voorgesteld
  • In proces
  • Vastgelopen

De doelstelling is het produceren van een interactieve horizontale staafgrafiek waarin deze statuscodes.

Ik heb de lijst gevuld en het ziet er als volgt:

afbeelding

Webonderdeel Gegevensweergave maken:

De DVWP door de aangepaste lijst toe te voegen aan een pagina maken (pagina van de site in mijn geval) en volg de instructies Hier (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Naast de DVWP eenvoudig te maken, We moeten ook het wisselbestand instelt zodat alle beschikbare rijen. Voor mij, Dit ziet er iets als dit:

afbeelding

Op dit punt, Ik sluiten altijd EPD en de browser. Ik open vervolgens opnieuw de pagina met behulp van de browser. Dit voorkomt het per ongeluk mucken het web deel lay-out op de pagina.

Het XSLT-bestand wijzigen:

Het is nu tijd om het XSLT-bestand wijzigen.

Ik altijd gebruikt u visual studio hiervoor. (Zie Hier voor een belangrijke opmerking over intellisense die u een hoop helpen zal).

Ik maak een leeg project vier nieuwe bestanden toevoegen (vervangen van de woorden "origineel" en "New" in voorkomend geval):

  • Original.XSLT
  • New.XSLT
  • Originele Params.xml
  • Nieuwe Params.xml

In mijn geval, het ziet er als volgt:

afbeelding

Het webonderdeel wijzigen en kopiëren de params en XSL naar de origineel"" versie in Visual Studio.

Het doel hier is om te veroorzaken de XSL te transformeren de resultaten die we terug uit de query DVWP in HTML maakt als een grafiek.

Te dien einde, het helpt om eerst overwegen hoe de HTML-code eruit moet komen te zien voordat we krijgen verward door de waanzin die bekend als "XSL staat". (Om duidelijk te zijn, het volgende is gewoon een voorbeeld; niet deze typen of kopiëren/plakken in visuele studio. Ik verstrek een volledige slag vertrekpunt voor die verderop in de write-up). De volgende steekproef grafiek wordt weergegeven volgens de HTML-code direct na:

Proef Bar Graph

Overeenkomstige HTML:

<HTML>
<lichaam>
<Center>
<tabel breedte = 80%>
<tr><TD><Center>Horizontale staafgrafiek</TD></tr>
<tr>
<TD align = "center">
<tabelrand = "1" breedte = 80%>
<tr>
<TD breedte = 10%>Open</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 50%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
<tr>
<TD breedte = 10%>Gesloten</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 25%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
<tr>
<TD breedte = 10%>Vastgelopen</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 25%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
</tabel>
</TD>
</tr>
</tabel>
</lichaam>
</HTML>

Ik gebruikte een dode eenvoudig benadering van mijn bars maken door het instellen van de achtergrondkleur van een rij 'Red'.

De take-away hier is dit: In het einde, alles wat we doen is het creëren van HTML met rijen en kolommen.

Sjabloon XSLT:

Ik heb de XSLT die een horizontale staafgrafiek genereert gekopieerd. Het is vrij goed commentaar dus ik zal niet veel hier met uitzondering van deze nota's toevoegen:

  • Ik begon met de standaard XSL die SharePoint Designer gaf me toen ik voor het eerst de DVWP gemaakt.
  • Ik was in staat om te bezuinigen dit uit de SPD 657 lijnen te 166 lijnen.
  • Ik prutsen niet met de parameters XML-bestand (die losstaat van de XSL en je weet wat ik bedoel als je naar de DVWP zelf wijzigen; Er zijn twee bestanden die u kunt wijzigen). Echter, om te vereenvoudigen het, Ik bijna alle van hen verwijderen uit de XSL. Dit betekent dat als je wilt om gebruik van deze parameters, u hoeft hun variabele definities opnieuw toevoegen aan de XSL. Dat zal gemakkelijk zijn aangezien zul je de oorspronkelijke XSL-variabele definities in uw visual studio-project.
  • U moet zitten kundig voor kopieer en plak deze direct in uw visual studio-project. Vervolgens, Verwijder mijn oproepen en plaats uw eigen oproepen naar "ShowBar".
  • De drill down werken door het creëren van een <een href> Als dit: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Deze techniek kan worden van waarde in andere contexten. Op het eerste, Ik dacht dat ik zou moeten voldoen aan een meer complexe indeling: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, maar in mijn omgeving dat is niet nodig. De lijst-URL wordt doorgegeven aan ons door SharePoint dus dit is vrij eenvoudig om te generaliseren.

Hier is het:

<XSL:Stylesheet Versie="1.0" uitsluiten-resultaat-voorvoegsels="RS z o s ddwrt dt msxsl" 
xmlns:msxsl="urn:schemas-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:ASP="http://schemas.Microsoft.com/ASPNET/20" xmlns:DDWRT="http://schemas.Microsoft.com/webParts/v2/DataView/runtime"
xmlns:o="urn:schemas-microsoft-com:Office" xmlns:s="uuid:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns:DT="uuid:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:RS="urn:schemas-microsoft-com:rijenset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:FrontPage:interne"
> <XSL:uitvoer methode="HTML" streepje="niet" /> <XSL:decimaal-formaat NaN="" /> <XSL:param naam="ListUrlDir"></XSL:param> <!-- Mij nood zulks ter ondersteuning van een drill-down. --> <XSL:sjabloon wedstrijd="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.Microsoft.com/ASPNET/20"
> <XSL:variabele naam="dvt_StyleName">Tabel</XSL:variabele> <XSL:variabele naam="Rijen" Selecteer="/dsQueryResponse/rijen/rij" /> <XSL:variabele naam="dvt_RowCount" Selecteer="Graaf($Rijen)" /> <XSL:variabele naam="IsEmpty" Selecteer="$dvt_RowCount = 0" /> <XSL:variabele naam="dvt_IsEmpty" Selecteer="$dvt_RowCount = 0" /> <XSL:Kies> <XSL:Wanneer test="$dvt_IsEmpty"> Er zijn geen gegevens aan grafiek!<BR/> </XSL:Wanneer> <XSL:anders> <!-- De interessante dingen begint hier. We moeten definiëren een paar variabelen voor elke rij in de grafiek: totale aantal items en percent van totaal. --> <XSL:variabele naam="totalProposed" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Voorgesteld'])" /> <XSL:variabele naam="percentProposed" Selecteer="$totalProposed div $dvt_RowCount" /> <XSL:variabele naam="totalInProcess" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'In proces'])" /> <XSL:variabele naam="percentInProcess" Selecteer="$totalInProcess div $dvt_RowCount" /> <XSL:variabele naam="totalStalled" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Geblokkeerd'])" /> <XSL:variabele naam="percentStalled" Selecteer="$totalStalled div $dvt_RowCount" /> <!-- We definiëren hier onze HTML-tabel. Ik ben lenen van sommige standaard SharePoint stijlen hier om er consistente. Ik denk dat het zal eer wijzigingen in het globale css bestand evenals thema overschrijft. --> <tabel Breedte="100%" Cellspacing="0" cellpadding="2" stijl="grens-recht: 1 Solid # C0C0C0; border-bottom: 1 Solid # C0C0C0; Border-links-style: solide; grens-links-breedte: 1; border-top-style: solide; border-top-width: 1;"> <tr> <TD uitlijnen="Center"> <tabel grens="1" Breedte="100%"> <!-- Voor elke status die we willen grafiek, Wij noemen het "ShowBar" sjabloon. We passeren het: 1. Een label voor de rij. Dit wordt omgezet in een hyperlink. 2. Het percentage (variabele van boven). 3. Het veld werkelijke naam van de code van de onderliggende lijst. Dit hoeft niet overeenkomt met het label weergeven. 4. Veldwaarde afgestemd voor #3. 5. Totale items van deze statuscode (niet het eindtotaal van alle statuscodes). Het straalt een <tr></tr> en de horizontale staafgrafiek lijn. We noemen deze sjabloon voor elke statuscode die we wilt weergeven. --> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'Voorgesteld'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentProposed"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'Voorgesteld'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalProposed"></XSL:met-param> </XSL:oproep-sjabloon> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'Geblokkeerd'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentStalled"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'Geblokkeerd'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalStalled"></XSL:met-param> </XSL:oproep-sjabloon> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'In proces'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentInProcess"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'In proces'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalInProcess"></XSL:met-param> </XSL:oproep-sjabloon> </tabel> </TD> </tr> </tabel> </XSL:anders> </XSL:Kies> </XSL:sjabloon> <!-- Deze sjabloon doet het werk van afzonderlijke regels in het staafdiagram weergeven. U zal waarschijnlijk niet de meeste van uw tweaken hier. --> <XSL:sjabloon naam="ShowBar"> <XSL:param naam="BarDisplayLabel" /> <!-- Label weergeven --> <XSL:param naam="BarPercent"/> <!-- Percentage van totaal. --> <XSL:param naam="QueryFilterFieldName"/> <!-- Gebruikt om de query naar & filter --> <XSL:param naam="QueryFilterFieldValue"/> <!-- Gebruikt om de query naar & filter --> <XSL:param naam="TotalItems" /> <!-- totale telling van dit barlabel --> <tr> <!-- De bar label zelf. --> <TD klasse="MS-formbody" Breedte="30%"> <!-- Deze volgende reeks verklaringen bouwt een queryreeks dat ons toelaat om boor neer aan een gefilterde weergave van de onderliggende gegevens. We maken gebruik van een paar dingen hier: 1. We kunt FilterField1 en FilterValue1 doorgeven aan een lijst te filteren op een kolom. 2. SharePoint is een belangrijke parameter doorgeven aan ons, ListUrlDir die naar de onderliggende lijst waartegen deze DVWP verwijst "draait". Is niet XSL-leuk? --> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"> <![CDATA[<een href ="]]></XSL:tekst> <XSL:waarde-van Selecteer="$ListUrlDir"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[?FilterField1 =]]></XSL:tekst> <XSL:waarde-van Selecteer="$QueryFilterFieldName"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[&FilterValue1 =]]></XSL:tekst> <XSL:waarde-van Selecteer="$QueryFilterFieldValue"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[">]]></XSL:tekst> <XSL:waarde-van Selecteer="$BarDisplayLabel"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[</een>]]></XSL:tekst> <!-- De volgende bits toont enkele getallen in de notatie: "(totaal / % totaal)" --> (<XSL:waarde-van Selecteer="$TotalItems"/> / <!-- Dit creëert een mooie percentage label voor ons. Bedankt, Microsoft! --> <XSL:oproep-sjabloon naam="percentformat"> <XSL:met-param naam="procent" Selecteer="$BarPercent"/> </XSL:oproep-sjabloon>) </TD> <!-- Tot slot, uitstoten een <TD> tag voor de bar zelf.--> <TD> <tabel cellpadding="0" Cellspacing="0" grens="0" Breedte="{ronde($BarPercent * 100)+1}%"> <tr bgcolor="rood"> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[&nbsp;]]></XSL:tekst> </tr> </tabel> </TD> </tr> </XSL:sjabloon> <!-- Dit is rechtstreeks overgenomen uit sommige XSL ik in een sjabloon MS gevonden. --> <XSL:sjabloon naam="percentformat"> <XSL:param naam="procent"/> <XSL:Kies> <XSL:Wanneer test="getalnotatie($procent, '#,##0%;-#,##0%')= 'NaN'">0%</XSL:Wanneer> <XSL:anders> <XSL:waarde-van Selecteer="getalnotatie($procent, '#,##0%;-#,##0%')" /> </XSL:anders> </XSL:Kies> </XSL:sjabloon> </XSL:Stylesheet>

De resultaten:

De XSL van bovenaf genereert deze grafiek:

afbeelding

Boor neer aan de onderliggende gegevens door te klikken op de statuscode:

afbeelding

Gedachten sluiten:

Dit kan worden gegeneraliseerd?

Ik hou van deze grafische concept, maar ik haat het feit dat ik moet gaan en doen zo veel hand-codering. Ik heb een beetje denken aan of het kan worden gegeneraliseerd gegeven en ik ben optimistisch, maar ik ben ook een beetje bang dat er mogelijk een bakstenen muur ergens langs het pad dat zal niet een werk-around bieden. Als iedereen heeft een aantal goede ideeën op dit, Maak een notitie in de commentaren of e-mail me.

Verticale grafieken:

Dit is een horizontale staafgrafiek. Het is zeker mogelijk een verticale grafiek maken. We moeten alleen de HTML-code wijzigen. Ik zou start op de dezelfde manier: Maak een HTML-weergave van een verticale staafdiagram en vervolgens erachter te komen hoe om die via XSL. Als iemand geïnteresseerd in die is, Ik kan worden overgehaald om uitproberen en werken uit the kinks. Als iemand heeft dat al gedaan, laat het me weten en ik leg graag een link naar uw blog 🙂

Ik denk dat dat de uitdaging met een verticale grafiek is dat de labels voor de grafiek moeilijker zijn te beheren, maar zeker niet onmogelijk.

Veld naam Gotcha's:

Er zijn ten minste twee dingen om uit te kijken voor met uw veldnamen.

Eerste, de naam van een veld met een spatie moet worden ontsnapte in de XSL. Waarschijnlijk zal dit een probleem hier:

        <XSL:variabele naam="totalProposed" 
Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Voorgesteld'])" />

Als uw Status"" kolom heet eigenlijk "Status Code" dan moet u verwijzen naar het als "Status_x0020_Code":

   <XSL:variabele naam="totalProposed" 
Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@ Status_x0020_Code) = 'Voorgesteld'])" />

Tweede, en ik ben een beetje vaag op dit, maar je moet ook op de waarschuwing voor de veldnaam wordt dan gewijzigd. Als u de naam van het veld "Status Code" en later op, Hernoem het naar "AFE Status", de interne naam"" verandert niet. De interne naam zal nog steeds worden "Status Code" en moet worden verwezen als "Status_x0020_Code". De "andere middelen" links kan helpen opsporen en corrigeren van dit soort probleem.

Over die kleur:

Ik pakte "rood" omdat het is prettig voor mij op dit moment. Het zou niet een big deal voor het weergeven van verschillende kleuren zodat er meer dan slechts een visuele beschrijving van een getal, maar ook om een nuttige KPI. Bijvoorbeeld, Als het percentage van de "vastgelopen" AFE van is > 10% dan Toon het rode, anders laten zien in het zwart. Gebruik <XSL:Kies> om dit te bereiken.

Andere bronnen:

Gelukkig transformeren!

<einde />

Abonneren op mijn blog!

SharePoint biedt geen “Wie heeft toegang” Rapporten

UPDATE 01/28/08: Dit codeplex project behandelt deze kwestie: http://www.codeplex.com/AccessChecker. Ik heb het niet gebruikt, maar het ziet er veelbelovend uit als dit is een kwestie die u adres in uw omgeving moet.

UPDATE 11/13/08: Joel Oleson schreef een zeer goede post op de grotere veiligheid bestuurlijke kwestie hier: http://www.sharepointjoel.com/ Lists/Posts/Post.aspx?Lijst = 0cd1a63d % 2D183c % 2D4fc2 %2 D 8320% 2Dba5369008acb&ID = 113. Het verbindt met een aantal andere nuttige middelen.

Forumgebruikers en clients vraag vaak een vraag langs deze lijnen: "Hoe genereer ik een lijst van alle gebruikers met toegang tot een site" of "Hoe kan ik automatisch waarschuwen alle gebruikers met toegang tot de lijst over wijzigingen die in de lijst?"

Er is geen out van de box oplossing voor dit. Als je erover nadenkt voor een moment, het is niet moeilijk te begrijpen waarom.

SharePoint veiligheid is zeer flexibel. Er zijn ten minste vier grote categorieën van gebruikers:

  • Anonieme gebruikers.
  • SharePoint gebruikers en groepen.
  • Active Directory: gebruikers.
  • Formulieren gebaseerde verificatie (FBA) gebruikers.

De flexibiliteit betekent dat vanuit een veiligheidsperspectief, een bepaalde SharePoint-site zullen drastisch afwijken van een andere. Oog op het genereren van een access-rapport lijst, Men moet nagaan hoe de site is beveiligd, query meerdere andere gebruiker profiel archieven en vervolgens presenteren op een nuttige wijze. Dat is een moeilijk probleem op te lossen generieke.

Hoe organisaties omgaan met dit? Ik zou graag van u horen in commentaren of E-mail.

</einde>