コンテンツ クエリ Web パーツの新機能

エンタープライズ コンテンツ管理チームでプログラム マネージャーをしている Dustin Anglin です。ここでは、よく知られている SharePoint Web パーツの 1 つ、コンテンツ クエリ Web パーツ (CQWP という略語になじみがある人も多いはずです) の新機能について説明します。

まだ Jim Masson による ECM の概要 Sangya Singh による WCM の概要 の双方を読んでいない場合は、事前にそれらを確認しておいてください。

CQWP の概要

CQWP をよく知らない人のために、ここではその動作と用途の概要を説明します。

コンテンツ クエリ Web パーツは、使いやすい UI によってクエリを作成することで Web ページ上の関連情報を収集し、そうしたコンテンツを構成可能な独自の方法で表示するために、サイト デザイナーが使用できるツールです。

image

CQWP は、単一のリスト、ライブラリなど、種類の異なる複数のスコープ上にあるロールアップ コンテンツをサイト コレクション全体のすべてのリストまたはライブラリに返すように設計されています。  SharePoint 2010 では、CQWP の単一リスト クエリが大きな単一ライブラリでも動作するように最適化され、大きなドキュメント ライブラリでのクエリ パフォーマンス向上のために設計されたスマート インデックスなどのツールを活用できます。

CQWP の詳細については、George Perantatos による SharePoint 2007 に関するブログ投稿 (英語) を参照されることをお勧めします。

CQWP を使用した関連ニュース記事 Web パーツの作成

何かを学ぶ際の一番良い方法は、例を見ることです。ここでは、CQWP を使用して現在読んでいる記事に関連するニュース記事を表示するという典型的なシナリオを想定します。また、古い記事は不要なので、最近の記事、たとえば先週作成された記事だけが表示されるように Web パーツを設定します。

クエリの作成: コンテキストに基づくクエリの駆動

コンテンツ クエリ Web パーツはあるページ上のクエリ処理されたコンテンツを表示するためのすばらしい手段ですが、新しいニュース記事を作成するたびに Web パーツ ゾーンへの新しい CQWP の追加が必要になるのは、特に同じ Web パーツを何度も設定する場合、困ります。

SharePoint 2007 では、CQWP をページ レイアウトに追加して (このシナリオの場合であれば "News Article" というページ レイアウトを作成します)、特定の種類のページのすべてにその CQWP を表示できました。問題は、その Web パーツに対してクエリを 1 つしか設定できなかったことです。つまり、"News Article" レイアウトを使用しているそれぞれのページは同じ結果セットを返すことになります。

ここでは、それぞれの "News Article" (ニュース記事) ページに、現在読んでいるその記事の関連記事 (スポーツ記事の場合は関連するスポーツ記事) を表示することにします。

また、現在の記事がどんな種類のニュース記事であるか (スポーツビジネスなど) を記述するためのメタデータ フィールドも必要です。そこで、"News Category" (ニュース カテゴリ) という新しい管理されたメタデータ フィールドを追加します。管理されたメタデータ フィールドは用語ストアにリンクすることができ、用語ストアでは作成者が選択するためのニュース カテゴリの管理分類を作成できます。

以下に、"News Article" ページ レイアウトの概要を示します。

image

先ほど説明したように、Web パーツは現在の記事のコンテキスト、具体的には現在の記事のニュース カテゴリによって駆動される必要があります。SharePoint 2010 では、クエリ フィルターの設定に次の 2 つの便利なトークンを使用することで、これを実現できます。

PageFieldValue

このトークンでは、現在のページ レイアウト上にあるフィールドを指定し、フィルターの値を現在のページのそのフィールド値で動的に置き換えることができます。

:  ここでは、ニュース記事の種類 (ビジネス、政治、世界、スポーツなど) を示すカスタムの管理メタデータ フィールドである "News Category" (ニュース カテゴリ) を作成し、これを "News Article" (ニュース記事) ページ レイアウトに追加しています。PageFieldValue トークンを使用することで、クエリは現在のページのニュース カテゴリに基づいて変化するようになります。現在のページのカテゴリが "Sports" (スポーツ) であれば、ページのうち "Sports" というタグが付いたものだけが返されます。

PageQueryString

PageFieldValue トークンと同様に、クエリで使用される値の URL クエリ文字列を参照できます。

:  クエリ文字列の値を URL に追加して "&NewsCategory=Sports" のようにすることで、"News Category" フィールドがクエリ文字列内の現在の値 (この場合は "Sports") に等しいページを返すように CQWP のクエリを設定できます。

異なる結果セットごとに新しいページを作成することなくさまざまな結果セットを Web パーツ内に表示する場合には、クエリ文字列パラメーターの使用が適しています。

image

この例では、PageFieldValue トークンを使用して、"News Category" フィールドに現在の記事のものと同じメタデータ値が入っている新しい記事を返すように CQWP を設定します。さらに、カスタムの "News Article" ページ レイアウトを変更することで、この CQWP は、関連ニュース記事を表示できる設定済みの新しい "News Article" ページのすべてに自動的に表示されるようになります。

このクエリを詳しく調べると、他にも 2 つのフィルターが追加されていることがわかります。1 つは現在の記事と同じ名前の記事をすべて除外する (基本的には、クエリ結果で現在の記事が重複しないようにする) もの、もう 1 つは常に新しい結果が得られるように過去 7 日間に作成されたニュース記事のみを返すようにするものです。

また、この例では、"News Category" メタデータ フィールドが、単一値のものも複数値のものも含めて、新しい管理メタデータ フィールド (これらは CQWP で完全にサポートされます) の 1 つになっています。この例には示されていませんが、CQWP はエンタープライズ キーワードの列や "All Tags" 列でのフィルター処理もサポートしています。"All Tags" 列には、クエリ処理されたアイテムのどのメタデータ フィールドにタグが含まれているかに関係なく、そうしたアイテムのすべての管理メタデータ タグが表示されます。

image

結果の表示: ツール ウィンドウからの列のマッピング

なかには好んで XSLT を利用する人もいるので、そういう人はどうぞ自力で XSLT を記述してください。  しかし、それ以外のおそらく大多数の人々は (XSLT コーダーに一目を置きながらも) XSLT の記述によってフィールドを表示しようとは決して思わないでしょう。

SharePoint 2010 では、CQWP のすばらしい新機能の 1 つによって、表示するフィールドをツール ウィンドウ UI で直接選択できます。クエリの定義は済んでいるので、[プレゼンテーション] (Presentation) セクションを開いてその内容を確認してみましょう。

image

ツール ウィンドウの [プレゼンテーション] (Presentation) セクションに移動すると、[表示するフィールド] (Fields to display) という新しいセクションがあり、定義済みの任意の XSL スタイルで表示するフィールドをそこに入力できます。そこで、アイテム スタイルを空のテンプレートと考え、表示できる要素の数や表示先を定義します。ただし、この時点ではどのフィールドを表示するのかは定義しません。テンプレートを選択したら、表示するフィールドを指定する必要があります。そのためには、指定したアイテム スタイルに応じて現れる各スロットに、表示するフィールドの情報を入力します。

ここで使用するスタイルでは、左側にイメージが表示され、ページへのリンクが記事のタイトルと短い引用 (ページ レイアウトで定義したカスタム フィールド) で表現されます。表示するフィールドの情報をこれらの各スロットに入力すると、次のような結果が得られます。

image

以上のように、XSLT にまったく関与せずに作業を終えることができました。

まとめ

これまでに実現したことをまとめておきます。

  • ページ レイアウトの変更を 1 か所で行うことで、すべてのニュース記事ページに CQWP Web パーツを追加しました。
  • この Web パーツを現在のページのコンテキストに基づいて動的に駆動されるように構成しました (スポーツ記事であれば関連するスポーツ記事が、ビジネス記事であればその他のビジネス記事が返されます)。
  • カスタムの XSLT を記述することなく、カスタム フィールドを表示するように Web パーツのプレゼンテーションを構成しました。

以下に、最終的な成果物の実行結果を示します。

image

これで、コンテンツ作成者が新しい記事を書くたびにその記事に関連する最近の記事が Web パーツによって表示されるようになり、コンテンツ作成者は Web パーツやクエリに煩わされずに済みます。

最後に

ここで紹介したのは、コンテンツ クエリ Web パーツとコンテキスト駆動クエリの併用によって新たにできるようになったことの 1 つに過ぎません。こうした方法によって、コンテンツの表示方法をコードを書かずに簡単に構成できます。CQWP をはじめとする SharePoint 2010 のすばらしい ECM 新機能をぜひご確認ください。

これはローカライズされたブログ投稿です。原文の記事は「What's New with the Content Query Web Part」をご覧ください。