CL

169. RCVMSG でメッセージ・キーが取得できないのは

CLPの RCVMSGコマンドでメッセージ・キーの取得を
指示しているのに一向にメッセージ・キーを取得できない。
_

例えば

RCVMSG PGMQ(*SAME) MSGTYPE(*FIRST) KEYVAR(&KEYVAR)

と指定している。実行してもエラーにもならないのに
メッセージ・キー: &KEYVAR の値はブランクのままであり
メッセージ・キーを受取ることができない。
原因不明のままになってしまうことがある。

■ 原因は メッセージの除去

RCVMSGコマンドは省略値では メッセージ除去(RMV) は *YES である。
上記の RCVMSG ではメッセージを受取ると受取ったメッセージも
RCV(*YES)によって受取ったとたんに除去されていまう。
従ってメッセージ・キーも消滅するので &KEYVARはブランクに
なってしまう。

■ 解決方法

RMV(*NO)を指定するとメッセージ・キーを正しく受取ることができる。

RCVMSG PGMQ(*SAME) MSGTYPE(*FIRST) KEYVAR(&KEYVAR) RMV(*NO)

とすればよい。
ただしこれでもわかるように RMVMSG で明示的にメッセージを除去してしまうと
除去されたメッセージのメッセージ・キーは指定することはできなくなってしまうので
そのことにも注意が必要である。
_