ステップ3. ルーチンを追加してEMPLOYEE_CHANGEDイベントをリスンする
このステップでは、社員フィルターにイベント・ルーチンを追加してEMPLOYEE_CHANGEDイベントをリスンします。
1. 社員フィルターiiiCOM07を探して開きます。
2. [ソース]タブを表示します。
3. avEventシグナルをリスンするイベント・ルーチンを追加します。
Evtroutine Handling(#Com_Owner.avEvent) WithId(#EventId) Options(*NOCLEARMESSAGES *NOCLEARERRORS) WithAinfo1(#Ainfo1)
Endroutine
avEventイベントは、avSignalEventメソッドが呼び出されると、フレームワークによって通知されるイベントです。イベント・ルーチンは通知されるイベントを、イベントと共に通知される英数字または数値データと合わせて受信します。
4. 次に、CASEコマンドを追加してどのイベントが通知されたのかをイベント・ルーチン内でテストします。
Case #EventId.Value
EndCase
通知されたイベントとしてこのイベント・ルーチンで処理されるイベントのいずれか1つと一致するEventIDが、このイベント・ルーチンを配置したコンポーネントには適用されないことをテストで確認することが重要です。
5. 次に、このコンポーネントに適用される各種イベントIDを処理するための適切なWHEN VALUE_ISコマンドを指定します。ここでは、EMPLOYEE_CHANGEDイベントのみを処理します。
When (= EMPLOYEE_CHANGED)
コードは、次のようになります。
6. 次に、上書きされた現在のキー値を保存するコードを追加します。
Inz_List #Save_Keys 1
7. 通知イベントによって渡される値をEMPNOフィールドに割り当てます。
#EmpNo := #AInfo1
8. インスタンス・リストの更新を開始します。
Invoke Method(#avListManager.BeginListUpdate)
9. 更新された社員の詳細を取得します。
FETCH FIELDS(#SURNAME #GIVENAME #EMPNO #SALARY) FROM_FILE(PSLMST) WITH_KEY(#EMPNO)
10. インスタンス・リストのエントリーを更新します。
Use Builtin(BCONCAT) With_Args(#GIVENAME #SURNAME) To_Get(#FULLNAME)
Invoke #avListManager.AddtoList Visualid1(#EMPNO) Visualid2(#FULLNAME) NColumn1(#SALARY) AKey1(#EMPNO)
11. インスタンス・リストの更新を完了します。
Invoke Method(#avListManager.EndListUpdate)
12. 最後に、保存したキー値に戻します。
Get_Entry 1 #Save_Keys
完成したコードは、次のようになります。
13. フィルターをコンパイルします。