【ノーツ標準】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です。