AJAX Phone Directory Portlet
20059月)

これは、名前をキーにして、内線電話帳からフルネームと内線番号を手早く返します。公開アドレス帳ではないのですが、指定のノーツDBのビューから検索して結果をブラウザの指定位置に表示します。


要求URLは次になります。

strURL = '/' + dbPath + '/bylastnameasc?readviewentries&startKey=' + queryString + '&untilKey=' + queryString + 'z&count=30';

  

要求URLコマンドの?ReadViewEntriesは、キーに、 &startKey のほか、&untilKey を使用しています。




haと入力すると、次の候補が表示され
a Lotus Notes 開発者 ブログ-PhoneDir動作1

haに続けて、rを入れると、候補が絞り込まれます。
a Lotus Notes 開発者 ブログ-PhoneDir動作2



TypeAheadはGoogle Suggestからはじまったということですが、これは、

 その原理の解析  -> 応用  -> AJAX Phone Directory Portlet

と、3歩目くらいにあるもののひとつです。


JavaScriptのコードもまだシンプルなのでたどることができます。

単純なのに効果的で凄いですね。





【ノーツ標準】WEBブラウザでノーツユーザを選択するとき、ポップアップ画面を開き、ユーザを選択し、ボタンを何度もクリック操作してやっと選択を確定する。これが便利な時もありますが、一人を入力するだけのためには、いかにも重い。いつもこれでは、辛い。
a Lotus Notes 開発者 ブログ-NotesWeb名前選択




【Ajax版】これに対し、ポップアップ画面を開かず、クリック操作/選択操作を最少にして、利用ユーザの負荷を小さくするのが 軽いNamePickerの目的です。


Jake Howlett Domino Name Picker Revisited[ROUGH CUT  

名前の一部を入力すると、自動的に候補リストがサーバから取得され、ブラウザの画面にセットされます(下図では左の入力欄)。



a Lotus Notes 開発者 ブログ-NotesAjax名前選択

ユーザの入力から選択の確定までの流れは、次のとおりです。

a Lotus Notes 開発者 ブログ-NamePickフロー




Domino Name Picker Revisited[ROUGH CUT  ] の動作


1.test と入力すると、2.そのフィールドイベント(keydown)をJavaScriptでキャッチし、

3.そのときの文字列からリクエストURLを作成、GET /names.nsf/($VIMPeople)?readviewentries&count=10&startkey=test

4,このURLprotptype.jsライブラリのAjax.Requestオブジェクトに渡して、リクエストを実行。

5.ドミノサーバがURLコマント:http://サーバ名/names.nsf/($VIMPeople)?readviewentries&count=10&startkey=testNotesコマンドに変換して、

6.ビュー検索を7. names.nsf($VIMPeople)ビューに対して実行、

6.結果をドミノのHTMLエンジンがvIewEntries(XML)フォーーマットに整形して、8.返信。

9.返信されたレスポンスは、そのままブラウザに表示されず、

10.コールバック関数が処理して選択リストを作成し、11.ユーザがリストを見て、12.その中のひとつをクリックで選択すると、13.クリックイベントの発生した行をJavaScriptで取得し、14.その行のvalueをフィールドにセット、15.入力が完了、

入力スピードによっては、t, te, tesの入力時点でもそれをキーに2から9あるいは11まで実行されます(クライアントキャッシュが利用され、HTTPリクエストがDominoサーバに送られないこともあります))。



返信されるレスポンスviewentriesは、次の形式です。


<?xml version="1.0" encoding="UTF-8"?>

<viewentries timestamp="20091215T065132,66Z" toplevelentries="150">

<viewentry position="84" unid="ED214F6812EDE6A3492571E9003A4A26" noteid="2252" siblings="150">

<entrydata columnnumber="0" name="$1">

<text>Test Aqua01/NOTESDEV1</text></entrydata>

<entrydata columnnumber="1" name="$0">

<text>Test</text></entrydata>

<entrydata columnnumber="2" name="$2">

<text></text></entrydata>

<entrydata columnnumber="3" name="$3">

<text>Aqua01</text></entrydata>

<entrydata columnnumber="4" name="$4">

<text>CN=Test Aqua01/O=NOTESDEV1 @ Dom85</text></entrydata>

<entrydata columnnumber="5" name="Comment">

<text></text></entrydata>

</viewentry>

以下、データの数だけ、viewentry要素の繰り返し

</viewentries>



ドミノURLコマンド?getviewentriesを使用していること、パラメータに&startkey を使用していること、レスポンスのビューデータの第一列を候補に表示していることが特徴です。

このNSFでは、一般的なJavaScriptライブラリ(prototytpe.js(V1.4.0)、script.acculo.us2005年のものを利用しつつ、固有のフォーム、HTML、JavaScriptでタイプアヘッド(オートスジェスト)を実現しています。気になる動作もありますが、最初?にトライしたところに敬意を表します。



これが安定して動き、サーバ・ネットワークの負荷が制御され、ライセンスをクリアでき、開発が定型化できれば、名前入力フィールドに限らず、便利です。


Jake Howlett氏に対し、「もうやってるよ」とコメントしたのが、Jeff Crossett 氏のAJAX Phone Directory Portletです。



10年ほど、Notesアプリの開発をしてきました。


これまで、ブログはときどき、検索エンジン経由で読むだけでしたが、
Notes開発者のブログも休止中のものが少なくありません。

賑わいの一端になるべく発信していきます。


Notesは開発のしやすさ、機能性に優れていますが、ブラウザ・アプリとなると、
操作性は、いまひとつの感があります。

Notes8.5から使えるXPagesもよいのですが、、
Notes6.5からNotes8まで、従来型のブラウザ・アプリをこれからも
使い続けているユーザも多いと思います。


最初のテーマは、ブラウザでのユーザ選択コンボボックス、NamePickerです。

2005-2006年のAjax勃興期の次のようなものから、順に見ていきます。
 Jeff Crossett 
AJAX Phone Directory Portlet
 
 Jake Howlett Domino Name Picker Revisited[ROUGH CUT]


   Jake Howlett氏のNamePickerは、次のURLで文書を開き、EDITをクリックして、すぐ試せます( http://www.codestore.net/apps/namepick.nsf )。


ここから、OpenntfのProject: AJAX Name Picker (Managed by Steve McDonagh) まで

どんどんコードは複雑化し高機能化しています。 


 使えるというコメントも多くあるのですが、問題の指摘も少なくありません。

 使える条件を確認していきます。