2019年2月25日月曜日

エンドユーザーが全文検索をもっと使いやすくするアイデア

ビューの上部に表示される検索バーへ Japan などとタイプして Enter キーを押す、という操作は多くのエンドユーザーが行っていますが、この場合すべてのフィールドにある Japan というワードがヒットしてしまいます。
検索結果をもっと絞り込みたい場合、例えば
[Country] = "Japan"
といったようにフィールド名を含めたクエリーに書き換えて検索するようエンドユーザーへ勧めますが、これがなかなか浸透しません。

浸透しない理由は、フィールド名はエンドユーザーに馴染みがないからではないか、と推測しています。フィールド名が多く覚えられないことも原因の一つかも?

検索ビルダーを利用してフォームを使って検索できることは承知しているのですが、例えばキーワードリストから選択するようなフィールドの場合は検索ビルダーではキーワードリストが表示されず、タイプするために値を覚えておく必要があったりと使い勝手はいまひとつと言わざるを得ません。

そこで、こういった検索バーにおける不便を解消するため、次のような作りこみを行い、実現しました。
  1. ビューのアクションボタン「詳細検索」をクリックする(ダイアログボックスを表示する)
  2. ダイアログボックスにあるフィールドへ文字列をタイプ(またはリストから選択)して[OK]ボタンをクリックする(検索バーへ転記する文字列を生成してクリップボードへ転記。検索バーを表示してクリップボードの値を貼り付け、Enterキーを押すコードを実行し、ビューに検索結果を表示する)
しかしながら、Enterキーを押すために Win32 API をコールしており Windows 向けのものとなっています。このコードではもうすぐ登場する Domino Mobile Apps に対応できないと考えています。

もし、検索バーへのクエリーの転記をもっとシンプルにしたり、転記後にEnterキーを押すコードを呼ぶこと無しに検索が始まるアイデアなどございましたらシェアしてくださると嬉しいです。

以下、現在のコードです。

ビューのアクションボタン「詳細検索」では次のコードを書いています。

--- 詳細検索ボタンの式 ---
tmp := @DialogBox("MakeQuery"; [AutoHorzFit]: [AutoVertFit]: [NoNewFields]: [NoFieldUpdate]: [NoNote]: [SizeToTable]; "Input for Search String");
@If(tmp=@True; @Success; @Return(""));
@Command([ViewShowSearchBar]; "1");
@Command([EditPaste]);
@Command([RunAgent]; "PressEnterKey")

1行目で呼び出すダイアログボックス内で使用しているサブフォーム「MakeQuery」には、キーワードのリストからの選択が可能なフィールド「Country」を配置しています。
フィールド「Country」で値を選択してダイアログボックスのOKボタンをクリックすると、フィールド「Query」の式がクエリー文を生成します。

--- フィールド Query の式 ---
str := Country;
"[Country] = (\"" + str + "\")"

※MakeQuery には Country 以外にも複数のフィールドがあるのですが、ここでは1つだけとしています

生成されたクエリー文をサブフォームのイベント Postrecalc のコードでクリップボードへ転記します。

--- Postrecalc のコード ---
Sub Postrecalc(Source As Notesuidocument)
    Call Source.GotoField("Query")
    Call Source.SelectAll
    Call Source.Copy
End Sub


「詳細検索」ボタンの3行目以降で、検索バーを表示してクリップボードの値を貼り付け、Enterキーを押すコード(エージェント「PressEnterKey」)を呼び出します。

--- Enter キーを押すコード(エージェント「PressEnterKey」) ---
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Integer, ByVal bScan As Integer, ByVal dwFlags As Integer,ByVal dwExtraInfo As Integer)
Sub Initialize
    keybd_event &hd,0,0,0 ' Enter key down
    keybd_event &hd,0,2,0 ' Enter key up
End Sub

以上

2019年2月24日日曜日

Domino V11 と IBM と HCL と

おととい(2019年2月22日)は朝から晩までノーツづけの一日でした。

ノーツコンソーシアムの「ユーザー情報交換会」に始まり、その後「通常総会」。
午後は大きな会場へ移動し「ノーツコンソーシアム FESTA」と「IBM Notes/Domino Day 2019 Spring」。その後、会場ロビーにて「大感謝祭」と称したパーティーが催され、終了後は有志による二次会と、どのタイミングで隣の人に話しかけても Notes Domino を知らない人はいない、そんな一日でした。

ノーツコンソーシアムFESTA 2019 オープニング
午後一番はノーツコンソーシアム FESTA 2019 から始まりました

大きな話題の一つである、昨年12月に発表された HCL 社への Notes/Domino の売却については、どこへ行っても冒頭にお話しがありました。
HCL 社はコンタクトのあった日本の Notes ユーザー企業への訪問を始めているようです。日本 IBM の人が HCL 社へ移る時期について具体的な話はありませんでしたが、有効なSS&S とライセンスは自動的に HCL 社へ移行される見込みとのことでした。

NDDay の Ayasa さんによるパフォーマンス
Notes Domino Day 2019 Spring のオープニングは Ayasa さんによるパフォーマンスで始まりました
IBM Notes/Domino Day 2019 Spring のオープニングは Ayasa さんによるヴァイオリン演奏のパフォーマンスでした。本イベントのエンディングにもパフォーマンスを披露されたのですが、その時スクリーンに流れた映像が Notes Domino History とも言えるもので、映像が素早く切り替わっていくあたり、これからの Domino がめざましく進化していくように感じ、Ayasa さんが演奏する曲ともマッチしていてとても感動的でした。

ところで Notes Domino の今後については、ADFS 連携やテンプレート拡張といった、日本からの要望があったものが V11 で採用されるといった嬉しい話がありました。
また、軽量版 Notes クライアントと、iPad 版に加え Android版 と Chrome OS 版の Domino Mobile Apps の計画があること、英語版のリリースと同時に日本語を含む言語版もリリースすること、XPages への投資が継続されること、が特に気になったポイントでした。

次世代クライアントとは Red Pill Now で見たアレかしら

ADFS 同期は日本の V11 Jam でも重要性を伝えた機能

日本の V11 Jam で指摘した、アプリやサンプルテンプレートのことにも触れていました

それから、来る新元号にも対応を予定しているとのことで、今後こちらが更新されるようです。

新元号対応を 9.x と 10.0.x で予定

V11 の文字が現れ、演奏はクライマックスに

そうそう。イベント開始前に前から5列目くらいに陣取っていたら「IBM Champions はリザーブシートへどうぞ」と2列目中央の特等席へ案内してくださいました。その時最前列の HCL 社の Rechard 氏と会話する機会があり「HCL では Champions でなく Heros です」と教えてくださいました。

その後の大感謝祭では、多くのノーツ関係者で大賑わいの中、新たな IBM Champions のひとりとして紹介していただいたり、ノーツコンソーシアムから感謝状を頂いたり、このブログを見ていただいている方からお声掛けいただいたりと嬉しいことが波のように押し寄せました。

その後も有志のメンバーから2次会にお誘いいただいたのでそちらへも参加させてもらったのでした。
初めてのラクレット!

そんなこんなで頂いた品々がこちらです。


励ましの言葉などたくさんのパワーをいただいた一日でした。
どうもありがとうございました!

(個人的に一番楽しみにしていた DQL Explorer が見えなかったような...)

2019年2月16日土曜日

Domino Query Language (DQL) を他の検索と比べました

昨晩(2019年2月15日)は「テクてくLotus技術者夜会」に参加しました。

今回のテクてくのテーマが

新 IBM Champions for ICS にいろいろ聞いてみよう!

ということで、40分の枠をいただいて、本ブログにも度々登場している Domino Query Language (DQL) についてお話させていただきました。



今回の検証で新たに分かったことは、ODS バージョンが 20 と古くても検索できますし、クライアントのローカル nsf ファイルを検索することができることです。

また、これまでの検索機能とのスピード比較を行い、その結果を記載しています。

まだあまり知られていない(?) DQL ですが、ぜひ試してほしい機能のひとつです。

2019年2月7日木曜日

ODS

昨晩(2019年2月6日)は会社帰りに「のの会」に参加しました。

ずーっと前ですが、常駐先のエンドユーザーからこんなことを聞かれました。
データベースのプロパティに表示される「ODSバージョン」ってデータベースによって違うんだけど、何なの?
Domino のバージョンをアップグレードする担当者にはおなじみのODSですが、エンドユーザーにとってはあまり気にすることも無いだろうし、そもそもデータベースのプロパティを見るエンドユーザーなんて存在しないだろうと高をくくっていたこともあって、少々説明に困ってしまいました。

そんなことがあり、少しまとめたものがあったのですが、V10も出ているので加筆修正したものを今回「のの会」でお話させていただきました。



以下、補足します。

案外、クライアント側のODSバージョンは放っておかれがちです。ODS 20 のNSFファイルをアップグレードして Notes の起動が早くなったという Panagenda社の事例(スライド中に事例へのリンクあり)を読み、私のローカル環境にも ODS20 のデータベースがあったことから、それらをアップグレードした結果、確かに早くなったことを実感できました。

また、8.5.1 以降のバージョンでは、Domino で DAOS を有効にしている場合、クライアント側の ODS もアップグレードすると「DAOS オブジェクトコピーの最適化」が機能して添付ファイルの転送にメリットがあるとのこと。※こちらは未検証です

ODSをアップグレードする理由として、古いバージョンによる「不具合を解消するため」といった後ろ向きな理由も中にはあるでしょう。けれど、文書や設計の圧縮といった新機能を有効にすることで I/O 性能が向上することによるパフォーマンスアップが体感できると思います。

なお、ODSアップグレードにはデータベースの圧縮が伴います。デスクトップポリシーを使うなどしてクライアントの notes.ini ファイルへ NSF_UpgradeODS=1 を追加する場合、圧縮中のデータベースをユーザーが使えないため、注意が必要です。

最後に、実際にアップグレードする場合は、最悪のケースを想定して事前にバックアップを取っておくなどしましょう。