アシスタントがアプリケーションの他のパーツと対話処理する方法
アシスタントはフリー・フローティングのモードレス・ウィンドウです。
アプリケーションの他のコンポーネントとイベントの通知を通して通信します。
アプリケーションの他のコンポーネントが通知するイベントをリスニングして反応します。
この非常にシンプルなアーキテクチャは柔軟性と拡張性に富んでいます。
以下に簡単なイベント・ドリブン対話処理のサンプルを示します。
例1-クラシックなF4=プロンプト型の要求
ユーザーに顧客番号の入力を要求する注文入力フォームがあるとします。
ユーザーはボタンまたはイメージ(例:クエスチョン・マーク)を押して顧客を入力したいことを表します。
Order Entryフォームが"SelectCustomer"イベントを通知します。イベントに関連付けた「ペイロード」の一部として、ユーザーがすでに入力した情報(例:顧客名の一部、番号、など)の詳細を、オプションで含む場合があります。
Customer Assistantが"SelectCustomer"イベントを検出し、ユーザーが要求する顧客の検索を可能にします。初期の検索をスピードアップしたり、検索対象を絞り込むためにイベントに関連した「ペイロード」が使える可能性があります。ユーザーが要求した顧客を発見し選択すると、Customer Assistantは、顧客番号(およびその名前を含む場合もある)をイベントに関連した「ペイロード」として含め、"CustomerSelected"イベントを通知します。
Order Entryフォームは"CustomerSelected"イベントを検出し、入力された注文詳細を選択された顧客の詳細で更新します。
例2-より高度な非モーダル・プロンプト要求
Order Entryフォームは現在アクティブであるとします。
Customer Assistantウィンドウはフローティングで表示されているとします。
ユーザーは直接Customer Assistantウィンドウで顧客を検索します。ユーザーが要求した顧客を選択すると、Customer Assistantは、顧客番号(およびその名前を含む場合もある)をイベントに関連した「ペイロード」として含め、"CustomerSelected"イベントを通知します。
Order Entryフォームは"CustomerSelected"イベントを検出し、今入力された注文の詳細を選択した顧客の詳細で更新します。
特にWebアプリケーションではこの方法がプロンプトを出すのにより効率的です。この方法では対話処理を完了するための多くのリモート・サーバーとの対話処理が省かれるためです。
例3-マルチ項目プロンプト
イベント・ドリブン処理では複数の項目を選択できます。
Order Entryフォームは現在アクティブであるとします。
Product Assistantウィンドウはフローティングで表示されているとします。
ユーザーは直接Product Assistantウィンドウで4つの異なる製品を選択します。選択が完了すると、Product Assistantは"ProductsSelected"イベントを通知します。Product Assistantは"ProductsSelected"イベントのペイロードとして製品番号(および製品の詳細を含む場合がある)のリストが含まれます。
Order Entryフォームは"ProductsSelected"イベントを検出し、今入力された注文の詳細で選択されたすべての製品を更新します。
例4-その他のアシスタントの使用法
以下はアシスタントの概念を拡張したアイデアの例です。
· オールマイティなアシスタント。前述の例では独立した3つのアシスタントを使用しました。複数の項目を扱う1つのアシスタントを設計しても問題ありません。ユーザーとの対話処理によっては、例えば、単体で"CustomerSelected"、"ProductSelected"、"OrderSelected"を(適切なペイロードと共に)通知するアシスタントも簡単に設計できます。
· 通貨を計算し、"CurrencyCalculationPerformed"イベントを発行する"Currency Calculation Assistant"
· 現在のユーザーに関係するアラートやメッセージがないか、サーバー・アプリケーションを定期的に問い合わせる"Alerts and Messages Assistant"。もし何かが検出されたら、フレームワーク・レベルのコマンドに切り替えユーザーに詳細を伝えます。
· エンド・ユーザーが制御の元で別のアプリケーション・ユーザーにメッセージを作成、送信できる"Chat and Messages Assistant"。おそらくこれは、前述の例に何らかの形でリンクされます(または単にその拡張形となります)。
· エンド・ユーザーが起動したサーバー側のもの(例:レポート、出力待ち行列、メッセージ待ち行列、など)を表示、操作できる"Server"アシスタント