ファイルからレコードを検索し、表示するファンクションを作成します。
処理対象ファイル
物理ファイル「CUSMST」(顧客マスター)
RDMLプログラム - その1
GROUP_BY NAME(#CUSTOMER) FIELDS(#CUSTNO #NAME #ADDL1 #ADDL2 #ADDL3) BEGIN_LOOPL10 REQUEST FIELD(#CUSTNO) FETCH FIELDS(#CUSTOMER) FROM_FILE(CUSMST) WITH_KEY(#CUSTNO) NOT_FOUND(L10) ISSUE_MSG(*YES) DISPLAY FIELDS(#CUSTOMER) END_LOOP
RDMLプログラム - その2
GROUP_BY NAME(#CUSTOMER) FIELDS(#CUSTNO #NAME #ADDL1 #ADDL2 #ADDL3) BEGIN_LOOP REQUEST FIELD(#CUSTNO) FETCH FIELDS(#CUSTOMER) FROM_FILE(CUSMST) WITH_KEY(#CUSTNO) IF_STATUS IS(*OKAY) DISPLAY FIELDS(#CUSTOMER) ELSE MESSAGE MSGTXT('No customer exists with this number') ENDIF END_LOOP
着目点:
その1、その2とも、BEGIN_LOOP~END_LOOPのブロック内で、ファンクション・キーEXITまたはMENUが押されるまでの間、問い合わせに応じて検索結果を表示する、という処理を繰り返します。
ファンクション・キーEXITとMENUは、デフォルトでREQUEST/DISPLAY画面に表示されます。いずれかのキーを押すとファンクションは終了します。
プログラムその1では、FETCHコマンドのNOT_FOUNDパラメータ、ISSUE_MSGパラメータを使って、レコードが見つからない場合自動的にその旨のメッセージを表示した後、REQUESTコマンドに制御を戻すようにしています。
プログラムその2では、レコードが見つかったかどうかをIF_STATUSコマンドで判断しています。見つかった場合はその内容を表示し、見つからなかった場合はREQUEST画面の22/24行目にその旨のメッセージを表示します。