ファイルからレコードを検索し、表示するファンクションを作成します。
処理対象ファイル
物理ファイル「CUSMST」(顧客マスター)
RDMLプログラム - その1
GROUP_BY NAME(#CUSTOMER) FIELDS(#CUSTNO #NAME #ADDL1
#ADDL2 #ADDL3)
BEGIN_LOOP
L10 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行目にその旨のメッセージを表示します。