TIPS: コンテンツ クエリ Web パーツを XSLT でカスタマイズする

コンテンツ クエリ Web パーツの出力をカスタマイズする方法です。
国内の SharePoint 関連の有名なブログでは、こぞって Style Library 内の Itemstyle.xsl を編集すればよいと書かれています。
これは、海外ブログの影響でしょうが、あまりにもネタコピペがひどいので、もっと踏み込んだ方法を紹介します。

問題点
他のブログにあるように、 Itemstyle.xsl を編集すると、影響がサイトコレクション全体に及んでしまいます。つまり、一つのパーツでの表示のために XSLT スタイルシートを変更すると、その他のパーツも同じスタイルになります。そうなると、一つのパーツで「タイトル」「公開日」を表示し、別のパーツで「タイトル」「ロケーション」のような異なる表示をさせることができなくなります。

解決へのアプローチ
MSDN ドキュメントで、ContentByQueryWebPart クラスのメンバーを見てみると、しっかりと ItemXslLink というプロパティがありますね。つまり、これが未設定だとデフォルトでサイト内の
/Style Library/XSL Style Sheets/ItemStyle.xsl
といういつものファイルを指しているわけです。

解決策
Web パーツが参照する XSLT は、XML 定義内にある ノードで指定されています。既定では、上記の ItemStyle.xsl が指定されているため、これを変更してあげることで、個別に用意した xsl ファイルを参照させることができます。もちろん、その他のプロパティもノード を同様に設定することで同じことができます。

応用
コンテンツ クエリ Web パーツは DataFormWebPart を継承しているため、ParameterBindings なども継承しています。
他のパーツから値を取ったり、サーバー変数を使用して表示することができます。

追記
※ 関西の某 Microsoft MVP に教えたところ、痛く感動されており、彼のブログで紹介されました。

コメントを残す