当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2014年6月2日月曜日

XPagesで検索を行った結果をハイライト表示する

みなさん、こんにちは。

今日も頑張って更新しましょう。

相変わらず暑いので体調管理だけは気を付けて行うようにしましょう。
では、このボタンをクリックして先に進みましょう。
にほんブログ村 IT技術ブログへ




さて、今日はXPagesでの検索です。
某Q&Aサイトで質問が出ていたのですが、回答が付かないようなので気になって調べてみました。

DominoのWebアプリケーション(従来のWeb対応のノーツDB)は、全文索引を付けておけば、検索結果を強調表示してくれます。
ではXPagesでは、どうなんでしょうか?

XPagesでの全文検索の実装方法は、8. XPagesで全文検索機能を利用するには?に詳しく出ていますのでそちらを参照願います。

しかし、こちらのページを見ても、結果は強調表示されていませんね。
どうやら、XPagesでは検索結果の強調表示は標準では実装されていないようです。

となると、自分で作りこむしかないようです。

Webブラウザ上で強調表示を行うということなので、HTMLのタグを使うとよさそうです。
ということで調べてみると、<mark></mark>というタグがあるようです。
説明にも「検索結果の画面で文字をハイライトさせるのに利用します」といったことが書かれていますので、確かにこれで間違いなさそうです。

使い方は、<mark></mark>の「~」の部分がハイライト表示させたい文字列です。
今回の場合、検索文字列になります。
検索文字列をスコープ変数(ページを移動する場合は、sessionScope変数にしておく必要があります)に格納しておきます。

後は、検索結果を表示するページ内のデータの値を
検索文字列 → <mark>検索文字列</mark>
といった形で置換すれば良いのです。

この時、気を付ける点がいくつかあります。
  1. コントロールの「escape」プロパティはfalseにする
  2. escapeプロパティを持たないコントロール(複数行編集ボックス等)の場合、表示用の計算結果コントロールを作成して、そこでハイライト表示させるようにする
  3. ビューコントロールのビュー列の場合、コンテンツタイプをHTMLにする
  4. 検索結果ページから別のページに移動するときには、検索文字列のスコープ変数をクリアする
また、3.のビュー列の場合、データを「ビューの列」にしていると文字列の置換を行うことができないので、「計算結果の値」にして、
viewEntry.getColumnValue( "列名" );
という形で列の値を取得する必要があります。


ということで実装してみた結果が下図です。
検索結果をハイライトしてみた

文字列の置換方法は、Domino Designerのヘルプを見て探してみてください。
XPagesで使える@関数の中にありますよ。



今回の調査では、HTMLのmarkタグに行きつくかどうかがカギでした。
そこから先は、色々な方のHPを参照させていただき、文字列の置換という方法が現実的だということがわかりました。


このようにXPagesはHTML、CSS、JavaScriptの技術をふんだんに使っていますので、そういった技術情報の応用が可能なんですね。
XPagesを始められる方は、こういったページも調査対象にすると良いでしょう。


では、今日はこの辺で・・・


Web化するならXPages!



【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ


0 件のコメント: