ステップ2. ミニ・フィルターのコードを記述する
このステップでは、ミニ・フィルターのコードを記述します。ミニ・フィルターにはコード ウィザードがないので、フィルターのコードを手動で記述する必要があります。
1. フィルターの[ソース]タブを表示します。
2. 次のステートメントをコンポーネントの定義の後に追加します。
Def_List Name(#Save_Keys) Fields(#SURNAME) Type(*Working) Entrys(1)
Save_Keys作業リストが、selectループによって上書きされたキー値を保存するのに使用されます。
3. 次にuInitializeメソッド・ルーチンを追加します。
Mthroutine Name(uInitialize) Options(*Redefine)
#COM_OWNER.avMiniFilter := true
#COM_OWNER.avMiniFilterpanel <= #PANL_1
Endroutine
· フィルターやコマンド・ハンドラーが作成されると、uInitializeメソッド・ルーチンが1度だけ実行されます。
· avMiniFilterプロパティはフィルターがミニ・フィルターである必要があることを示します。
· avMinifilterpanelはフィルター内のパネルへの参照を設定します。2つのコンポ―ネント間の文字“<=”は参照を割り当てます。フィルターには複数のパネルを格納できます。また、常に同一のパネルを使用するのではなく、状況に応じて、数あるミニ・フィルター・パネルの中から1つを選んで使用します。
コードは、次のようになります。
4. 次に、SURNAMEフィールドのKeyPressイベントを処理するイベント・ルーチンを追加します。Enterキーを押すと、このイベントが実行されます。
EVTROUTINE HANDLING(#SURNAME.KeyPress) OPTIONS(*NOCLEARERRORS *NOCLEARMESSAGES) KeyCode(#keycode)
if ('#keycode.value = Enter')
endif
ENDROUTINE
5. Enterキーを押すと、selectループによって上書きされた現在のキー値が保存されます。
Inz_List #Save_Keys 1
6. インスタンス・リストの更新がまもなく開始され、チェックボックスが選択されている場合にはその後インスタンス・リストがクリアされることを指定します。
Invoke #avListManager.BeginListUpdate
If '#Clear_List.ButtonState = Checked'
Invoke #avListManager.ClearList
Endif
7. 次に、検索条件に一致する社員を選択し、ビジュアル識別子を設定します。その後、エントリーをインスタンス・リストに追加します。
Select Fields(#EMPNO #SURNAME #GIVENAME #SALARY) From_File(PSLMST2) With_key(#SURNAME) Generic(*yes) Nbr_Keys(*Compute)
Use Builtin(BCONCAT) With_Args(#GIVENAME #SURNAME) To_Get(#FULLNAME)
Invoke #avListManager.AddtoList Visualid1(#EMPNO) Visualid2(#FULLNAME) NColumn1(#SALARY) AKey1(#EMPNO)
EndSelect
8. 最後に、インスタンス・リストの更新が完了したことを示し、保存済みのキー値を復元します。
Invoke #avListManager.EndListUpdate
Get_Entry 1 #Save_Keys
完成したイベント・ルーチンは、次のようになります。
5. フィルターをコンパイルします。