Lotus Sandboxに、 Web Single Name Picker
がありました。
2002年の作ですが、なかなかNotesらしくて面白いので試してみました。
文書ライブラリDBにこの仕組みをいれて、URLエンコードを追加し、レビュー担当者に入力された名前の一部を使って、
最初から検索して候補を表示するようにしてみたのがこれです。
レビュー担当者フィールドに名前の一部を入れて「選択」をクリックすると、それにマッチした候補リストが別ウィンドウに表示されます。
そこでさらにLstNamemFirstNameをいれて再検索することもできます。
そのひとつを選択すると、もとのフォームのフィールドに値がセットされます。
仕組みは、
(1)元ウィンドウの「選択」クリックで、別ウィンドウ(検索用フォーム(上図左)を開き、
(2)キーワードをいれてSearchクリック
(3)submit実行(ただしsaveoptions=0なので何もおこらない)。
(4)submit実行後の$$Returnの実行
$$Returnには、同じフォームをパラメータ付きで開く指定(readform&パラメータ名=値)がされています。また、フォームのwebQueryOpenには、パラメータ値を使って検索を実行し、結果を一緒にかえすエージェントが指定されている。
このため、ブラウザからreadform&パラメータ名=値が要求されると、webQueryOpenのタイミングでパラメータ値を使ったdb.searchが行われ、resultフィールドに候補リストがセットされます。
(5)表示された候補リストから選択してクリック
それぞれ、onclickで、もとフォームのフィールドに名前をセットして別ウィンドウを閉じる処理が追加されており、候補リストの名前をクリックすると、もとウィンドウのレビュー担当者に名前がセットされます。
公開アドレス帳の名前検索に限らず、いろいろ応用のできるやり方だと思います。
大量のマスタからの選択入力が少ない操作で実行できます。JavaScriptも基本だけで実装可能です。
また、別ウィンドウなのでiFrame Simに悩まされることもなく、「URL参照を許可しない」方針に困ることもなく、大量のライブラリのダウンロードを待つこともありません。
これはTypeAhedではありませんが、結果が多すぎたら別ウィンドウで続けて条件を追加すれば絞り込めます。
キーワードが単一なら、サーバエージェントのdb.searchを他のメソッドに変えるのがよいと思います。
submitの空振りは、別ウィンドウの中でXMLHttpRequestでエージェントを起動すれば、なくせます。