CLPでエラーが発生したときにエラー・メッセージをRCVMSGで取得しい
エンド・ユーザーに表示する処理はよくあることである。
例えば
ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) KEYVAR(&MSGKEY) + MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + SNDMSGFLIB(&MSGFLIB)
のようにしてエラー・メッセージを取得して
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + MSGTYPE(&MSGTYPE)
のようにしてメッセージを表示するようにすることが多い。
ところが
CRTCLPGM QTROBJ/ANS001CD SRCFILE(QTRSRC/QCLSRC AUT(*ALL)
という存在しないメンバー: ANS001CD のコンパイルを実行しようとすると
「プログラム ANS001CD は作成されなかった。」
というメッセージが出力されてしまいます。
そこで F10キーを押してロー・レベル・メッセージを探すと
メンバー ANS001CD を含むファイル QCLSRC がライブラリー QTRSRCに見つからない。
というメッセージが最初のほうに見つかり、実はこれが最初のメッセージである。
1. 「メンバー ANS001CD を含むファイル QCLSRC がライブラリー QTRSRCに見つからない。」
:
↓
2. 「プログラム ANS001CD は作成されなかった。」
という順序でメッセージは出力されている。
多くの IBM iのメッセージ出力では最後のメッセージだけが
結果として表示されてしまうのでF10キーを押してロー・レベル・メッセージを
検索する作業がいつも必要になっている。
実は多くのサンプルCLPでは
RCVMSG MSGTYPE(*LAST)
と最後のメッセージ、つまりこの場合で言えば
「プログラム ANS001CD は作成されなかった。」
というメッセージを取得するような処理となってしまってたいるので
本当の原因となるメッセージを探るためにF10キーを押すといあう操作が
必要となってしまう。
これを
RCVMSG MSGTYPE(*FIRST)
としておけば取得されるメッセージは
メンバー ANS001CD を含むファイル QCLSRC がライブラリー QTRSRCに見つからない。
とういうメッセージが取得されて表示される。
社内のCLPも RCVMSG MSGTYPE(*LAST) ではなく MSGTYPE(*FIRST) で
めっせーじを受取るようにすれば真の原因となっているメッセージが
いつも表示されるようになるはずある。
もちろんエラーのときだけでなく成功したときのメッセージの受取りも *FIRST でよい。