すべてのインスタンス・リスト処理の集中管理
すべてのインスタンス・リスト管理コードを1つの管理コンポーネントに含めて集中管理を開始すると、その管理コンポーネントはさまざまな方法で使用できることが分かります。
たとえば、ユーザーが何かを更新した場合、コマンド・ハンドラーはインスタンス・リスト内の詳細を更新しなければならない場合がよくあります。たとえば、ユーザーが従業員名を変更した場合、このコマンド・ハンドラーはインスタンス・リストを更新しなければならない場合があります。
#EMPMNGRに次のような共有メソッドがある場合を考えます。
MthRoutine UpdateListDetails
Define_Map *Input #vf_lm002 #ListManager Pass(*By_Reference)
Define_Map *Input #EmpNo #ForEmpNo
Fetch fields(*all) from_file(PSLMST) with_key(#ForEmpno)
Invoke #ListManager.BeginListUpdate Mode(DYNAMIC)
#FullName := #GiveName + " " + #SurName
Invoke Method(#ListManager.UpdateListEntryData) Visualid1(#Empno) Visualid2(#FullName) Akey1(#Deptment) Akey2(#Section) Akey3(#Empno) AColumn1(#Phonehme) AColumn2(#Address1) nColumn1(#PostCode)
Invoke #ListManager.EndListUpdate
EndRoutine
この場合、インスタンス・リストを更新するためにすべてのコマンド・ハンドラーで必要な処理は、次のような共有#EMPMNGRを宣言することです。
DEFINE_COM CLASS(#EMPMNGR) NAME(#EmployeeManager) scope(*Application)
次に、メソッドを呼び出して従業員インスタンス・リストの詳細を更新します。
#EmployeeManager.UpdateListDetails ListManager(#avListManager) ForEmpno(#Empno)
ここでのメリットは、従業員情報を操作するすべてのコマンド・ハンドラーがUpdateListDetailsメソッドを再利用できるということはもちろんですが、このメソッドがどのように実行されているかを理解しなくてもよいということがあります。
コマンド・ハンドラーはインスタンス・リストの個々のエントリーを削除しなければならない場合もあります。集中管理されたインスタンス・リスト・マネージャーに次のようなメソッドが含まれている場合を考えます。
MthRoutine DeleteListDetails
Define_Map *Input #vf_lm002 #ListManager Pass(*By_Reference)
Define_Map *Input #EmpNo #ForEmpNo
Define_Map *Input #Deptment #InDepartment
Define_Map *Input #Section #InSection
Invoke #ListManager.BeginListUpdate Mode(DYNAMIC)
Invoke Method(#ListManager.RemoveFromList) Akey1(#InDeptment) Akey2(#InSection) Akey3(#ForEmpno)
Invoke #ListManager.EndListUpdate
EndRoutine
この場合、各コマンド・ハンドラーでは、次のような共有マネージャーの宣言のみが必要です。
DEFINE_COM CLASS(#EMPMNGR) NAME(#EmployeeManager) scope(*Application)
次に、以下のようなメソッドを呼び出します。
#EmployeeManager.DeleteListDetails ListManager(#avListManager) ForEmpno(#Empno) InDepartment(#Deptment) InSection(#Section)
これで、インスタンス・リストから従業員の詳細が削除されます。