ステップ4. 課をロードするリレーション・ハンドラーを作成する
このステップでは、部門を展開したときに課をインスタンス・リストにロードするリレーション・ハンドラーを作成します。
非表示フィルター・コードを使用してすべての課を部門と共にロードすることもできますが、リレーション・ハンドラーを使用すると、最初にルート・オブジェクトまたは親オブジェクトをインスタンス・リストに追加するだけで、その後は子オブジェクトを動的に追加できるようになるので、フィルターのパフォーマンスを改善できます。
1. Visual LANSAエディターで、プロセスiiiPROC2 – Framework Functions作成します。このプロセスに属するファンクションを作成します。ファンクション名をiiiFN04、説明にリレーション・ハンドラーと指定します(ここでiiiは入力者のイニシャルです。Visual LANSAの非ライセンス版または試行版を使っている場合は、iiiの部分をDEMとする必要があります)。
2. ファンクション内の既存のコードを、このファンクションがリレーション・ハンドラーであることを示す次のコードに置き換えます。
FUNCTION OPTIONS(*DIRECT *LIGHTUSAGE) RCV_LIST(#VIS_LIST #PID_LIST #COL1_LIST #COL2_LIST #COL3_LIST #COL4_LIST #COL5_LIST #COL6_LIST #COL7_LIST #COL8_LIST #COL9_LIST #COLA_LIST)
INCLUDE PROCESS(*DIRECT) FUNCTION(VFREL1)
INCLUDE PROCESS(*DIRECT) FUNCTION(VFREL2)
作成したVFREL1ファンクションおよびVFREL2ファンクションには、リレーションの生成ファンクションの標準の定義が含まれています。
3. 次に、すべてのキーと追加のカラムをインスタンス・リストからクリアします。
EXECUTE SUBROUTINE(CLEARKEYS)
EXECUTE SUBROUTINE(CLEARCOLS)
リレーション・ハンドラーで呼び出すサブルーチンはVFREL2ファンクションに含まれています。
4. 選択した部門のキー値を取得します。
CHANGE FIELD(#DEPTMENT) TO(#SRC_AK1)
5. 現在の部門で課を選択し、インスタンス・リストのエントリー値を設定します。
SELECT FIELDS(*ALL) FROM_FILE(SECTAB) WITH_KEY(#DEPTMENT)
EXECUTE SUBROUTINE(SETAKEY) WITH_PARMS(1 #DEPTMENT)
EXECUTE SUBROUTINE(SETAKEY) WITH_PARMS(2 #SECTION)
EXECUTE SUBROUTINE(SETNCOL) WITH_PARMS(1 #SECPCODE)
EXECUTE SUBROUTINE(SETACOL) WITH_PARMS(1 #SECADDR1)
EXECUTE SUBROUTINE(SETACOL) WITH_PARMS(2 #SECADDR2)
EXECUTE SUBROUTINE(SETACOL) WITH_PARMS(3 #SECADDR3)
EXECUTE SUBROUTINE(SETACOL) WITH_PARMS(4 #SECPHBUS)
EXECUTE SUBROUTINE(ADDTOLIST) WITH_PARMS('DEPARTMENT_SECTIONS' #SECDESC #SECTION)
ENDSELECT
· SETAKEYサブルーチンは子インスタンス・リストのキー値を設定します。このサブルーチンの最初のパラメータはキーの位置で、2番目のパラメータはキー値です。数値キーを設定するSETNKEYサブルーチンもあります。
· SETNCOLサブルーチンとSETACOLサブルーチンは子インスタンス・リスト・エントリーにカラムを追加します。
· ADDTOLISTサブルーチンはエントリーをインスタンス・リストに追加します。このサブルーチンの最初のパラメータは子ビジネス・オブジェクト名、2番目のパラメータはビジュアル識別子1カラム、3番目のパラメータはビジュアル識別子2カラムです。
コードは、次のようになります。
6. ファンクションをコンパイルします。
7. フレームワークを開いてください。
8. Company Departmentsビジネス・オブジェクトのプロパティを表示します。
9. [インスタンスリストの設定]タブで、Department Sectionsビジネス・オブジェクトを選択します。
10. [リレーション ハンドラー]フィールドに、リレーション・ハンドラーの名前を入力します。
12. Company Departmentsのプロパティを閉じます。
13. フレームワークを保存して再起動します。
14. iii HRアプリケーションでCompany Departmentsビジネス・オブジェクトを選択します。
15. インスタンス・リストで部門を展開してください。
展開した各部門の課が動的にロードされます。
リストには、セクション名と識別子のみが表示されます。次のステップで、インスタンス・リストを変更して課の追加カラムを表示します。