miesięczne archiwum: Grudnia 2007

Tworzyć wykresy słupkowe w programie SharePoint

Przegląd:

(AKTUALIZACJA 12/04/07: Dodaje inny ciekawych zasobów na koniec z linkami do innego bloga, który rozwiązuje ten problem przez bardzo ciekawe składnika web part)

Ten wpis w blogu zawiera opis sposobu tworzenia wykresu słupkowego w SharePoint. To działa w środowiskach MOSS i WSS, jak to tylko zależy od składnika web part widok danych.

Ogólne podejście jest następujący:

  1. Tworzenie listy lub biblioteki dokumentów, która zawiera dane, które chcesz wykres.
  2. Miejsce biblioteki dokumentów związanych / niestandardowe listy na stronę i przekonwertować go do składnika web part widok danych (DVWP).
  3. Modyfikowanie DVWP XSL do generowania kodu HTML, który pokazuje jak wykres.

Scenariusza biznesowego / Instalator:

Stworzyłem listę niestandardową z standardowe kolumny tytulu i jedną dodatkową kolumnę, "Status". To modele (bardzo Upraszczając) "zezwolenie na koszt" scenariusz gdzie tytuł reprezentuje projekt i stan wartości z listy:

  • Proponowane
  • W procesie
  • Utknęły w martwym punkcie

Celem jest stworzyć interaktywne poziomy wykres słupkowy, który pokazuje te kody stanu.

Ja mam wypełnione listy i wygląda to tak:

obraz

Tworzenie składnika Web Part Widok danych:

Utworzyć DVWP dodając niestandardowe listy do strony (stronie w moim przypadku) i postępuj zgodnie z instrukcjami tutaj (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Oprócz tworzenia po prostu DVWP, Musimy także ustawić właściwość stronicowania na Pokaż wszystkie wiersze dostępne. Dla mnie, to coś jak to wygląda:

obraz

W tym momencie, Zawsze blisko, SPD i przeglądarki. Następnie ponownie otworzyć stronę za pomocą przeglądarki. Pozwala to uniknąć przypadkowo mucking: układ części na stronie sieci web.

Modyfikowanie XSLT:

Teraz nadszedł czas, aby zmodyfikować Przekształcenie XSLT.

Zawsze używaj programu visual studio do tego. (Zobacz tutaj dla ważna uwaga na temat intellisense, które pomogą Ci dużo).

Utworzyć pusty projekt dodać cztery nowe pliki (zastąpienie słowa "oryginał" i "nowy" w stosownych przypadkach):

  • Original.XSLT
  • New.XSLT
  • Oryginalny Params.xml
  • Nowy Params.xml

W moim przypadku, wygląda to:

obraz

Modyfikowanie składnika web part i skopiować parametry i XSL do oryginału"" wersji programu Visual Studio.

Celem jest przyczyną XSL do przekształcenia wyników, jakie uzyskujemy z kwerendy DVWP na format HTML, który jest renderowany jako wykres.

W tym celu, pomaga to najpierw rozważyć, jak powinny wyglądać HTML przed my gubi się w obłęd, który jest znany jako "XSL". (Żeby było jasne, Poniżej jest po prostu przykład; nie go wpisać lub skopiować i wkleić do programu visual studio. Wystawiam pełna cios punkt wyjścia do tego później w Recenzja). Poniższy przykładowy wykres jest renderowany na kod HTML bezpośrednio po:

Próbka wykres słupkowy

Odpowiedni HTML:

<HTML>
<organ>
<centrum>
<szerokość tabeli = 80%>
<TR><TD><centrum>Wykres słupkowy poziomy</TD></TR>
<TR>
<TD align = "center">
<obramowanie tabeli = "1" szerokość = 80%>
<TR>
<szerokosci TD = 10%>Otwarte</TD>
<TD><tabela cellpadding ="0" cellspacing ="0" border = 0 szerokość = 50%><TR bgcolor = czerwony><TD>&nbsp;</TD></TR></Tabela></TD>
</TR>
<TR>
<szerokosci TD = 10%>Zamknięte</TD>
<TD><tabela cellpadding ="0" cellspacing ="0" border = 0 szerokość = 25%><TR bgcolor = czerwony><TD>&nbsp;</TD></TR></Tabela></TD>
</TR>
<TR>
<szerokosci TD = 10%>Utknęły w martwym punkcie</TD>
<TD><tabela cellpadding ="0" cellspacing ="0" border = 0 szerokość = 25%><TR bgcolor = czerwony><TD>&nbsp;</TD></TR></Tabela></TD>
</TR>
</Tabela>
</TD>
</TR>
</Tabela>
</organ>
</HTML>

Kiedyś martwe proste podejście do tworzenia mojego barów ustawiając kolor tła wiersza "czerwony".

To jest tutaj na wynos: W końcu, wszystko co robimy jest stworzenie HTML z wierszy i kolumn.

Szablonów XSLT:

Już skopiowane XSLT, który generuje wykres słupkowy poziomy. Jest to dość dobrze skomentował tak nie wiele tutaj dodać oprócz tych notatek:

  • Zacząłem z domyślny plik XSL, że SharePoint Designer dał mi, kiedy po raz pierwszy stworzyłem DVWP.
  • Udało mi się zmniejszyć to z SPD 657 linie do 166 linie.
  • Nie poeksperymentować z pliku XML parametry (które jest oddzielone od XSL i będziesz wiedzieć, co mam na myśli, gdy idziesz do modyfikowania DVWP, sam; Istnieją dwa pliki, które można modyfikować). Jednakże, w celu uproszczenia, Usunąć prawie wszystkie z nich z XSL. Oznacza to, że jeśli chcesz korzystać z tych parametrów, Wystarczy dodać swoje definicje zmiennych XSL. To będzie łatwe, ponieważ masz oryginalny definicje zmiennych XSL w sieci visual studio projekt.
  • Powinieneś być w stanie skopiować i wkleić to bezpośrednio do sieci visual studio projekt. Następnie, usunąć moje rozmowy i wstawić własne wzywa do "ShowBar".
  • Drąż niedziałający działa poprzez tworzenie <href> Jak to: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Technika ta może być wartości w innych kontekstach. Na początku, Myślałem, że będą musiały zgodne z formatem bardziej złożonych: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, ale w moim otoczeniu nie jest konieczne. Listę URL jest przekazywana do nas przez program SharePoint, więc jest to dość łatwe do upowszechnienia.

Tutaj jest:

<XSL:arkusz stylów Wersja="1.0" Wyklucz wynik przedrostki="r z o s ddwrt dt msxsl" 
xmlns:msxsl="Urna:schemas-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/ 1999/przekształcenia XSL"
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="Urna:schemas-microsoft-com:Biuro" xmlns:s="UUID:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:DT="UUID:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:RS="Urna:schemas-microsoft-com:zestaw wierszy" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="Urna:program FrontPage:wewnętrzne"
> <XSL:wyjście Metoda="HTML" tiret="nie" /> <XSL:zapisie dziesiętnym NaN="" /> <XSL:parametr Nazwa="ListUrlDir"></XSL:parametr> <!-- Ja potrzebować ten obsługuje drążenia niedziałający. --> <XSL:szablon mecz="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.microsoft.com/ASPNET/20"
> <XSL:Zmienna Nazwa="dvt_StyleName">Tabela</XSL:Zmienna> <XSL:Zmienna Nazwa="Wiersze" Wybierz="/dsQueryResponse/wierszy/wiersz" /> <XSL:Zmienna Nazwa="dvt_RowCount" Wybierz="Hrabia($Wiersze)" /> <XSL:Zmienna Nazwa="IsEmpty" Wybierz="$dvt_RowCount = 0" /> <XSL:Zmienna Nazwa="dvt_IsEmpty" Wybierz="$dvt_RowCount = 0" /> <XSL:Wybierz> <XSL:Kiedy badania="$dvt_IsEmpty"> Brak danych do wykresu!<BR/> </XSL:Kiedy> <XSL:w przeciwnym razie> <!-- Ciekawe rzeczy zaczyna się tutaj. Musimy określić parę zmiennych dla każdego wiersza na wykresie: Całkowita liczba elementów i procent całkowitej. --> <XSL:Zmienna Nazwa="totalProposed" Wybierz="Hrabia(/dsQueryResponse/wierszy/wiersz[miejsca na normalizacji(@Status) = "Proponowane"])" /> <XSL:Zmienna Nazwa="percentProposed" Wybierz="$totalProposed div $dvt_RowCount" /> <XSL:Zmienna Nazwa="totalInProcess" Wybierz="Hrabia(/dsQueryResponse/wierszy/wiersz[miejsca na normalizacji(@Status) = "W procesie"])" /> <XSL:Zmienna Nazwa="percentInProcess" Wybierz="$totalInProcess div $dvt_RowCount" /> <XSL:Zmienna Nazwa="totalStalled" Wybierz="Hrabia(/dsQueryResponse/wierszy/wiersz[miejsca na normalizacji(@Status) = "Utknęły w martwym punkcie"])" /> <XSL:Zmienna Nazwa="percentStalled" Wybierz="$totalStalled div $dvt_RowCount" /> <!-- Definiujemy naszej tabeli HTML tutaj. Jestem pożyczek od niektórych standardowych SharePoint stylów tutaj aby to spójne. Myślę, że to będzie honorować zmian do pliku globalnego css a także tematu zastępuje. --> <Tabela Szerokość="100%" cellspacing="0" cellPadding="2" styl="granica prawo: 1 stałe #C0C0C0; dolnej granicy: 1 stałe #C0C0C0; border-left-style: stałe; szerokość obramowania lewej: 1; border-top-style: stałe; border-top-width: 1;"> <TR> <TD wyrównać="centrum"> <Tabela granica="1" Szerokość="100%"> <!-- Dla każdego stanu, który chcemy wykres, nazywamy "ShowBar" szablon. Przekazujemy je: 1. Etykietę wiersza. To jest przekształcany w hiperłącze. 2. Procent (Zmienna z góry). 3. Pole rzeczywista nazwa kod z listy podstawowej. To nie trzeba dopasować Wyświetl etykietę. 4. Wartość pola dopasowane do #3. 5. Całkowitej pozycji ten kod stanu (nie sumy wszystkich kodów stanu). Emituje <TR></TR> i linii poziomej wykresu słupkowego. Nazywamy ten szablon dla każdego kodu stanu, który chcemy wyświetlić. --> <XSL:Wywołanie szablon Nazwa="ShowBar"> <XSL:z param Nazwa="BarDisplayLabel" Wybierz=""Proponowane""/> <XSL:z param Nazwa="BarPercent" Wybierz="$percentProposed"/> <XSL:z param Nazwa="QueryFilterFieldName" Wybierz=""Status""/> <XSL:z param Nazwa="QueryFilterFieldValue" Wybierz=""Proponowane""/> <XSL:z param Nazwa="TotalItems" Wybierz="$totalProposed"></XSL:z param> </XSL:Wywołanie szablon> <XSL:Wywołanie szablon Nazwa="ShowBar"> <XSL:z param Nazwa="BarDisplayLabel" Wybierz=""Zatrzymany""/> <XSL:z param Nazwa="BarPercent" Wybierz="$percentStalled"/> <XSL:z param Nazwa="QueryFilterFieldName" Wybierz=""Status""/> <XSL:z param Nazwa="QueryFilterFieldValue" Wybierz=""Zatrzymany""/> <XSL:z param Nazwa="TotalItems" Wybierz="$totalStalled"></XSL:z param> </XSL:Wywołanie szablon> <XSL:Wywołanie szablon Nazwa="ShowBar"> <XSL:z param Nazwa="BarDisplayLabel" Wybierz=""W procesie""/> <XSL:z param Nazwa="BarPercent" Wybierz="$percentInProcess"/> <XSL:z param Nazwa="QueryFilterFieldName" Wybierz=""Status""/> <XSL:z param Nazwa="QueryFilterFieldValue" Wybierz=""W procesie""/> <XSL:z param Nazwa="TotalItems" Wybierz="$totalInProcess"></XSL:z param> </XSL:Wywołanie szablon> </Tabela> </TD> </TR> </Tabela> </XSL:w przeciwnym razie> </XSL:Wybierz> </XSL:szablon> <!-- Ten szablon działa wyświetlania poszczególnych linii na wykresie słupkowym. Prawdopodobnie będziesz robić większość szczypanie tutaj. --> <XSL:szablon Nazwa="ShowBar"> <XSL:parametr Nazwa="BarDisplayLabel" /> <!-- etykieta do Pokaż --> <XSL:parametr Nazwa="BarPercent"/> <!-- Procent całkowitego. --> <XSL:parametr Nazwa="QueryFilterFieldName"/> <!-- Użyte do wykonania skoku do kwerendy & Filtr --> <XSL:parametr Nazwa="QueryFilterFieldValue"/> <!-- Użyte do wykonania skoku do kwerendy & Filtr --> <XSL:parametr Nazwa="TotalItems" /> <!-- Całkowita liczba od ten barlabel --> <TR> <!-- Bar etykieta sam. --> <TD Klasa="MS-formbody" Szerokość="30%"> <!-- To kolejny zestaw instrukcji buduje ciąg kwerendy, który pozwala nam wykonać drążenie do filtrowanego widoku danych źródłowych. Możemy użyć kilku rzeczy tutaj: 1. Możemy przekazać FilterField1 i FilterValue1 do listy, aby odfiltrować kolumna. 2. SharePoint jest przekazanie parametru klucz do nas, ListUrlDir, który wskazuje na listy podstawowej, przeciwko której ten DVWP jest "systemem". Nie jest zabawa XSL? --> <XSL:tekst Wyłącz output escaping="tak"> <![CDATA[<href ="]]></XSL:tekst> <XSL:wartość z Wybierz="$ListUrlDir"/> <XSL:tekst Wyłącz output escaping="tak"><![CDATA[?FilterField1 =]]></XSL:tekst> <XSL:wartość z Wybierz="$QueryFilterFieldName"/> <XSL:tekst Wyłącz output escaping="tak"><![CDATA[&FilterValue1 =]]></XSL:tekst> <XSL:wartość z Wybierz="$QueryFilterFieldValue"/> <XSL:tekst Wyłącz output escaping="tak"><![CDATA[">]]></XSL:tekst> <XSL:wartość z Wybierz="$BarDisplayLabel"/> <XSL:tekst Wyłącz output escaping="tak"><![CDATA[</a>]]></XSL:tekst> <!-- Następny bit pokazuje kilka numerów w formacie: "(ogółem / % w sumie)" --> (<XSL:wartość z Wybierz="$TotalItems"/> / <!-- Tworzy ładne etykiety procent dla nas. Podziękowania, Firmy Microsoft! --> <XSL:Wywołanie szablon Nazwa="PercentFormat"> <XSL:z param Nazwa="procent" Wybierz="$BarPercent"/> </XSL:Wywołanie szablon>) </TD> <!-- Wreszcie, emitują <TD> znacznik na pasku sam.--> <TD> <Tabela cellPadding="0" cellspacing="0" granica="0" Szerokość="{okrągłe($BarPercent * 100)+1}%"> <TR kolor tła="czerwony"> <XSL:tekst Wyłącz output escaping="tak"><![CDATA[&nbsp;]]></XSL:tekst> </TR> </Tabela> </TD> </TR> </XSL:szablon> <!-- To jest pobierana bezpośrednio z niektórych XSL znalazłem szablonu MS. --> <XSL:szablon Nazwa="PercentFormat"> <XSL:parametr Nazwa="procent"/> <XSL:Wybierz> <XSL:Kiedy badania="numer formatu($procent, '#,##0%;-#,##0%')= "NaN"">0%</XSL:Kiedy> <XSL:w przeciwnym razie> <XSL:wartość z Wybierz="numer formatu($procent, '#,##0%;-#,##0%')" /> </XSL:w przeciwnym razie> </XSL:Wybierz> </XSL:szablon> </XSL:arkusz stylów>

Wyniki:

XSL z góry generuje ten wykres:

obraz

Drąż do danych źródłowych klikając na kod stanu:

obraz

Zawarcia myśli:

Może to być uogólnione?

Kocham tę koncepcję Jave, ale nienawidzę fakt, że musiał iść i zrobić tyle kodowanie strony. Dałam trochę myśli czy to mogą być uogólnione i jestem optymistą, ale ja też jestem trochę straszne, że może być gdzieś na drodze, że nie oferują żadnych obejść mur z cegły. Jeśli ktoś ma jakieś dobre pomysły na ten temat, Proszę zanotować w komentarzach lub e-mail ja.

Wykresy pionowe:

Jest to wykres słupkowy poziomy. To z pewnością można utworzyć wykres pionowe. Musimy tylko zmienić kod HTML. Chciałbym zacząć się tak samo: Utworzenie obrazu HTML wykres słupkowy pionowe i następnie dowiedzieć się, jak uzyskać za pośrednictwem XSL. Jeśli ktoś jest zainteresowany w tym, I może być pewien wobec próbować ono na zewnątrz i wypracować załamań. Jeśli ktoś to już zrobił, proszę dać mi znać, a ja chętnie odwołują się do swojego bloga 🙂

Myślę, że to wyzwanie z pionowej wykresu, że etykiety wykresu są trudniejsze do zarządzania, ale na pewno nie da.

Pole Nazwa haczyka:

Istnieją co najmniej dwie rzeczy zwrócić uwagę z nazwy pola.

Pierwszy, Nazwa pola z miejsca ma być uciekł w XSL. Prawdopodobnie będzie to problem tutaj:

        <XSL:Zmienna Nazwa="totalProposed" 
Wybierz="Hrabia(/dsQueryResponse/wierszy/wiersz[miejsca na normalizacji(@Status) = "Proponowane"])" />

Jeśli stan"" kolumna jest rzeczywiście o nazwie "kod stanu" następnie trzeba odwoływać się do niej jako "Status_x0020_Code":

   <XSL:Zmienna Nazwa="totalProposed" 
Wybierz="Hrabia(/dsQueryResponse/wierszy/wiersz[miejsca na normalizacji(@Status_x0020_Code) = "Proponowane"])" />

Drugi, a ja jestem nieco rozmyte na to, ale też trzeba mieć się na baczności dla zmiany nazwy pola. Jeśli nazwa pola "kod stanu" a potem na, Zmień jego nazwę na "AFE Status", Nazwa wewnętrzna"" nie zmienia. Nazwa wewnętrzna nadal będzie "kod stanu" i musi odwoływać się jako "Status_x0020_Code". "Inne środki pieniężne" linki mogą pomóc zdiagnozować i rozwiązać taki problem.

O tym kolorze:

Wybrałem "czerwony" bo to miłe dla mnie w tej chwili. Nie byłoby wielkiego aby pokazać różne kolory tak, aby dostarczyć więcej niż tylko wizualny opis kilku, ale również zapewnić użyteczne KPI. Na przykład, Jeśli procent "utknęły w martwym punkcie" AFE w jest > 10% następnie Pokaż czerwony, w przeciwnym razie pokazać go w kolorze czarnym. Wykorzystanie <XSL:Wybierz> Aby to osiągnąć.

Inne zasoby:

Przekształcenie szczęśliwy!

<koniec />

Subskrybowanie mój blog!

SharePoint zapewnia “Kto ma dostęp” Raporty

AKTUALIZACJA 01/28/08: Projekt codeplex rozwiązuje ten problem: http://www.codeplex.com/AccessChecker. Nie używali go, ale wygląda obiecująco, jeśli jest to problem, trzeba adres w środowisku.

AKTUALIZACJA 11/13/08: Joel Oleson napisał bardzo dobry post na większe bezpieczeństwo zarządzania problem tutaj: http://www.sharepointjoel.com/ Lists/Posts/Post.aspx?Lista = 0cd1a63d % 2D183c % 2D4fc2 %2 D 8320% 2Dba5369008acb&ID = 113. Linki do wielu innych przydatnych zasobów.

Forum użytkowników i klientów często zadać pytanie wzdłuż tych linii: "Jak wygenerować listę wszystkich użytkowników z dostępem do witryny" lub "jak można I automatycznie alert wszystkich użytkowników z dostępem do listy o zmiany na liście?"

Tam jest nie obecnie rozwiązanie tego. Jeśli myślisz o tym przez chwilę, nie jest trudno zrozumieć, dlaczego.

SharePoint bezpieczeństwa jest bardzo elastyczny. Istnieją co najmniej cztery główne kategorie użytkowników:

  • Anonimowi użytkownicy.
  • SharePoint użytkownicy i grupy.
  • Aktywnych użytkowników katalogu.
  • Formularze oparte uwierzytelniania (PARYŻU W RODZINIE ŻYDOWSKIEJ) Użytkownicy.

Elastyczność oznacza, że z punktu widzenia bezpieczeństwa, dowolnej danej lokacji programu SharePoint będzie znacznie różni się od innego. Aby wygenerować raport listy dostępu, należy upewnić się, jak strona jest zabezpieczona, kwerendy repozytoriów wielu profil innego użytkownika i następnie przedstawić go w sposób przydatny. To trudny problem do rozwiązania ogólnie.

Jak organizacje mają do czynienia z tym? Bardzo chciałbym usłyszeć od Ciebie w komentarzach lub Adres e-mail.

</koniec>