月別アーカイブ: 12 月 2007

SharePoint のバー グラフを作成します。

概要:

(更新プログラム 12/04/07: これに対処する、非常に興味深い web パーツで別のブログへのリンク、最後にもう一つの興味深いリソースを追加)

このブログのエントリは、SharePoint のバー グラフを作成する方法を説明します. それはデータ ビュー web パーツに依存するだけ、これは WSS および MOSS 環境で動作します。.

全体的なアプローチは以下のとおりです。:

  1. グラフにデータが含まれるリストまたはドキュメント ライブラリを作成します。.
  2. 関連付けられているドキュメント ライブラリの場所 / カスタム ページに一覧表示し、データ ビュー web パーツに変換 (DVWP).
  3. グラフとして表示する HTML を生成する dvwp での XSL を変更します。.

ビジネス シナリオ / セットアップ:

標準のタイトル列を持つカスタム リストと 1 つの追加列を作りました, 「ステータス」. これは、モデルは、 (非常に単純化) 「経費の承認" シナリオがタイトルを表すプロジェクトおよびステータス値のリストから:

  • 提案
  • プロセス内
  • ストール

目的は、これらのステータス コードを示すインタラクティブな水平バー グラフを生成するために.

リストを格納した、このように見えます:

イメージ

データ ビュー Web パーツを作成します。:

ページにカスタム リストを追加することによって dvwp で作成します。 (私の場合のサイトのページ) 指示に従います ここで (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Dvwp で単に作成に加えて, すべての利用可能な行を表示するページング プロパティを設定することも. 私, これは次のよう:

イメージ

この時点で, 私は常に SPD とは、ブラウザーを閉じる. 私は、再度、ブラウザーを使用してページを開きます. これは、誤ってページの web パーツのレイアウトをいじくる回避できます。.

XSLT を変更します。:

今こそ、XSLT を変更するには.

私は常にこの visual studio を使用してください。. (参照してください。 ここで たくさん役立つ intellisense に関する注意について).

空のプロジェクトを作成する 4 つの新しいファイルを追加 (単語"オリジナルを置き換える" "New" 適切な):

  • Original.xslt
  • New.xslt
  • オリジナル Params.xml
  • 新しい Params.xml

私の場合, それはこのように見える:

イメージ

Web パーツを変更および params と XSL"オリジナルをコピー" Visual Studio でのバージョン.

ここでの目的は HTML がグラフとして表示するに dvwp でクエリから返される結果を変換する XSL が発生するには.

この目的のため, 最初、HTML がどのように私たちは"XSL"として知られている狂気混乱して取得する前に考慮すること. (明確にするには, 以下は簡単な例です。; don't をそれを入力または visual studio にコピー/ペースト. 書き込みの後半を開始点、完全な打撃を提供します。). 次のサンプル グラフが直後 HTML としてレンダリングされます。:

サンプル棒グラフ

対応する HTML:

<html>
<体>
<センター>
<テーブル幅 = 80%>
<tr><td><センター>水平棒グラフ</td></tr>
<tr>
<td 整列 =「センター」>
<表の罫線 ="1" 幅 = 80%>
<tr>
<td の幅 = 10%>オープン</td>
<td><テーブルの cellpadding ="0" cellspacing ="0" 国境 = 0 幅 = 50%><tr bgcolor = 赤><td>&nbsp;</td></tr></テーブル></td>
</tr>
<tr>
<td の幅 = 10%>閉じる</td>
<td><テーブルの cellpadding ="0" cellspacing ="0" 境界線幅 0 = = 25 %><tr bgcolor = 赤><td>&nbsp;</td></tr></テーブル></td>
</tr>
<tr>
<td の幅 = 10%>ストール</td>
<td><テーブルの cellpadding ="0" cellspacing ="0" 境界線幅 0 = = 25 %><tr bgcolor = 赤><td>&nbsp;</td></tr></テーブル></td>
</tr>
</テーブル>
</td>
</tr>
</テーブル>
</体>
</html>

「赤」に行の背景色を設定することによって私のバーを作成する死んでシンプルなアプローチを使用されます。.

これは持ち帰りはこちら: 最後に, 我々 がやっているすべては行と列で HTML を作成します。.

XSLT テンプレート:

水平バー グラフを生成する XSLT をコピーしました。. それはかなりよく、私はこれらのノートを除いてここに追加されませんように、コメント:

  • 既定の XSL が SharePoint Designer くれた dvwp で初めて作成したときに開始.
  • SPD からこれを削減することができた 657 行 166 ライン.
  • 私は didn't をいじくり回パラメーター XML ファイル (XSL とは別であり dvwp で自体を変更するのに行くとき何を意味知っているよ; 変更することができます 2 つのファイルがあります。). ただし, それを簡素化するために, XSL からほぼすべての人を削除しました。. これを作りたい場合は、これらのパラメーターの使用, 変数定義を XSL に追加するだけ. Visual studio プロジェクトに元の XSL 変数定義があるので、それは簡単にできる.
  • コピーして、visual studio プロジェクトに直接これを貼り付けることができるべき. [, 私の呼び出しを削除して、独自の呼び出し「ゲイビレッジ」を挿入します。.
  • 作成することによって作品をドリルダウンします。 <href> このように: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. この手法は、他のコンテキストで値のかもしれない. 最初に, 複雑な形式に準拠する必要があります私はだと思った: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, 私の環境でその必要はありませんが、. リストの URL は、SharePoint によって私たちに渡されますので、これは一般化するは非常に簡単.

ここでは:

<xsl:スタイル シート バージョン="1.0" 除外結果接頭辞="rs z o s ddwrt dt msxsl 専用" 
xmlns:msxsl 専用="urn:スキーマ-マイクロソフト-com:xslt" xmlns:xsl="http://www.w3.org//1999年/XSL 変換"
xmlns:SharePoint="命令" 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:スキーマ-マイクロソフト-com:オフィス" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11 d 1 A29F-00AA00C14882" xmlns:rs="urn:スキーマ-マイクロソフト-com:行セット" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:frontpage:内部"
> <xsl:出力 メソッド="html" インデント="いいえ" /> <xsl:10 進形式 ナン="" /> <xsl:param 名前="ListUrlDir"></xsl:param> <!-- ドリル ダウンをサポートするために必要. --> <xsl:テンプレート 一致="/" xmlns:SharePoint="命令"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:変数 名前="dvt_StyleName">テーブル</xsl:変数> <xsl:変数 名前="" 選択="/dsQueryResponse/行/行" /> <xsl:変数 名前="dvt_RowCount" 選択="カウント($行)" /> <xsl:変数 名前="IsEmpty" 選択="$dvt_RowCount = 0" /> <xsl:変数 名前="dvt_IsEmpty" 選択="$dvt_RowCount = 0" /> <xsl:選択してください。> <xsl:とき テスト="$dvt_IsEmpty"> グラフにデータがないです。!<br/> </xsl:とき> <xsl:それ以外の場合> <!-- 面白いものはここから始まります. グラフ内の行ごとに変数のペアを定義する必要があります。: 合計項目数と合計のパーセント. --> <xsl:変数 名前="totalProposed" 選択="カウント(/dsQueryResponse/行/行[空白を正規化(@Status) = '提案'])" /> <xsl:変数 名前="percentProposed" 選択="$totalProposed div $dvt_RowCount" /> <xsl:変数 名前="totalInProcess" 選択="カウント(/dsQueryResponse/行/行[空白を正規化(@Status) = 'のプロセス'])" /> <xsl:変数 名前="percentInProcess" 選択="$totalInProcess div $dvt_RowCount" /> <xsl:変数 名前="totalStalled" 選択="カウント(/dsQueryResponse/行/行[空白を正規化(@Status) '停止' =])" /> <xsl:変数 名前="percentStalled" 選択="$totalStalled div $dvt_RowCount" /> <!-- ここで我々 の HTML テーブルを定義します。. 私は一貫性を持つようにいくつかの標準的な SharePoint のスタイルここから借りています. 私はそれは同様のテーマをオーバーライド グローバル css ファイルへの変更を名誉と思う. --> <テーブル ="100%" cellspacing="0" cellpadding="2" スタイル="右枠線: 1 固体 #C0C0C0; 下枠線: 1 固体 #C0C0C0; 罫線左: 固体; ボーダー左幅: 1; 罫線上部: 固体; 国境トップ幅: 1;"> <tr> <td 位置合わせ="センター"> <テーブル 境界線="1" ="100%"> <!-- グラフにしたい各ステータスを, 「ゲイビレッジをと呼んでください。" テンプレート. 我々 はそれを渡す: 1. 行のラベル. これはハイパーリンクに変換します。. 2. パーセント (上から変数). 3. 基になるリストからコードの実際のフィールド名. これは、表示ラベルと一致する必要はありません。. 4. フィールドの値のを一致 #3. 5. このステータス コードのアイテムの合計 (すべてのステータス コードのない総計). それが発する、 <tr></tr> 水平バー グラフ線. このテンプレートに表示したい各ステータス コードを募集します。. --> <xsl:呼び出しテンプレート 名前="ゲイビレッジ"> <xsl:param と 名前="BarDisplayLabel" 選択="' 提案 '"/> <xsl:param と 名前="BarPercent" 選択="$percentProposed"/> <xsl:param と 名前="QueryFilterFieldName" 選択="' 状態 '"/> <xsl:param と 名前="QueryFilterFieldValue" 選択="' 提案 '"/> <xsl:param と 名前="TotalItems" 選択="$totalProposed"></xsl:param と> </xsl:呼び出しテンプレート> <xsl:呼び出しテンプレート 名前="ゲイビレッジ"> <xsl:param と 名前="BarDisplayLabel" 選択="' 停止 '"/> <xsl:param と 名前="BarPercent" 選択="$percentStalled"/> <xsl:param と 名前="QueryFilterFieldName" 選択="' 状態 '"/> <xsl:param と 名前="QueryFilterFieldValue" 選択="' 停止 '"/> <xsl:param と 名前="TotalItems" 選択="$totalStalled"></xsl:param と> </xsl:呼び出しテンプレート> <xsl:呼び出しテンプレート 名前="ゲイビレッジ"> <xsl:param と 名前="BarDisplayLabel" 選択="' のプロセス'"/> <xsl:param と 名前="BarPercent" 選択="$percentInProcess"/> <xsl:param と 名前="QueryFilterFieldName" 選択="' 状態 '"/> <xsl:param と 名前="QueryFilterFieldValue" 選択="' のプロセス'"/> <xsl:param と 名前="TotalItems" 選択="$totalInProcess"></xsl:param と> </xsl:呼び出しテンプレート> </テーブル> </td> </tr> </テーブル> </xsl:それ以外の場合> </xsl:選択してください。> </xsl:テンプレート> <!-- このテンプレートは、バー グラフで個々 の行を表示する作業を行います. あなたはおそらくあなたの微調整をここのほとんどをやる. --> <xsl:テンプレート 名前="ゲイビレッジ"> <xsl:param 名前="BarDisplayLabel" /> <!-- ラベルを表示するには --> <xsl:param 名前="BarPercent"/> <!-- 合計のパーセント. --> <xsl:param 名前="QueryFilterFieldName"/> <!-- クエリにジャンプするために使用 & フィルター --> <xsl:param 名前="QueryFilterFieldValue"/> <!-- クエリにジャンプするために使用 & フィルター --> <xsl:param 名前="TotalItems" /> <!-- この barlabel の合計数 --> <tr> <!-- バー自体のラベルします。. --> <td クラス="ms formbody" ="30%"> <!-- このステートメントの次のセットは基になるデータのフィルター処理されたビューにドリルダウンすることができますクエリ文字列を作成します。. 私たちが作るここでいくつかのものを使用: 1. 列にフィルターを適用するリストに FilterField1 と FilterValue1 を渡すことが我々. 2. SharePoint は私たちに重要なパラメーターを渡すこと, 対象となるこの DVWP「実行している」基になるリストを指す ListUrlDir. XSL の楽しみではないです。? --> <xsl:本文 無効にする出力エスケープ="はい"> <![CDATA[<href ="]]></xsl:本文> <xsl:値の 選択="$ListUrlDir"/> <xsl:本文 無効にする出力エスケープ="はい"><![CDATA[?FilterField1 =]]></xsl:本文> <xsl:値の 選択="$QueryFilterFieldName"/> <xsl:本文 無効にする出力エスケープ="はい"><![CDATA[&FilterValue1 =]]></xsl:本文> <xsl:値の 選択="$QueryFilterFieldValue"/> <xsl:本文 無効にする出力エスケープ="はい"><![CDATA[">]]></xsl:本文> <xsl:値の 選択="$BarDisplayLabel"/> <xsl:本文 無効にする出力エスケープ="はい"><![CDATA[</は>]]></xsl:本文> <!-- 次のビットの形式でいくつかの数字を示しています。: "(合計 / % 合計の)" --> (<xsl:値の 選択="$TotalItems"/> / <!-- これは私たちの素敵なパーセントのラベルを作成します. おかげで, マイクロソフト! --> <xsl:呼び出しテンプレート 名前="percentformat"> <xsl:param と 名前="%" 選択="$BarPercent"/> </xsl:呼び出しテンプレート>) </td> <!-- 最後に, 出力、 <td> バーのタグ自体.--> <td> <テーブル cellpadding="0" cellspacing="0" 境界線="0" ="{ラウンド($BarPercent * 100)+1}%"> <tr bgcolor=""> <xsl:本文 無効にする出力エスケープ="はい"><![CDATA[&nbsp;]]></xsl:本文> </tr> </テーブル> </td> </tr> </xsl:テンプレート> <!-- これはいくつかの XSL テンプレートでは MS を見つけたから直接取得します。. --> <xsl:テンプレート 名前="percentformat"> <xsl:param 名前="%"/> <xsl:選択してください。> <xsl:とき テスト="番号の書式設定($%, '#,##0%;-#,##0%')= 'ナン'">0%</xsl:とき> <xsl:それ以外の場合> <xsl:値の 選択="番号の書式設定($%, '#,##0%;-#,##0%')" /> </xsl:それ以外の場合> </xsl:選択してください。> </xsl:テンプレート> </xsl:スタイル シート>

結果:

上から XSL は、このグラフを生成します。:

イメージ

基になるデータのステータス コードをクリックしてドリルダウンします。:

イメージ

思考の結論:

これは一般化することができます。?

このグラフの概念を愛してください。, 行き、とても手作業でコーディングを行う必要があるという事実を嫌いだが、. これを一般化できるかどうかを少し考えを与えてくれたし、私は楽観的, しかし、私はどこかにすべての仕事を提供しないパスに沿ってれんが造りの壁があることを少し恐れても. 誰もがこの上のいくつかの良いアイデアを持っている場合, コメントで注意してくださいまたは 私にメールします。.

垂直のグラフ:

これは水平バー グラフです。. 確かに垂直のグラフを作成することが可能です。. 我々 は、HTML を変更する必要があります。. 同じ方法を始めるだろう: 垂直のバー グラフの HTML 表現を作成し、XSL 経由で取得する方法を把握し、. 誰もが興味なら, 私はそれを試してみるし、うまくように説得される可能性. 誰かが既にそれを行っている場合, 私が知っていると私はあなたのブログへのリンクを喜んでますしてください🙂

垂直のグラフとの課題は、グラフのラベルは管理が困難だと思う, しかし、不可能ではない確かに.

フィールド名ガッチャ:

少なくとも 2 つの外を見るフィールド名とは.

最初, スペースを含むフィールド名は、XSL でエスケープするには. これはおそらく、ここで問題:

        <xsl:変数 名前="totalProposed" 
選択="カウント(/dsQueryResponse/行/行[空白を正規化(@Status) = '提案'])" />

場合"ステータス" 実際にという名前の列"ステータス コード" "Status_x0020_Code"として参照する必要がありますし、:

   <xsl:変数 名前="totalProposed" 
選択="カウント(/dsQueryResponse/行/行[空白を正規化(@Status_x0020_Code) = '提案'])" />

2 番目, 私はこれについて少しあいまいだと, また、フィールド名の変更の警告にする必要があります。. あなたのフィールド"ステータス コードに名前を付ける場合" その後, 「AFE 状況」を名前を変更する, 「内部名" 変わりません. 内部名が"ステータス コードをできます。" "Status_x0020_Code"として参照する必要があります. 「その他リソース" リンクが診断し、この種の問題の修正に役立つことがあります。.

その色について:

"赤を選んだ" それは現時点では私を喜ばせるため. 大した数の単なる視覚的な記述を提供するために異なる色を表示することはないです。, しかし、有用な KPI をまた提供するために. たとえば, 場合の割合"失速" AFE は > 10% その後、赤を表示します。, そうでなければ黒で表示します。. 使用 <xsl:選択してください。> これを達成するために.

その他のリソース:

幸せな変換!

<終了/>

私のブログを購読します。!

SharePoint はありません。 “アクセスします。” レポート

更新プログラム 01/28/08: この codeplex プロジェクトこの問題に対処します。: http://www.codeplex.com/AccessChecker. 私はそれを使用していません。, しかし、これが環境内で必要な問題が有望に見える.

更新プログラム 11/13/08: ジョエル ネルス非常に良い記事を書いている、大きなセキュリティ管理の問題にここで: http://www.sharepointjoel.com/Lists/Posts/Post.aspx?リスト 0cd1a63d % 2D183c % 2D4fc2 % 2 D 8320 -ba5369008acb =&ID = 113. 多数の有用なリソースへのリンクします。.

フォーラムのユーザーとクライアントはこれらの線に沿って質問します。: 「生成方法は、リストのすべてのユーザーにサイトへアクセスを行う" または、「方法は自動的にすべてのユーザーをリストに加えられた変更についてリストへのアクセスを警告することができます。?"

このボックスのソリューションの出力がないです。. ちょっと考える場合, それは理由を理解するは難しいではないです。.

SharePoint のセキュリティは非常に柔軟です. ユーザーの少なくとも 4 つの主要なカテゴリがあります。:

  • 匿名ユーザー.
  • SharePoint ユーザーとグループ.
  • Active Directory ユーザー.
  • フォーム ベースの認証 (FBA) ユーザー.

つまり、セキュリティの観点から、柔軟性, 任意の SharePoint サイトは劇的に違う別だろう. アクセス一覧レポートを生成するために, 1 つは、サイトのセキュリティ保護の方法を確認する必要があります。, 複数の異なるユーザー プロファイル ・ リポジトリをクエリと、その有用な方法. 一般的に解決困難な問題であります。.

どのように組織は、これに対処します。? 私はコメントであなたから聞いてみたいと思いますか 電子メール.

</終了>