他のウィンドウにイベントを通知する

Visual LANSA

他のウィンドウにイベントを通知する


avSignalEventメソッドを使って、他のウィンドウにイベントを通知することができます。

シグナルを送る範囲はWindowScope()パラメータで制御します。CURRENT、ALL、MAINのほか、特定のウィンドウ名も指定できます。

デフォルト値はCURRENTです。

 

「目覚まし」メソッドuShowWindowCompletedの使い方

シグナルを送ってウィンドウを操作できるのは、当該ウィンドウが開いており、イベントを監視している場合に限ります。

しかしウィンドウが本当に開いているかどうか分からない場合は、次のようにしてください。

MAINウィンドウのコマンド・ハンドラーまたはフィルターに、次のメソッドが記述されているとします。

#AvFrameworkManager.avShowWindow Caller(#Com_Owner) For(BUSINESSOBJECT) ofType(EMPLOYEES)

WindowName(EMP_WINDOW) OpenInfo1(#EMPNO)

 

これは、「EMP_WINDOWというウィンドウを、必要ならば生成したうえで、表示せよ。ここにはEMPLOYEESビジネス・オブジェクトを表示する。ウィンドウを開く際の情報文字列として、#EMPNOの値を設定せよ」と指示することに当たります。

次のフィルターまたはコマンド・ハンドラーを考えてみましょう。ウィンドウEMP_WINDOWで起動する、または起動済みであるものとします。

ここには「目覚まし」メソッドの呼び出しがあります。

Mthroutine uShowWindowCompleted Options(*Redefine)

#Empno := #Com_Owner.avCurrentWindow.OpenInfo<1>

Use message_box_show (ok ok info *Component #Empno)

Endroutine

 

このメソッドは、他のウィンドウが次のメソッドを実行すると、その都度呼び出されます。

#AvFrameworkManager.avShowWindow WindowName(EMP_WINDOW)

 

このメソッドは、「起きろ。他のウィンドウが何かをするよう要求している」と言っていることに相当します。「起こされた」コマンド・ハンドラーやフィルターは通常、開かれた情報文字列として渡された情報を調べて、次に何をすればよいか判断します。

この機能は、高度なビジネス・オブジェクト間通信にも利用できます。例えば、顧客明細を操作するCUSTOMER_WINDOWウィンドウと、注文情報を管理するORDER_WINDOWウィンドウがあるとします。

CUSTOMER_WINDOWのコマンド・ハンドラーには、次のようなメソッド呼び出しがあります。

#AvFrameworkManager.avShowWindow Caller(#Com_Owner) For(BUSINESSOBJECT)

ofType(ORDERS) WindowName(ORDER_WINDOW)

OpenInfo1(#OrderNumber)

 

一方、ORDER_WINDOWのコマンド・ハンドラーにも、次のようなメソッド呼び出しがあるものとします。

#AvFrameworkManager.avShowWindow Caller(#Com_Owner) For(BUSINESSOBJECT)

ofType(CUSTOMERS) WindowName(CUSTOMER_WINDOW)

OpenInfo1(#CustomerNumber)

 

OrdersとCustomersが同期して動作するので、2つのアプリケーションを切り替えながら操作できるようになります。