SharePoint 検索のカスタマイズ 4 (作成者= ログインユーザーでフィルタ表示 (1))

検索カスタマイズシリーズ4回目です。ここからが私がとても苦労した部分です。

シリーズ3回目の投稿の内容までだと、すべてのサイトからドキュメントライブラリに保存されたドキュメント検索ができるようになりました。あと足りない設定は自分が作成したドキュメントだけを検索したい!という部分ですよね。

<設定するために必要な手順>

・検索の範囲を作成
・検索センターに新しいタブを作成
・検索結果をどう表示するかスタイルシートを編集

シリーズ2回目で検索の範囲についてご紹介しましたが、検索範囲のルールの指定で「Author = ログインユーザー名」というルールは作成できませんでした。ではどうやって自分が作成したドキュメントだけを検索できるように設定を行うかというと、検索結果から「作成者=ログインユーザー」の結果のみを表示するように、表示に対してフィルタをかけることにしました。

SharePoint では検索結果は XML データとして返されるので、スタイルシートの編集を行うことで結果セットをどう表示するかをカスタマイズすることができるんです。

ただ、ここで問題になったのがサイトへのログインユーザー名をスタイルシート内でどうやって取得するのかというところです。いろいろ調べたところ、Collaborative Application Markup Language (CAML) の CurrentUserName を使ってログインユーザー名を取得できることが分かりました。また、CurrentUserName の値をスタイルシート内で利用するためには、Web パーツ内に CAML の CurrentUserName を利用するための定義が必要だということもわかりました。

ユーザーが検索した結果は、検索結果ページの [主要な検索結果 Web パーツ] 内に表示されますよね。主要な検索結果 Web パーツには、CAML の CurrentUserName を利用するための定義が含まれていません。そこで、まずは標準搭載の主要な検索結果 Web パーツをベースに、ログインユーザー名を取得できる機能を追加した検索結果 Web パーツを作成することにしました。

Web パーツの作成

1. サイト コレクションのトップ レベル サイトを開きます。

2. [サイトの操作] – [サイトの設定] – [すべてのサイト設定の変更] をクリックします。

3. ギャラリーグループ内の [Web パーツ] をクリックします。

4. Web パーツ ギャラリーが開くので、[SearchCoreResults.webpart] の [編集] をクリックし、さらに [エクスポート] をクリックして、デスクトップなどローカル上にコピーします。

5. ローカル上にコピーした [SearchCoreResults.webpart] を [SearchCoreResults_Custom.webpart] とファイル名を変更します。

6. ファイル名を変更した [SearchCoreResults_Custom.webpart] をテキストエディタで開き、以下のように UserID というパラメータ名で CurrentUserName を利用するための定義を追加します。また、タイトルのプロパティ値を編集し、上書き保存します。

<?xml version="1.0" encoding="utf-8"?>
<webParts>
 <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"&gt;
  <metaData>
   <type name="Microsoft.Office.Server.Search.WebControls.CoreResultsWebPart, Microsoft.Office.Server.Search,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" />
   <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
  </metaData>
  <data>
   <properties>
    <property name="Title" type="string">主要な検索結果UserID</property>
    <property name="Description" type="string">検索結果とそれに関連するプロパティを表示します。</property>
    <property name="ChromeType">None</property>
    <property name="AllowMinimize" type="bool">true</property>
    <property name="AllowClose" type="bool">true</property>
    <property name="Hidden" type="bool">false</property>
    <property name="ScopeID" type="int">1</property>
    <property name="ParameterBindings" type="string">&lt;ParameterBinding Name="UserID" Location="CAMLVariable" DefaultValue="CurrentUserName"/&gt;</property>
   </properties>
  </data>
 </webPart>
</webParts>

7. Web パーツ ギャラリーに戻り、[アップロード] をクリックして、[SearchCoreResults_Custom.webpart] をギャラリー内に保存します。

8. 保存時にWeb パーツファイルのプロパティを入力する画面が表示されるので、以下のように入力して [OK] をクリックします。

[グループ] - [値を指定してください] を選択し、「検索」と入力

[クイック追加グループ] - [値を指定してください] を選択し、「Search」と入力

これで、ログインユーザー名を取得できる機能を追加した検索結果 Web パーツができあがりました。Web パーツのスタイルシート内でログインユーザー名を取得できるようにするための方法を調べるのに本当に時間がかかってしまいました。いろいろな Web パーツを SharePoint Designer 2007 で配置してはどんなコードができあがるのかを見て、ログインユーザー名を取得する機能がもともと利用できるものがないか探し、そこからヒントを得たんです。

では、今回も長くなっちゃいましたが、ここまでにします。次回でとうとう検索カスタマイズシリーズも最終回です。

奥田 理恵

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中