概要と目標
ボックスのうち, MOSS’ コンテンツのクエリ Web パーツ (CQWP) その結果、一覧形式で表示します。, 検索結果に同じような. また、グリッド形式で結果を表示することが可能です。 (すなわち. HTML テーブルの形式). グリッドのフォーマットはいくつかの状況で優れています。. この記事でその効果を達成するために方法を記述します。.
ビジネス シナリオ
私はモスをエンタープライズ全体に展開のクライアントで働いています。. プロジェクト階層内の最初のクラスの市民は、独自の最上位レベルのサイトを持っている、我々 は彼らの分類を設計しています。. プロジェクト マネージャーは、プロジェクトのサマリー情報の単一リストを維持します。, タイトルなど, 予算, 予想される完了日, 残りの予算と他の集計タイプのフィールド. 「シングルトンで" 私は必ず 1 つだけ項目が含まれ、SharePoint のカスタム リストを意味します。. 簡単に言えば, それはこのように見える:
技術的なアプローチは多くの説明と同じ ここで (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP は、XSL 変換を使用してレンダリングするブラウザーの HTML を出力するには.
私は常に XSL は悪夢のようなので、XSL に飛び込む前に結果を思い描く. ここでは私の目的の結果:
このような HTML は、その結果を生成します。:
<html> <体> <センター> <テーブル 境界線= 1> <!-- ラベル-> <tr bgcolor青 => <td><フォント 色= ホワイト><b>プロジェクト名</b></フォント></td> <td 位置合わせ= 右><フォント 色= ホワイト><b>完全な日付</b></フォント></td> <td 位置合わせ= 右><フォント 色= ホワイト><b>予算</b></フォント></td> <td 位置合わせ= 右><フォント 色= ホワイト><b>実際の経費</b></フォント></td> <td><フォント 色= ホワイト><b>全体的な状態</b></フォント></td> </tr> <tr> <td>再コンピューター室.</td> <td 位置合わせ= 右>02/01/08</td> <td 位置合わせ= 右>22,500.00</td> <td 位置合わせ= 右>19,000.00</td> <td>進行中</td> </tr> <tr> <td>SQL アップグレードのサーバをプロビジョニング</td> <td 位置合わせ= 右>04/01/08</td> <td 位置合わせ= 右>7,500.00</td> <td 位置合わせ= 右>0.00</td> <td>計画</td> </tr> </テーブル> </センター> </体> </html> |
アプローチ
グリッドを作成する手順します。:
- グリッドの各コンポーネントを識別します。 (行/列).
- 定義し、必要なサイト内の列を作成します。.
- サブ プロジェクトを単一のリストのサイトを作成します。.
- Web ページに、CQWP を追加し、あなたのリストを検索するように構成.
- 追加の列を収集するために、CQWP の XML を変更します。.
- テーブルを生成する XSL を変更します。.
数は 6 に集中するつもり. 番号 1 から 4 は、まっすぐ進むと CQWP ユーザーが既に行われている何か. 5 番は MSDN からこの徹底的なスクリーン ショット満載記事を含む他の人が十分に文書化されています。 ここで (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ヘザー ソロモンのブログ ここで (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
ナットとボルト
開始し、ステップ 1 から 5 は、MSDN のドキュメントとヘザー ソロモンの記事に従って.
この時点で, ページに、CQWP を追加したし、するが、 <CommonViewFields> 必要に応じて構成.
通常の手順に従って, これらの中間結果を得る:
1. コンテンツ タイプを作成します。, そのコンテンツ タイプの 2 つのサイト テンプレートのカスタム リスト. ここでは、コンテンツのタイプ:
ここでは、サイトの構造:
2. 私のプロジェクトのサブサイトとシングルトン プロジェクト サマリー リストを作成した後、CQWP を追加します。:
3. 経由するすべての追加情報を追加します <CommonViewFields>:
<プロパティ 名前="CommonViewFields" タイプ="文字列">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</プロパティ>
1 つの行またはそれのすべてのプロパティ フィールドを維持しなければならなかったことに注意が働かないでしょう (CQWP は、クエリ結果項目をないこと私に言うだろう).
4. この時点で, MSDN の記事「を超えて移動する準備整いましたとヘザー ソロモンの記事を上にフリップ. 彼女の手順をステップ付近から #5 作成をカスタマイズする / ItemStyle.xsl の実体化バージョン. ヘザーを忠告します。, ステップ アップ 11 これらの中間結果を得る:
4.1: 私 XSL テンプレートの名前をとおり:
<xsl:テンプレート名 ="グリッド" 一致"の行を =[@Style =「グリッド」]" モード =「itemstyle」>
私も若干示唆彼女を変更します。 <xsl:それぞれ …> 追加することによって、 <br/> クリーナーのリストを提供するタグ:
<xsl:それぞれ 選択="@*"> P:<xsl:値の 選択="名前()" /><br/> </xsl:それぞれ>
4.2: Web パーツを変更します。, 外観に移動し、私の"グリッドを選択します" スタイル:
変更を適用して、ここでは、結果:
我々 のフィールドを上から見ることができます。 (プロジェクト名, 経費, ステータス, など) 我々 は、HTML を出力するときに使用するの. それだけでなく, XSL のこれらの列を参照する必要がありますに使用する名前がわかりますが、. たとえば, "Project_x005F_x0020_Name"としてプロジェクトの進捗状況を参照します。.
この時点で, ヘザーのブログから、これらの巨人の肩から出発します。, 自分自身の小さなビットを追加します。.
ContentQueryMain.xsl
メモ: ItemStyle.xsl だけでなく ContentQueryMain.xsl に変更を加えるとき, 変更の効果を確認する前にそれらのファイルを再度チェックインする必要があります。.
グリッド作る目的のため, モスは、CQWP から見る結果を生成する 2 つの XSL ファイルを使用します。. 出力の前のビットを生成するには, ItemStyle.xsl を修正しました. モスは実際に別の XSL ファイルを使用します。, その HTML を生成する ItemStyle.xsl と共にに ContentQueryMain.xsl. その名の通り, ContentQueryMain.xsl は、"メインです。" XSL 変換の全体的な流れを制御します。. 見つかったすべての項目を反復処理し、ItemStyle.xsl 1 つずつテンプレートに渡します. ItemStyle.xsl オープンを生成するを変更します <テーブル> 最初の行のデータおよび閉鎖の出力前にタグ <テーブル> 最後の行を出力後のタグ. これを達成するために, ContentQueryMain.xsl が変更され、"グリッドに 2 つのパラメーターを渡す" ItemStyle.xsl でテンプレート, "最後の行" 「現在の行」. ItemStyle.xsl はこれらを使用して、条件付きで必要なタグを生成するには.
ヘザー ソロモンのテクニックを使用してください。, 我々 は ContentQueryMain.xsl を探します. ItemStyle.xsl と同じ場所にあります。. このスクリーン ショットを助ける必要があります。:
次の変更を加える必要があります。:
- Xsl テンプレートを変更します。, "CallItemTemplate" 実際に ItemStyle.xsl でグリッド テンプレートを呼び出す. それはカバーの開閉を条件付きで生成する必要があるデータがあるのでグリッド テンプレートに 2 つのパラメーターを渡します <テーブル> タグ.
- "CallItemTemplate を呼び出す ContentQueryMain.xsl の別のビットを変更します。" それを渡す"LastRow" パラメーターを LastRow 私たちグリッド テンプレートに渡される可能性がありますので.
"OuterTemplate.CallItemTemplate という名前のテンプレートを見つける" 文字列で識別されます。:
<xsl:テンプレート 名前="OuterTemplate.CallItemTemplate">
次のように全体のテンプレートを置き換える:
<xsl:テンプレート 名前="OuterTemplate.CallItemTemplate"> <xsl:param 名前="CurPosition" /> <!-- LastRow」を追加します。" パラメーター. 我々 だけがあるとき使用で項目スタイル パス「グリッド」. --> <xsl:param 名前="LastRow" /> <xsl:選択してください。> <xsl:とき テスト="@Style = 'NewsRollUpItem'"> <xsl:テンプレートを適用 選択="." モード="itemstyle"> <xsl:param と 名前="EditMode" 選択="$cbq_iseditmode" /> </xsl:テンプレートを適用> </xsl:とき> <xsl:とき テスト="@Style = 'NewsBigItem'"> <xsl:テンプレートを適用 選択="." モード="itemstyle"> <xsl:param と 名前="CurPos" 選択="$CurPosition" /> </xsl:テンプレートを適用> </xsl:とき> <xsl:とき テスト="@Style = 'NewsCategoryItem'"> <xsl:テンプレートを適用 選択="." モード="itemstyle"> <xsl:param と 名前="CurPos" 選択="$CurPosition" /> </xsl:テンプレートを適用> </xsl:とき> <!-- 現在の位置と lastrow グリッド itemstyle.xsl テンプレートに渡す. ItemStyle.xsl が使用オープンを放出して終了 <テーブル> タグ. --> <xsl:とき テスト="@Style = 'グリッド'"> <xsl:テンプレートを適用 選択="." モード="itemstyle"> <xsl:param と 名前="CurPos" 選択="$CurPosition" /> <xsl:param と 名前="最後" 選択="$LastRow" /> </xsl:テンプレートを適用> </xsl:とき> <xsl:それ以外の場合> <xsl:テンプレートを適用 選択="." モード="itemstyle"> </xsl:テンプレートを適用> </xsl:それ以外の場合> </xsl:選択してください。> </xsl:テンプレート> |
コメント、変更の目的を説明します。.
もちろんです, "OuterTemplate.CallItemTemplate" 自体は別のテンプレートから呼び出される. このテキスト文字列を検索してそのテンプレートを特定します。:
<xsl:テンプレート 名前="OuterTemplate.Body">
OuterTemplate.Body の指示をスクロールし、LastRow パラメーターを次のように挿入 (斜体のコメントとして表示されます。):
<xsl:呼び出しテンプレート 名前="OuterTemplate.CallItemTemplate"> <xsl:param と 名前="CurPosition" 選択="$CurPosition" /> <!-- LastRow パラメーターを挿入します。. --> <xsl:param と 名前="LastRow" 選択="$LastRow"/> </xsl:呼び出しテンプレート>
これすべての後, 我々 は最終的に私たち ItemStyle.xsl を出すことができるように正しくセットアップされてものを持っています。 <テーブル> 適切な場所にタグ.
ItemStyle.Xsl
メモ: もう一度, これらの変更の効果を確認するように変更を行った後 ItemStyle.xsl でチェックします。.
ここに 2 つのタスクがあります。:
- グリッド テンプレート全体を置き換える. コピー/ペーストを下からすることができます。.
- "Formatcurrency できるようにするテンプレート定義の外部のいくつかのちんぷんかんぷんの追加します。" テンプレートを使用. (XSL に関する微妙なハンドルを持って私はことを伝えることができます。).
最初, ItemStyle.xsl の上部にあります。, この行を追加します:
<!-- 米国を表示させることができますいくつかマンボ ジャンボ. 通貨. --> <xsl:10 進形式 名前="スタッフ" 桁="D" /> <xsl:テンプレート 名前="既定" 一致="*" モード="itemstyle">
私は追加直接前に注意してください、 <xsl:テンプレート名 ="デフォルト" …> 定義.
次, グリッド テンプレートに戻る. グリッド テンプレート全体を以下のコードに置き換えます. それは徹底的にコメントします。, 私にメールや質問がありましたら、私のブログにコメントを残すことを躊躇しないが、.
<xsl:テンプレート 名前="グリッド" 一致="行[@Style = 'グリッド']" モード="itemstyle"> <!-- ContentMain.xsl は、CurPos と最後に渡します. 我々 は条件付きでオープンを出力するこれらを使用しての開閉 <テーブル> タグ. --> <xsl:param 名前="CurPos" /> <xsl:param 名前="最後" /> <!-- 次の変数が標準 ItemStyle.xsl から変更されていません --> <xsl:変数 名前="SafeImageUrl"> <xsl:呼び出しテンプレート 名前="OuterTemplate.GetSafeStaticUrl"> <xsl:param と 名前="UrlColumnName" 選択="「ImageUrl」"/> </xsl:呼び出しテンプレート> </xsl:変数> <xsl:変数 名前="SafeLinkUrl"> <xsl:呼び出しテンプレート 名前="OuterTemplate.GetSafeLink"> <xsl:param と 名前="UrlColumnName" 選択="「LinkUrl」"/> </xsl:呼び出しテンプレート> </xsl:変数> <xsl:変数 名前="DisplayTitle"> <xsl:呼び出しテンプレート 名前="OuterTemplate.GetTitle"> <xsl:param と 名前="タイトル" 選択="@Title"/> <xsl:param と 名前="UrlColumnName" 選択="「LinkUrl」"/> </xsl:呼び出しテンプレート> </xsl:変数> <xsl:変数 名前="LinkTarget"> <xsl:場合 テスト="@OpenInNewWindow = 'true'" >_blank</xsl:場合> </xsl:変数> <!-- ここで我々 は、変数を定義します。, "tableStart". これは列ラベルと同様に、テーブルの開口部を定義するために使用する HTML を含む. その場合 CurPos = 1, CDATA タグで HTML が含まれています. それ以外の場合, それは空になります. ItemStyle は ContentQueryMain.xsl で呼び出されるたびに、tableStart の値はエミッタ. --> <xsl:変数 名前="tableStart"> <xsl:場合 テスト="$CurPos = 1"> <![CDATA[ <表の罫線 = 1> <tr bgcolor ="blue"> <td><フォントの色「白」を =><b>プロジェクト名</b></フォント></td> <td 整列 =「右」><フォントの色「白」を =><b>完全な日付</b></フォント></td> <td 整列 =「右」><フォントの色「白」を =><b>予算</b></フォント></td> <td 整列 =「右」><フォントの色「白」を =><b>実際の経費</b></フォント></td> <td><フォントの色「白」を =><b>全体的な状態</b></フォント></td> </tr> ]]> </xsl:場合> </xsl:変数> <!-- 別の変数, tableEnd は単に終了を定義タグを表. TableStart と同様に, それは常にエミッタ. だからこそ、その値が割り当てられているかどうか我々 は ContentQueryMain.xsl で最後の行を渡されてきたに基づいて条件付きで. --> <xsl:変数 名前="tableEnd"> <xsl:場合 テスト="$CurPos = $Last"> <![CDATA[ </テーブル> ]]> </xsl:場合> </xsl:変数> <!-- 常に tableStart の内容を出力します。. これは ContentQueryMain.xsl によって私達に渡された最初の行ではない場合, 我々 はその値が空白になります知っているし、. 出力エスケープを無効にするとき tableStart ない空白, ブラウザーでレンダリングしたい実際の HTML が含まれています. 我々 は教えていない場合 XSL パーサーを無効にする出力エスケープ, ようなものが生成されます"<テーブル>" 」の代わりに<テーブル>". --> <xsl:値の 選択="$tableStart" 無効にする出力エスケープ="はい"/> <tr> <!-- P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status --> <td> <xsl:値の 選択="@Project_x005F_x0020_Name"/> </td> <td 位置合わせ="右"> <xsl:値の 選択="@Project_x005F_x0020_End_x005F_x0020_Date"/> </td> <td 位置合わせ="右"> <xsl:呼び出しテンプレート 名前="formatcurrency"> <xsl:param と 名前="値" |
これは非常に有用されています。. ありがとう!
ああ… それは私のリストのスタイルを異なるという名前をクリックし、ContentQueryMain.xsl でそれを調べていること「スタイル」を実現していないので:
<xsl:とき test="@Style='NameOfMyStyle'">
名前を変更するとそれが働いた. 🙂
それはほとんど私のために働いた: 出力を管理します </テーブル> 終了タグを正しく, しかし、開始タグがありません。. テストと思われる ="$CurPos = 1" true を返さない. しかし、なぜ?
偉大なポスト. 上記のすべてのものを行っているポール. クエリを持っています。, どうすれば達成"合計実際の支出の合計" または 2 つの列の値の合計.
カスタムの ContentQueryMain、ItemStyle xsl ファイルを作成するとすべての作業を行っています。? 私が求める理由は、パッチやアップグレードで上書きされる私のカスタム スタイルを心配したくないです。. 例はありますか? 私が試した、ContentQueryMain.xsl の同一コピーを作成し、その新しいカスタム コピー スタイル ライブラリにアップロードします。. .Webpart の MainXslLink プロパティでこの xsl ファイルへの参照を置くとき, 私は得る 401 承認されていません。. カスタムの xsl ファイルは、公開済みのバージョンと誰もがそれへの読み取りアクセス.
素晴らしい記事のおかげで! これは今、最後の数日間と戦っています。.
こんにちは, これは本当に参考になった投稿. 私はそれすべての作業をしています。, また実装されたマイクブラウン変更グループ
CQWB のプロパティでグループ化パラメーターとして選択したものは何でもによってテーブル内の結果.
私は、リンクにもタイトルを作った, だからうまく動作します。. 私はまだ 1 つの問題があります。, しかし. サイト名で結果をまとめています. 表の中で, それはそれらをうまくグループします。, それはすばらしく見えます、, それはまだすべてのグループを印刷
名前(私の場合、サイト名) 表の上. 誰がどのようこれらの取得をなくす?
おかげで,
グレッグ
ニースの記事. 一見を与える私のテーブルの既定の Sharepoint リストのリストのソース コードを分析することによって管理. ここでは、ItemStyle に収まるように必要なメイン HTML ブロックです。:
<表の幅 ="100%" クラス ="ms listviewtable" 国境 = 0 cellspacing 0 cellpadding = = 1 dir =「なし」>
<!–ヘッダー–>
<TR のクラス ="ms viewheadertr" VALIGN = トップ>
<TH nowrap スコープ"col =" クラス ="ms で vh2"><div のスタイル ="幅:100%;位置:相対;左:0;ページのトップへ:0;">
<表のスタイル ="幅:100%;" CtxNum ="1" 高さ ="100%" cellspacing 1 cellpadding を = = 0 クラス ="ms unselectedtitle">
<TR>
<TD の幅 ="100%" クラス ="ms vb" nowrap>
設定デュ価 ici
</TD>
<TD のスタイル ="位置:絶対;">
</TD>
</TR>
</テーブル></div>
</第 5 回>
<!–すべてのヘッダー セルを繰り返します–>
</TR>
<!– テーブルのデータ –>
<TR のクラス ="">
<!–データ列, ポールのコード ハイパーリンクに最初の 1 つを使用します –>
<TD クラス ="ms-vb2">ここでのデータ</TD>
<!–空の列–>
<TD クラス ="ms-vb2">
<dir にまたがる = なし></スパン><
/TD>
<!–日付の列–>
<TD クラス ="ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***代替の行 – モジュロ 2 の現在の行に基づいて代替クラスが挿入されます、新しい XSL 変数を使用します。–>
<TR のクラス =「ms 交互」>
…
</TR>
</テーブル>
Thatz 正確に探していた.あなたは人を揺する.長いライブ.あなたのポストが大好きです。.
<xsl:適用するテンプレートを選択 ="。" モード =「itemstyle」>
<xsl:param の名前 ="CurPos" 選択"$CurPosition =" />
<xsl:param の名前 ="最後の" 選択"$LastRow =" />
<xsl:param の名前 ="StartNewGroup" select="@__begingroup" />
</xsl:とき>
<xsl:いつテスト ="$StartNewGroup = 'True'">
<tr>
<td >
<xsl:呼び出しテンプレート name="OuterTemplate.GetGroupName">
<xsl:param の名前 ="グループ名" select="@*[名前()$Group =]"/>
<xsl:param の名前 ="GroupType" 選択して"$GroupType"=/>
</xsl:呼び出しテンプレート>
</td>
</tr>
</xsl:とき>
<xsl:それ以外の場合>
</xsl:それ以外の場合>
</xsl:選択してください。>
こんにちはポール,
Xml と xsl とコンテンツ クエリ web パーツを使用する場合, xslt の書式を設定する良い方法を発見しました。? 右の痛みには証明しているしようとして変更を行い、テストの設計は、* * テキスト エディターを使用して…
すべてのベスト
(例えば. https://myweb.com/Marketing/images/icn-order.gif, )
CommonViewFields フィールドの種類の画像や写真を使用する必要があります。? (例えば. InternalColumnName, イメージ)
あなたのポストはまさに私が探していたもの. ただし, 働くためにそれを得ることができません。.
私はさまざまなドキュメントに格納されているドキュメントがあります。. ライブラリは、カスタム クラスの列を使用して分類 (選択: 1 または 2. クラスに基づいてこれらのドキュメントを表示する CQWP を使用したいです。.
CQWP を追加することができた, SPD にエクスポートします。, リスト ビューにカスタム フィールドを表示する itemStyle.xls を構成します。. ただし, 私は正常にここで説明する実装しませんでした。.
これらは私の CQWP で表示し列です。:
ファイルの種類 (アイコンを表示するには)
ファイルのタイトル
最後に変更された日付
だれによって変更されました。
チェック アウトする
コメント欄でチェック
私は現在、リスト形式で結果を持ってください。. Talble 形式にそれを変更する方法.
おかげで.
佐治
申し訳ありません私の名前を確認しない missspelling ここで、 ” 来た.