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

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

2016年5月16日月曜日

XPagesで複数DBの検索を行ってみる

皆さん、こんにちは。
今日もXPagesを頑張ってますか?

今月の黄金週間の間に嬉しいニュースがありましたね。
XPages on Bluemix がリリースされました
ついにXPages on Bluemixが正式なものとなったというニュースです。

これまでもベータ版という位置づけで利用できていたので、
何がどう変わった?というほどのものではありませんが、
これを機にXPagesをもっと活用してみましょう。


先日もノーツコンソーシアムの「ザ・ノーツ研究会」で、
複数のノーツDBを検索する方法が「ドメイン検索」くらいしかない。XPagesアプリでそんなのを作れないか?
といった話がありました。
この時は、OpenNTFにアプリがあったはずだとか、「作るとしたら、複数DBを全文検索して、結果をマージするくらいだよね」といった話になり、今後の実証実験の正式対象にはなりませんでした。

I社の方々が、ちょっと残念そうな顔をしていたので(笑)、ではちょこっとだけ調べてみましょう。
ということで、今回の話題は
XPagesアプリで複数DBを検索する
です。


つくっても良いのですが、時間がかかりそうというのと、サンプルがあるのであれば、それを使ってみた方が面白そう。
という理由でOpenNTFから探すことにしてみました。

検索用語は

multiple DB search site:openntf.org

としてみました。

するといくつかのプロジェクトが表示されました。

1つ目は、
Multi-Database Search Plugin
です。

こちらは
ノーツクライアント(スタンダード版)にインストールするプラグインで、
ノーツクライアント上にある複数のノーツDBを同時に検索してくれるものです。
設定画面で、どのノーツDBを検索対象にするのかを選択できるので、エンドユーザでも利用しやすくなっています。
検索そのものは画面右上にある検索ボックスで入力すれば良いようになっています。

唯一、残念なのが、検索対象にできるのはノーツクライアント上のノーツDBだけということで、ドミノサーバ上のものは選べないという事です。
実務には使えそうにないですね・・・


2つ目は
Xpages Multi Database Search Custom Control
です。

こちらは、複数のノーツDBを検索することができるXPagesアプリケーションです。
サンプルDBでは、このXPagesアプリケーションが配置してあるドミノサーバ上ののーつDBを同時に検索して、結果を表示してくれるようになっています。

検索部分はカスタムコントロール化されていて、カスタマイズもしやすくなっています。
※マニュアルにカスタマイズ方法が書かれています。

なお、こちらのXPagesアプリケーションは、8.5.2以上で動作するとのことです。
ただし、8.5.2の場合、XPages Extension Libraryをインストールする必要があります。
8.5.3 Upgrade pack1や9.0.0以上の場合は、そのまま動作させることができます。

画面はこちら。
初期画面

右上の編集ボックスにキーワードを入力して、虫眼鏡のアイコンをクリックすると検索中の画面になります。
ノーツDB検索中

検索が終了すると、結果が一覧画面として表示されます。
検索結果

一番左の列をクリックすると、ノーツDBのトップページがWebブラウザ上で開き、左から2番目の列をクリックすると、検索結果に該当した文書がWebブラウザ上で表示されます。


このXPagesアプリケーションは、XPinCにも対応していて、ノーツクライアントのスタンダード版でも利用できるのです。

デフォルトの仕様としては
ドミノサーバ上にあるノーツDBのうち、全文索引がついている16個のノーツDBを検索対象にしており、そのうち最大50文書を検索結果として表示させることができます。


ここで、実は問題がありました。
このアプリケーション、ダウンロードしただけでは正常に動作しませんでした。
ちょっとした修正が必要になります(少なくとも私の環境では動作しませんでしたし、ヘルプを見る限りでは、エラーになるはずです)。

「searchFunctions」という名前のサーバーJavaScriptがあるので、それを開きます。
18-20行目付近に
var db_CurrentDB:NotesDatabase = db_Directory.getFirstDatabase(NotesDbDirectory.DATABASE);
while(db_CurrentDB != null){
 if (db_CurrentDB.isFTIndexed() == true){

という個所があります。

ここにあるdb_CurrentDBisFTIndexedという命令ですが、ノーツDBがオープンしていないと動作しません。
しかし、db_Directory.getFirstDatabase(NotesDbDirectory.DATABASE)はノーツDBをオープンしてくれません。
したがって、常にエラーになってしまうのです。

そこで、
この辺りを
try {
    db_CurrentDB.open();
        ・・・
} catch(e) {
}

と変えます。
open命令を追加しています。
この時、アクセス権がないと、エラーになってしまうので、try ~ catchで例外処理として回避しておく必要があります。

これで、このアプリケーションが動作します。


実際のノーツDBの検索はJavaで記述されているので、ちょっと解析が大変ですが、現状のままできちんと動いてくれますので、問題ないでしょう。
検索対象にするノーツDBの数や検索結果数などはマニュアルを見てカスタマイズしてみてください。


ということで、本日は複数のノーツDBを検索するプラグインとXPagesアプリケーションを紹介してみました。

このようにOpenNTFにはとても便利なツールがたくさんあります。
ダウンロードして使ってみましょう。
アプリケーション開発者の方は、コントロールの便利な使い方を発見できるかもしれませんよ!?


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










Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: