メッセージ受信 (RCVMSG)

メッセージ受信(RCVMSG)コマンドは,前にメッセージ待ち行列に送られたメッセージを受け取るために,プログラムによって使用されます。

RCVMSGコマンドは,ジョブ・メッセージ待ち行列またはプログラム・メッセージ待ち行列(呼び出しスタック項目に関連付けられたメッセージ待ち行列または外部メッセージ待ち行列(*EXT))から,あるいは指定のメッセージ待ち行列または非プログラム・メッセージ待ち行列(例えばQSYSOPRメッセージ待ち行列またはユーザー・プロファイル・メッセージ待ち行列)からメッセージを受け取ります。プログラムは,メッセージ待ち行列自身の呼び出しスタック項目と関連したメッセージ待ち行列からメッセージを受け取るか,あるいは別の呼び出しスタック項目と関連したメッセージ待ち行列からメッセージを受け取ることができます。

このコマンドは,指定されたメッセージ待ち行列で受け取ったメッセージを,プログラム内の制御言語(CL)変数にコピーします。メッセージとその属性は,KEYVARからDTACCSIDまでのパラメーターによって指定されたCL変数にコピーされます。

メッセージ・タイプ,メッセージの参照キー,またはその両方を指示することによって,受け取るメッセージを指定することができます。メッセージを受け取るプログラムも,RCVMSGコマンドで,メッセージがメッセージ待ち行列から除去されるか,それとも古いメッセージとしてそこに残されるかを指定することができます。指定されたメッセージ待ち行列がこのコマンドの入力されるジョブにも,その他のどのジョブにも割り振られていない場合には,そのメッセージ待ち行列は,このコマンドの処理が続いている間,このコマンドによって暗黙に割り振られます。

指定されたタイプのメッセージが待ち行列に存在しない場合には,要求元のプログラムは,メッセージが到着するのを待つか,あるいは他の処理を続行することができます。これにより,一組のメッセージ待ち行列をポーリングすることができます。

受け取ったメッセージが未処理の例外メッセージである場合に,このコマンドが例外を処理すべきかどうかをプログラムで指定することができます。未処理の例外メッセージとは,統合化言語環境(ILE)プロシージャーに送られたエスケープ,状況,または通知メッセージです。このコマンドが実行される時には,ILEプロシージャーは,例外が処理されることをシステムに通知する処置をまだ取っていません。ILEプロシージャーがとることのできる1つの処置は,このコマンドを使用してメッセージを受け取るCLプログラムを呼び出すことです。とることができる処置の詳細については,ILE概念(SD88-5033)にあります。

パラメーター

キーワード 記述 選択項目 ノーツ
PGMQ 呼出スタック項目メッセージ待行列 単一値: *EXT
その他の値: 要素リスト
オプショナル, 定位置 1
要素 1: 関係 *SAME, *PRV
要素 2: 呼出スタック項目識別コード 要素リスト
要素 1: 呼び出しスタック項目 文字値, *
要素 2: モジュール 名前, *NONE
要素 3: バインド済みプログラム 名前, *NONE
MSGQ MSG 待ち行列 単一値: *PGMQ
その他の値: 修飾オブジェクト名
オプショナル, 定位置 2
修飾子 1: MSG 待ち行列 名前
修飾子 2: ライブラリー 名前, *LIBL, *CURLIB
MSGTYPE MSG タイプ *ANY, *NEXT, *PRV, *INFO, *INQ, *RPY, *FIRST, *COPY, *COMP, *DIAG, *EXCP, *RQS, *LAST, *NXTJLMSG, *PRVJLMSG オプショナル, 定位置 3
MSGKEY メッセージ・キー 文字値, *NONE, *TOP オプショナル, 定位置 4
WAIT 待機時間 整数, 0, *MAX オプショナル, 定位置 5
RMV メッセージ除去 *YES, *NO, *KEEPEXCP オプショナル
CCSID コード化文字セットID 1-65535, *HEX, *JOB オプショナル
RJTDFTRPY 省略時応答の拒否 *NOALWRJT, *ALWRJT オプショナル
KEYVAR KEYVARのCL変数 (4) 文字値 オプショナル
MSG 第1 レベル・テキストのCL変数 文字値 オプショナル
MSGLEN MSGLENのCL変数 (5 0) 10 進数 オプショナル
SECLVL 第2 レベル・テキストのCL変数 文字値 オプショナル
SECLVLLEN SECLVLLENのCL変数 (5 0) 10 進数 オプショナル
MSGDTA メッセージ・データのCL変数 無制限 オプショナル
MSGDTALEN MSGDTALENのCL変数 (5 0) 10 進数 オプショナル
MSGID MSGIDのCL変数 (7) 文字値 オプショナル
SEV SEVのCL変数 (2 0) 10 進数 オプショナル
SENDER SENDERのCL変数 (80) 文字値 オプショナル
SENDERFMT 送信元の形式 *SHORT, *LONG オプショナル
RTNTYPE RTNTYPEのCL変数 (2) 文字値 オプショナル
ALROPT ALROPTのCL変数 (9) 文字値 オプショナル
MSGF MSGFのCL変数 (10) 文字値 オプショナル
MSGFLIB MSGFLIBのCL変数 (10) 文字値 オプショナル
SNDMSGFLIB SNDMSGFLIBのCL変数 (10) 文字値 オプショナル
TXTCCSID テキスト CCSIDのCL変数(5 0) 10 進数 オプショナル
DTACCSID データ CCSIDのCL変数(5 0) 10 進数 オプショナル

呼出スタック項目メッセージ待行列 (PGMQ)

受け取られるメッセージの送信元である呼び出しスタック項目メッセージ待ち行列を指定します。呼び出しスタック項目メッセージ待ち行列は,*EXT待ち行列とするか,あるいはプログラムまたはILEプロシージャーの呼び出しスタック項目と関連しているメッセージ待ち行列とすることができます。

このパラメーターに値を指定した場合には,MSG 待ち行列 (MSGQ)パラメーターに*PGMQを指定することができます。

単一値

*EXT
メッセージは,ジョブの外部メッセージ待ち行列から受け取られます。外部メッセージ待ち行列は,表示装置ユーザーなどの,ジョブの外部要求元と通信するために使用されます。

要素1: 関係

このパラメーター要素1は,メッセージ待ち行列が要素2によって識別されるプログラムまたはプロシージャーと関連付けられるか,あるいはプログラムまたはプロシージャーの呼び出し側と関連付けられるかを指定します。

*SAME
メッセージは,要素2によって識別されるプログラムまたはプロシージャーのメッセージ待ち行列から受け取られます。
*PRV
メッセージは,このパラメーターの要素2によって識別されるプログラムまたはプロシージャーを呼び出したプログラムまたはプロシージャーのメッセージ待ち行列から受け取られます。

注: 要素2によって識別されるものより前のメッセージ待ち行列がILEプログラム入り口プロシージャー(PEP)用のものである場合には,メッセージはPEPメッセージ待ち行列の直前のメッセージ待ち行列から受け取られます。これは,実際には要素2によって識別されるものの2前のメッセージ待ち行列となります。

要素2: 呼出スタック項目識別コード

このパラメーターの2番目の要素は,呼び出しスタック項目の識別に必要な情報を指定するために使用されます。この要素には,3つの要素があります。要素1はOPMプログラム名,ILEプロシージャー名,または特殊値を指定します。要素2は,要素1に指定された値の修飾子として使用されるILEモジュール名を指定します。要素3は,要素1に指定されたものに応じて,OPMプログラム名,ILEプログラム名,あるいはサービス・プログラム名のいずれかを指定することができます。要素3は要素1に指定されたものの修飾子としても使用されます。

要素1: 呼び出しスタック項目

*
このコマンドを実行するOPMプログラムまたはILEプロシージャーを指定します。
名前
呼び出しスタック項目の識別に使用されるOPMプログラムまたはILEプロシージャーの名前を指定してください。

同じ名前を持ついくつかの異なるプロシージャーが1つのジョブ内で実行されることがあるため,プロシージャー名だけでは正しいプロシージャーを識別することはできません。要素2を指定するか,または要素2と3の両方を指定することにより,プロシージャーをさらに詳しく識別することができます。

システムは,指定されたプログラム名またはプロシージャー名の中から,最後に呼び出されたプログラムまたはプロシージャーを検索します。

この要素がOPMプログラムを識別する場合には,最大10文字の名前を指定することができます。この要素がILEプロシージャーを識別する場合には,最大256文字の名前を指定することができます。

各プロシージャー名をコロン(:)で区切って,ネストされたプロシージャー名を指定することができます。ネストされたプロシージャー名を指定する時には,まず一番外側のプロシージャー名を識別し,続いてその中に含まれるプロシージャーを識別します。一番内側のプロシージャー名は,ストリング中で最後に識別します。

名前の先頭に3個のより小記号(<<<)を置くか,あるいは名前の終わりに3個のより大記号(>>>)を置くことによって,プログラムまたはプロシージャーの部分名を指定することができます。より大記号とより小記号の両方を使用する場合には,プログラムは,指定するプログラム名またはプロシージャー名を250文字に制限します。

部分プログラム名または部分プロシージャー名を検索する場合:

  • プログラム名またはプロシージャー名の最初にだけ指定されたより小(<<<)記号は切り捨てられ,残りの文字ストリングが右寄せにされます。指定されたストリングの残りの文字が呼び出しスタック上の現行のプログラムまたはプロシージャーと比較されます。比較はプログラム名またはプロシージャー名の終わりの桁から始まって逆順に行われます。
  • プログラム名またはプロシージャー名の終わりにだけ指定されたより大(>>>)記号は切り捨てられます。指定されたストリングの残りの文字が呼び出しスタック上の現行のプログラムまたはプロシージャーと比較されます。比較はプログラム名またはプロシージャー名の最初の桁から始まります。
  • プログラム名またはプロシージャー名により小記号(<<<)とより大記号(>>>)の両方が指定されている時には,その両方が切り捨てられます。残りの文字が使用され,指定したストリング全体の長さがスキャンされ,呼び出しスタック上の現行のプログラムまたはプロシージャーと比較されます。

要素2: モジュール

*NONE
ILEモジュール修飾子は指定されません。
名前
メッセージ待ち行列の識別に使用されるILEモジュール名を指定します。この名前は,プロシージャーのコンパイル先のモジュールを識別します。

要素3:プログラム

*NONE
プログラム修飾子は指定されません。
名前
メッセージ待ち行列の識別に使用されるプログラム名を指定します。この名前は,プロシージャーのバインド先のプログラムを識別します。

MSG 待ち行列 (MSGQ)

受け取られるメッセージが入っているメッセージ待ち行列(プログラム・メッセージ待ち行列以外)を指定します。

単一値

*PGMQ
呼出スタック項目メッセージ待行列 (PGMQ)パラメーターに指定されたプログラム・メッセージ待ち行列が,そこからメッセージが受け取られる唯一の待ち行列です。

修飾子1: MSG 待ち行列

名前
受け取られるメッセージが入っているメッセージ待ち行列の名前を指定してください。メッセージ待ち行列名を指定した場合には,呼出スタック項目メッセージ待行列 (PGMQ)パラメーターを指定することはできません。

修飾子2: ライブラリー

*LIBL
最初に一致するものが見つかるまで,現行スレッドのライブラリー・リスト内のすべてのライブラリーが検索されます。
*CURLIB
メッセージ待ち行列を見つけるために,ジョブの現行ライブラリーが使用されます。ジョブの現行ライブラリーとしてライブラリーが指定されていない場合は,QGPLが使用されます。
名前
メッセージ待ち行列が入っているライブラリーを指定してください。

MSG タイプ (MSGTYPE)

このプログラムによって受け取られるメッセージのタイプを指定します。

*ANY
(送信元のコピーを除く)どんなタイプのメッセージも受け取られます。受け取りメッセージを受け取るには,MSGTYPE(*COPY)を指定しなければなりません。
*NEXT
メッセージ・キー (MSGKEY)パラメーターに指定されたメッセージの次のメッセージが受け取られます。使用可能でない別のメッセージの場合は,すべてのCL変数にブランクが戻されます。

メッセージが,呼び出しスタック項目と関連したメッセージ待ち行列から受け取られると,*NEXTは1つの呼び出しスタック項目についてだけ動作します。*NEXTは,同じプログラムの複数の呼び出しスタック項目についてメッセージを受け取るために使用することはできません。

*PRV
メッセージ・キー (MSGKEY)パラメーターに指定されたメッセージの直前のメッセージが受け取られます。
*INFO
通知メッセージが受け取られます。
*INQ
照会メッセージが受け取られます。
*RPY
応答メッセージが受け取られます。このプログラムは,照会メッセージをメッセージ待ち行列に送り,その応答を必要とします。
*FIRST
現在メッセージ待ち行列またはプログラム待ち行列にある最初のメッセージが受け取られます。
*COPY
前に送信された照会メッセージのコピーが,このプログラムによって受け取られます。呼出スタック項目メッセージ待行列 (PGMQ)パラメーターまたはMSG 待ち行列 (MSGQ)パラメーターに指定するメッセージ待ち行列は,INQメッセージの送信時に応答を受けるメッセージ待ち行列 (RPYMSGQ)パラメーターに指定したものと同じ待ち行列でなければなりません。
*COMP
完了メッセージが受け取られます。このタイプのメッセージを受け取ることができるのは,プログラム・メッセージ待ち行列からに限られます。このプログラムが要求した別のプログラムの作業の状況を示します。
*DIAG
診断メッセージが受け取られます。このタイプのメッセージを受け取ることができるのは,プログラム・メッセージ待ち行列からに限られます。このプログラムにより送信された入力における別のプログラムが検出したエラー,または要求された機能が別のプログラムにより処理されているときに発生したエラーに関する情報が提供されます。
*EXCP
例外メッセージが受け取られます。例外メッセージ(エスケープ,通知,状況)はプログラムによって後入れ先出し法(LIFO)の順で受け取られます。受け取り側のプログラムはMONMSGコマンドを使用して例外メッセージをモニターすることができます。

注: 非例外メッセージは先入れ先出し法(FIFO)の順で受け取られます。

プロシージャーのメッセージ待ち行列から例外メッセージが受け取られた場合には,関連の例外はRCVMSGコマンドの実行時に,処理されない場合があります。例外がRCVMSGコマンドによって処理されるようにするかどうかを指定するためには,RMVパラメーターを使用することができます。

*RQS
要求メッセージが受け取られます。このタイプのメッセージを受け取ることができるのは,プログラム・メッセージ待ち行列からに限られます。
*LAST
現在メッセージ待ち行列またはプログラム待ち行列にある最後のメッセージが受け取られます。
*NXTJLMSG
指定されたキーの後のジョブ・ログ・メッセージを戻します。*NXTJLMSGと同様に,活動プログラム・メッセージ待ち行列と(プログラムやプロシージャーが終了した)非活動プログラム・メッセージ待ち行列のいずれに存在しているメッセージも入手できます。これは,活動プログラムまたはプロシージャーからのメッセージのみを戻す*NEXTとは異なります。PGMQパラメーターに省略時の値を使用すると,プログラム待ち行列に関係なくジョブ・ログ内の次のメッセージが戻されます。

メッセージ・キーに特殊値*TOPまたは16進数のゼロ(HEX 00000000)を指定すると,プログラム・メッセージ待ち行列の最初のメッセージを戻すことができます。

注: この値はプログラム・メッセージ待ち行列のみに許可され,非プログラム・メッセージ待ち行列には許可されません(QSYSOPRと同様)。

*PRVJLMSG
指定されたキーの前のジョブ・ログ・メッセージを戻します。*NXTJLMSGと同様に,活動プログラム・メッセージ待ち行列にも(プログラムやプロシージャーが終了した)非活動プログラム・メッセージ待ち行列にも存在しているメッセージを入手できます。これは,活動プログラムまたはプロシージャーからのメッセージのみを戻す*PRVとは異なります。PGMQパラメーターに省略時の値を使用すると,プログラム待ち行列に関係なくジョブ・ログ内の前のメッセージが戻されます。

メッセージ・キーに特殊値の16進数ゼロ(HEX 00000000)を指定すると,プログラム・メッセージ待ち行列の最も新しいメッセージを戻すことができます。

注: この値はプログラム・メッセージ待ち行列のみに許可され,非プログラム・メッセージ待ち行列には許可されません(QSYSOPRと同様)。

メッセージ・キー (MSGKEY)

受け取られるメッセージのメッセージ参照キーを指定します。

*NONE
メッセージ参照キーは指定されません。
*TOP
メッセージ待ち行列の上部が使用されます。*TOPを使用できるのは,MSG タイプ (MSGTYPE)パラメーターに*NEXTを指定した場合だけです。これでメッセージ待ち行列の最初のメッセージが受け取られることになります。プログラム・メッセージ待ち行列の場合には,これは受け取られた最後の要求メッセージの後のメッセージです(ある場合)。
名前
このメッセージ受け取り機能によって使用されるメッセージのメッセージ参照キーが入っているCL変数の名前を指定してください。このキーはシステムによって割り当てられ,メッセージ詳細の表示では確認できません。変数は,長さが4文字の文字変数でなければなりません。

関係のコーディング:MSGTYPEパラメーターとMSGKEYパラメーターは,RCVMSGコマンド内で,別々にまたは一緒に使用できます。

  • MSGTYPEとMSGKEYのどちらも指定しなければ,MSGTYPE(*ANY)が想定され,待ち行列内の最初の新規メッセージが受け取られます。つまり,メッセージはFIFO(先入れ先出し)の順で受け取られます。
  • MSGTYPEパラメーターで指定されたメッセージ・タイプのいずれかが*COMP, *DIAG, *INFO, *INQ, *RPY, *COPY,または*RQSの場合には,指定されたタイプの新規メッセージはFIFOの順で受け取られます。タイプが*EXCPの場合には,新規メッセージはLIFO(後入れ先出し)の順で受け取られます。
  • CL変数名でMSGKEYのみが指定されていて,メッセージ待ち行列に,指定されたメッセージ参照キーの付いたメッセージが入っている場合には,そのメッセージが受け取られます。指定されたMSGKEYが送信元のコピー・メッセージ用の場合には,メッセージの応答は,使用可能であれば受け取られます。応答が使用可能でない場合には,すべてのCL変数でブランクが返されます。メッセージがキーによって要求され,そのメッセージが使用可能でない場合には,エスケープ・メッセージが要求元プログラムに送信されます。
  • MSGTYPE(*COPY)およびMSGKEY (&CL変数名)が指定されている場合には,照会メッセージの送信元のコピーが受け取られます。
  • MSGTYPEとMSGKEY (&CL変数名)の両方が指定されていて,メッセージ待ち行列にそのタイプのメッセージが存在する場合には,プログラムによってメッセージが受け取られます。参照キーが正しく,メッセージ・タイプが正しくない場合には,プログラムにエラー・メッセージが送信されます。
  • MSGTYPE(*NEXT)が指定されている場合には,MSGKEYを指定する必要があります。指定された参照キーを持つメッセージに続くメッセージが受け取られます。MSGKEY(*TOP)がMSGTYPE(*NEXT)とともに指定されている場合には,メッセージ待ち行列の最初のメッセージが受け取られます。呼び出しメッセージ待ち行列の場合,これは,最後に受け取った要求メッセージに続く最初のメッセージです。
  • MSGTYPE(*PRV)が指定されている場合には,MSGKEYを指定する必要があります。指定された参照キーを持つメッセージの前のメッセージが受け取られます。

送信元のコピーまたは照会メッセージのいずれかを参照するMSGKEY値とともにMSGTYPE(*RPY)が指定されている場合には,送信元のコピーまたは照会メッセージに対する応答が返されます。送信元のコピーまたは照会メッセージに対する応答が存在しない場合には,ブランクが返されます。MSGKEY値が照会メッセージを参照する場合には,WAITパラメーターは無視されます(これは,WAITパラメーターの省略時値であるWAIT(0)を暗黙指定します)。

MSGTYPE(*ANY)がKEYVAR変数とともに指定され,検出された最初のメッセージ・タイプが応答メッセージである場合には,KEYVAR変数は,送信元のコピー・メッセージのメッセージ参照キーを返します。同様に,MSGTYPE(*RPY)がKEYVAR変数とともに指定されると,送信元のコピー・メッセージのメッセージ参照キーが返されます。

待機時間 (WAIT)

このコマンドの処理時に指定したタイプのメッセージがメッセージ待ち行列にない場合に,プログラムがその到着を待機する時間の長さを秒数で指定します。メッセージが指定された時間内に到着しない場合には,受け取りメッセージ・フィールドに名前が指定された制御言語(CL)変数にブランク(または変数が10進変数の場合はゼロ)が埋め込まれます。

プログラムは,応答を受け取っていない限り,プログラム・メッセージ待ち行列からのメッセージを待つことはできません。

待ち時間が指定された(ゼロ以外の)場合には,そのメッセージを受け取る最初のユーザーにメッセージ待ち行列が暗黙に割り振られ,要求がプログラムによって処理されるまで解放されません。

メッセージが同じジョブ内のメッセージ待ち行列に送られ,そのメッセージ待ち行列が中断転送モードにあった場合には,このパラメーターは無視されます(WAIT(0)を暗黙指定し,これはWAITパラメーターの省略時の値です)。

MSGKEYに指定された値が照会メッセージを参照し,MSGTYPE(*RPY)が指定された場合には,プログラムはWAITパラメーターを無視します(WAITの値は0です)。

0
プログラムはメッセージの到着を待ちません。このコマンドの処理時に,指定されたタイプのメッセージが待ち行列に入っていない場合には,指定されたCL変数にはブランク(10進変数の場合はゼロ)が入ります。
*MAX
プログラムは無期限に指定されたメッセージの到着を待ちます。
秒数
プログラムがメッセージの到着を待つ秒数を指定します。

メッセージ除去 (RMV)

プログラムが受け取ったメッセージがメッセージ待ち行列から除去されるかどうかを指定します。メッセージが未処理の例外である場合には,このパラメーターは例外が処理されるかどうかも指定します。MSG タイプ (MSGTYPE)パラメーターに*INQを指定した場合には,照会メッセージに対する応答を送ることができるように,このパラメーターにも*NOを指定しなければなりません。そうしないと,未応答の照会が除去される前に,省略時の応答が送られることになります。

*YES
メッセージはメッセージ待ち行列から除去されます。メッセージが,未処理の例外である場合には,その例外はRCVMSGコマンドを実行することによって処理されます。
*NO
メッセージはメッセージ待ち行列から除去されません。それは古いメッセージと同様メッセージ待ち行列に残ります。メッセージが,未処理の例外である場合には,その例外はRCVMSGコマンドを実行することによって処理されます。

注:古いメッセージとは,受け取られたが削除されていないメッセージのことです。古いメッセージは,次の方法の1つによって,再度受け取ることができます。

  1. メッセージのメッセージ参照キーをMSGKEYパラメーターに指定する。
  2. MSG タイプ (MSGTYPE)パラメーターにメッセージ・タイプ*FIRST, *LAST, *NEXT,または*PRVを指定する。
*KEEPEXCP
メッセージが例外メッセージであって,その例外が処理されていない場合には,その例外は未処理のまま残り,メッセージは新しいメッセージとしてメッセージ待ち行列に残ります。このメッセージは,*EXCPメッセージを受け取るためにRCVMSGコマンドを使用することによって,再び受け取ることができます。メッセージが例外メッセージでない場合,あるいは例外メッセージであるがその例外が既に処理されている場合には,そのメッセージは古いメッセージとしてメッセージ待ち行列に残ります。

RCVMSGが実行された後で例外を処理するためには,RMV(*YES)またはRMV(*NO)を指定することによって,そのコマンドを再び実行することができます。

コード化文字セットID (CCSID)

メッセージ・テキストを戻したいコード化文字セットID (CCSID)を指定します。これは,MSG, SECLVL,およびMSGDTAパラメーターに戻されるテキストにのみ適用されます。置き換えデータがMSGDTAパラメーターに戻されるか,あるいはMSGまたはSECLVLパラメーターに戻されたテキストに代入されると,変換可能な文字(*CCHAR)として定義されている置き換えテキストの部分のみが変換されます。置き換えデータの残りの部分は変換されません。*CCHARフィールドの詳細については,ADDMSGDコマンドを参照してください。

*JOB
受け取ったメッセージは,戻される前にジョブのCCSIDに変換されます。
*HEX
受け取ったメッセージは,戻される前に変換されません。
コード化文字セットID
戻される前にメッセージの変換先としたいCCSIDを指定してください。有効な値の範囲は1から65535です。有効な値のリストについては,ISERIES INFORMATION CENTER (HTTP://WWW.IBM.COM/ESERVER/ISERIES/INFOCENTER)にあるグローバリゼーション情報を参照してください。受け入れられるのは,ジョブの変更先とすることができるCCSIDの値だけです。

メッセージ・ハンドラーとそれによるCCSIDの使用の詳細については,IBM I INFORMATION CENTER (HTTP://WWW.IBM.COM/SYSTEMS/I/INFOCENTER/)の「I5/OSのグローバリゼーション」トピック・コレクションを参照してください。

省略時応答の拒否 (RJTDFTRPY)

未応答の照会メッセージを除去すると,その照会メッセージに対して省略時の応答が送られます。この値は,このコマンドを使用した結果として送られた省略時の応答を応答処理出口プログラムが拒否できるかどうかを指示します。応答処理出口プログラムは,出口点QIBM_QMH_REPLY_INQに対するシステム登録機能を通じて登録することができます。このパラメーターを適用できるのは,RMVパラメーターに*YESを指定した場合だけです。

*NOALWRJT
応答処理出口プログラムが省略時の応答を拒否することは許可されません。
*ALWRJT
省略時の応答を拒否することが応答処理出口プログラムに許可されます。出口プログラムが応答を拒否した場合には,メッセージCPD2476(応答は応答処理出口プログラムによって拒否されました)が診断メッセージとしてこのコマンドを使用しているプログラムに送られます。CPD2476に続いて,このコマンドを使用しているプログラムはこのエラー状態を処理して回復するためにモニターする必要があることを示すCPF2422(応答は無効です)エスケープ・メッセージが出されます。

KEYVARのCL変数 (4) (KEYVAR)

このコマンドの入ったプログラムが受け取ったメッセージを識別するメッセージ参照キーが入っている,制御言語(CL)文字変数の名前(もしあれば)を指定します。RCVMSGコマンドが処理された時点で,システムは,このコマンドのKEYVARによって指定された変数にメッセージ参照キーを戻し,受け取ったメッセージを古いメッセージに変更します。次に,このメッセージ参照キーを後続のRCVMSGコマンドのMSGKEYパラメーターで使用して,古いメッセージを受け取ることができます。メッセージが見つからないか,除去されている場合には,KEYVAR変数にはブランクが返されます。応答タイプ・メッセージの場合には,このコマンドのMSGKEYパラメーターをSNDPGMMSGコマンドのKEYVARパラメーターと一緒に使用してください。メッセージ参照キーは,また,メッセージ・サブファイルを作成するためにこのプログラムで使用することができます。CL変数は,メッセージ・サブファイルのDDSにSFLMSGKEYキーワードが指定されるフィールドの名前です。

注: 呼び出しスタック項目と関連していないメッセージ待ち行列の場合には,(RMVパラメーターに*YESを指定することによって)メッセージが受け取られて除去された後で,再びメッセージ参照キーを使用することができます。

変数は,長さが4文字の文字変数でなければなりません。

注: (プログラム・メッセージ送信(SNDPGMMSG)コマンドのKEYVARパラメーターによって指定されたCL変数から獲得された)メッセージ参照キーを使用して,照会メッセージに対する応答を受け取る場合には,メッセージ参照キーが送信元のコピーを参照していることに注意してください。送信元のコピー・メッセージは,照会メッセージが送られた先のメッセージ待ち行列にではなく,応答メッセージ待ち行列(省略時の値では照会メッセージを送ったプログラム・メッセージ待ち行列になります)に入っています。

第1 レベル・テキストのCL変数 (MSG)

プログラムがメッセージを受け取った時にそのメッセージを入れる制御言語(CL)文字変数(ある場合)の名前を指定します。これには,メッセージが送信される前にテキスト中の置換変数に置き換えられたメッセージ・データ・フィールドが含まれます(応答および即時メッセージにはメッセージ・データ・フィールドは含まれません)。これは可変長フィールドですが,ほとんどのメッセージ・テキストは長さが132文字より短くなっています。プログラムが照会メッセージに対する応答を受け取った場合,このパラメーターには,応答メッセージのテキストが含まれています。

MSGLENのCL変数 (5 0) (MSGLEN)

受信可能なメッセージ・テキストの合計長が入っている制御言語(CL)の10進変数(ある場合)の名前を指定します。この変数は5桁の長さの10進変数でなければなりません。

第2 レベル・テキストのCL変数 (SECLVL)

プログラムによって受け取られるメッセージ・ヘルプが入っているCL文字変数(ある場合)の名前を指定します。これには,メッセージが送信される前にテキスト中の置換変数に置き換えられたメッセージ・データ・フィールドが含まれます(応答および即時メッセージには第2レベル・メッセージは含まれません)。これは可変長フィールドですが,ほとんどのオンライン・メッセージ・ヘルプは,長さが3000文字より短くなるように設計されています。

SECLVLLENのCL変数 (5 0) (SECLVLLEN)

受信可能なメッセージ・ヘルプの合計長が入っている制御言語(CL)10進変数(ある場合)の名前を指定します。この変数は5桁の長さの10進変数でなければなりません。

メッセージ・データのCL変数 (MSGDTA)

メッセージの一部としてプログラムが受け取ったメッセージ・データ・レコードが入っている,制御言語(CL)文字変数の名前(もしあれば)を指定します。メッセージ・データ・レコードには,受け取ったメッセージのテキスト中で使用される置き換え値(1文字のストリング)が入っています。戻されるデータの容量とその形式は,そのメッセージによって異なります。システム・メッセージに組み込まれているポインターは無効となります。

注: 無効なポインターが含まれているデータを使用した場合には,エラー・メッセージが出されます。

MSGDTALENのCL変数 (5 0) (MSGDTALEN)

受け取るために使用可能なメッセージ・データ・レコードの合計長が入っている,制御言語(CL) 10進変数の名前(もしあれば)を指定します。この変数は5桁の長さの10進変数でなければなりません。

MSGIDのCL変数 (7) (MSGID)

プログラムが受け取ったメッセージのメッセージIDが入っている,制御言語(CL)文字変数の名前(もしあれば)を指定します。受け取られているメッセージが即時メッセージである場合には,メッセージIDはブランクとして戻されます。変数の最小の長さは7文字です。

SEVのCL変数 (2 0) (SEV)

プログラムが受け取ったメッセージの重大度コードが入っている,制御言語(CL) 10進変数の名前(もしあれば)を指定します。受け取られているメッセージが即時メッセージである場合には,メッセージ重大度は戻されません。変数は,長さが2桁の10進変数でなければなりません。

SENDERのCL変数 (80) (SENDER)

RCVMSGコマンド終了に受け取ったメッセージの送信元のIDが入っている,制御言語(CL)文字変数の名前(もしあれば)を指定します。SENDERFMT指定によるCL変数の長さです。SENDERFMT(*SHORT)が指定された場合には,変数は最小値が80桁でなければなりません。CL変数が80桁より長い場合には,追加情報が戻されます。SENDERFMT(*LONG)が指定された場合には,変数は最小値が720桁でなければなりません。

送信元の形式 (SENDERFMT)

どの形式の送信元識別が戻されるかを指定します。このパラメーターはSENDERパラメーターが指定されている時にだけ有効です。

*SHORT
短形式の送信元情報が戻されます。短形式は,最小値が80桁でなければなりません。CL変数が80桁より長い場合には,追加情報が戻されます。最後に戻されたフィールドを超えるCL変数の桁位置は,ブランクに設定されます。次の情報が戻されます。
  • 最初の26文字は送信元のジョブを示します。
    • ジョブ名(10)
    • ユーザー名(10)
    • ジョブ番号(6)
  • 次の16文字は送信元プログラムを示します。
    • プログラム名(12)(ILEプロシージャーの場合,これは結合プログラム名となる);送信元のタイプが3の場合には,このフィールドの最初の3桁は「より小記号」(<<<)となり,この後にプログラム名の最後の9文字が続きます。
    • 命令番号(4)(ILEプロシージャーの場合,このフィールドはブランクにセットされます)
  • 次の13文字は日付および時刻です。
    • 日付(7)(0YYMMDDの形式)
    • 時刻(6)(HHMMSSの形式)
  • 次の14文字は,メッセージがプログラム・メッセージ待ち行列に送られる場合の,送信先呼び出しスタック項目を示します。
    • プログラム名(10)(ILEプロシージャーの場合,これはバインド・プログラム名です)
    • 命令番号(4)(ILEプロシージャーの場合,このフィールドはブランクにセットされます)
  • 次の1文字は送信元のタイプを示します。
    • "0"-送信元が12桁以下のOPMプログラムまたはSLICプログラムである場合
    • "1"-送信元がILEプロシージャーであって,その名前が256桁以下の場合
    • "2"-送信元がILEプロシージャーであって,その名前が256桁を超える場合
    • "3"-送信元が12桁を超えるSLICプログラムである場合
  • 次の1文字は送信先のタイプを示します。
    • "0"-受信先がOPMプログラムである場合
    • "1"-受信先がILEプロシージャーであって,その名前が256桁以下の場合
    • "2"-受信先がILEプロシージャーであって,その名前が256桁を超える場合
  • 次の6文字はマイクロ秒です。
  • 最後の10文字は,メッセージが送られた時にスレッドが実行されていたユーザー・プロファイルの名前であり,CL変数の長さが少なくとも87桁である場合に戻されます。
*LONG
長形式の送信元情報が戻されます。長形式は720桁で,最後の30桁がブランクにセットされます。次の情報が戻されます。
  • 最初の26文字は送信元のジョブを示します。
    • ジョブ名(10)
    • ユーザー名(10)
    • ジョブ番号(6)
  • 次の13文字は日付および時刻です。
    • 日付(7)(0YYMMDDの形式)
    • 時刻(6)(HHMMSSの形式)
  • 次の1文字は送信元のタイプを示します。
    • "0"-送信元が12桁以下のOPMプログラムまたはSLICプログラムである場合
    • "1"-送信元がILEプロシージャーであって,その名前が256桁以下の場合
    • "2"-送信元がILEプロシージャーであって,その名前が256桁を超える場合
    • "3"-送信元が12桁を超えるSLICプログラムである場合
  • 次の1文字は送信先のタイプを示します。
    • "0"-受信先がOPMプログラムである場合
    • "1"-受信先がILEプロシージャーであって,その名前が256桁以下の場合
    • "2"-受信先がILEプロシージャーであって,その名前が256桁を超える場合
  • 次の12桁は送信元のプログラム名です(ILEプロシージャーの場合はこれは結合プログラム名となる);送信元のタイプが3であって,プログラム名の長さが12桁を超える場合には,このフィールドの最初の3桁は「より小記号」(<<<)となり,この後にプログラム名の最後の9桁が続きます。
  • 次の10文字は送信元のモジュール名です(送信元がILEプロシージャーでない場合には,このフィールドはブランクにセットされます)。
  • 次の256文字は送信元のプロシージャー名です(送信元がILEプロシージャーでない場合には,このフィールドはブランクにセットされます)。
    • ネストされたプロシージャー名の場合には,各プロシージャー名はコロン(:)で区切られ,最も外側のプロシージャー名から始まり,最も内側のプロシージャー名で終わります。
    • 256文字を超えるプロシージャー名の場合には,3つの「より小記号」(<<<)が戻され,その後にプロシージャー名の最後の253文字が続きます。QMHRCVPM APIを使用すると,プログラム・メッセージ待ち行列のメッセージのプロシージャー名全体を表示できます。
  • 次の1文字はブランクです。
  • 次の4文字は使用可能なステートメント番号の数です。

注: ステートメント番号は,メッセージが送信された送信元プログラム中の点を表します。プログラムおよび非最適化プロシージャーの場合には,このカウントは常に1となります。最適化されたプロシージャーの場合には,このカウントは1より大きくなることがあり,各ステートメント番号はメッセージが送信できた点を表します。ステートメント番号を戻すことができない場合には,このカウントは0となります。

  • 次の30文字は最大3つのステートメント番号を戻します(それぞれに10文字ずつ)。
  • 次の320文字は,受信中のメッセージが呼び出しスタック項目と関連したメッセージ待ち行列に最初に送られたものである場合に,プログラムまたはプロシージャー情報を戻します(そうでない場合には,このフィールドはブランクにセットされます)。
    • 送り先プログラム名(10)(ILEプロシージャーの場合には,これはバインド・プログラム名となります)。
    • 送り先モジュール名(10)(送信元がILEプロシージャーでない場合には,このフィールドはブランクにセットされます)。
    • 送り先プロシージャー名(256)(送信元がILEプロシージャーでない場合には,このフィールドはすべてブランクにセットされます)。
      • ネストされたプロシージャー名の場合には,各プロシージャー名はコロン(:)で区切られ,最も外側のプロシージャー名から始まり,最も内側のプロシージャー名で終わります。
      • 256文字を超えるプロシージャー名の場合には,3つの「より小記号」(<<<)が戻され,その後にプロシージャー名の最後の253文字が続きます。QMHRCVPM APIを使用すると,プログラム・メッセージ待ち行列のメッセージのプロシージャー名全体を表示できます。
    • ブランク(10)
    • 受信側の呼び出しスタック項目に使用可能なステートメントの数(4)

      注: ステートメント番号は,メッセージが送信された時に送り先プログラムが保留された(例えば,呼び出し命令のために)点を表します。プログラムおよび非最適化プロシージャーの場合には,このカウントは常に1となります。最適化されたプロシージャーの場合には,このカウントは1より大きくなることがあり,各ステートメント番号はメッセージが送信できた点を表します。ステートメント番号を戻すことができない場合には,このカウントは0となります。

    • ステートメント番号(30)(最大3つのステートメントで,それぞれが10文字)
  • 次の6文字はマイクロ秒です。
  • 最後の10文字は,メッセージが送られた時にスレッドが実行されていたユーザー・プロファイルの名前です。

RTNTYPEのCL変数 (2) (RTNTYPE)

プログラムが受け取ったメッセージのタイプ・コードが入っている,制御言語(CL)変数の名前(もしあれば)を指定します。変数は,長さが2桁の文字変数でなければなりません。

メッセージ・タイプを指示するために次の値が戻されます。

メッセージ・タイプ
01
完了
02
診断
04
情報
05
照会
06
コピー
08
要求
10
プロンプトを伴う要求
14
通知(例外としてRCVMSGの時間に既に処理された)
15
エスケープ(例外はRCVMSGの実行時に既に処理されている)
16
通知(例外はRCVMSGの実行時に処理されていない)
17
エスケープ(例外はRCVMSGの実行時に処理されていない)
21
応答,妥当性検査なし
22
応答,既に妥当性検査済み
23
応答,メッセージ省略時の値を使用
24
応答,システム省略時の値を使用
25
応答,システム応答リストから
26
応答,出口プログラムから

ALROPTのCL変数 (9) (ALROPT)

プログラムが受け取ったメッセージの警報オプションを戻すのに使用される,制御言語(CL)変数の名前(もしあれば)を指定します。変数は,長さが9桁の文字変数でなければなりません。

MSGFのCL変数 (10) (MSGF)

プログラムが受け取ったメッセージのメッセージ・ファイル名を戻すのに使用される,制御言語(CL)変数の名前(もしあれば)を指定します。受け取ったメッセージが記憶済みメッセージである場合には,記憶済みメッセージが入っているファイルのメッセージ・ファイル名が戻されます。受け取ったメッセージが記憶済みメッセージでない場合には,メッセージ・ファイル名はブランクで戻されます。変数は,長さが10桁の文字変数でなければなりません。

注: このパラメーターで戻されるメッセージ・ファイル名は,送信機能で指定されたかまたはその省略時のメッセージ・ファイルであり,一時変更メッセージ・ファイルではありません。メッセージの送信時に一時変更が指定されていた場合には,メッセージの受信時にも同じ一時変更を使用しなければなりません。

MSGFLIBのCL変数 (10) (MSGFLIB)

プログラムが受け取ったメッセージのメッセージ・ファイル・ライブラリー名を戻すのに使用される,制御言語(CL)変数の名前(もしあれば)を指定します。受け取ったメッセージが記憶済みメッセージである場合には,記憶済みメッセージのメッセージ・ファイルが入っているライブラリーのメッセージ・ファイル・ライブラリー名が戻されます。送信コマンドで*LIBLが指定されている場合には,*LIBLが戻されます。受け取ったメッセージが記憶済みメッセージでない場合には,メッセージ・ファイル・ライブラリー名はブランクとして戻されます。変数は,長さが10桁の文字変数でなければなりません。

注: このパラメーターで戻されるメッセージ・ファイル・ライブラリー名は,送信機能で指定されたかまたはその省略時のメッセージ・ファイルであり,一時変更メッセージ・ファイル・ライブラリーではありません。メッセージの送信時に一時変更が指定されていた場合には,メッセージの受信時にも同じ一時変更を使用しなければなりません。

SNDMSGFLIBのCL変数 (10) (SNDMSGFLIB)

メッセージを送るために使用されたメッセージ・ファイル・ライブラリー名を戻すのに使用される制御言語(CL)変数の名前(ある場合)を指定します。受け取ったメッセージが記憶済みメッセージである場合には,記憶済みメッセージのメッセージ・ファイルが入っているライブラリーのメッセージ・ファイル・ライブラリー名が戻されます。送信コマンドで*LIBLが指定されている場合には,このパラメーターはライブラリーの実際の名前となります。受け取ったメッセージが記憶済みメッセージでない場合には,メッセージ・ファイル・ライブラリー名はブランクとして戻されます。受け取ったメッセージが記憶メッセージで,元のメッセージ・ファイルが壊れている場合には,メッセージ・ファイル・ライブラリー名がブランクとして戻されます。受け取ったメッセージが記憶済みメッセージでない場合には,このパラメーターはブランクとして戻されます。変数は,長さが10桁の文字変数でなければなりません。

テキスト CCSIDのCL変数(5 0) (TXTCCSID)

MSGおよびSECLVLパラメーターによって戻されるテキストと関連付けられているコード化文字セットID (CCSID)を戻すのに使用されるCL変数がある場合に,その名前を指定します。変換エラーが起こった場合,またはテキストを変換するように要求したCCSIDが65535である場合には,即時メッセージのメッセージ記述またはテキストが記憶されているCCSIDが戻されます。そうでない場合には,テキストを変換したかったCCSIDが戻されます。戻される前にテキストを変換したくないが,即時メッセージのメッセージ記述またはテキストが記憶されているCCSIDを知りたい場合には,CCSIDパラメーターに65535を指定してください。CCSIDはTXTCCSIDパラメーターに戻されます。また,渡したCCSIDを戻されたTXTCCSIDと比較することによって,変換エラーの有無を調べることもできます。この両者が等しくなく,65535でない場合には,変換エラーが起こりました。この変数は5桁の長さの10進変数でなければなりません。

データ CCSIDのCL変数(5 0) (DTACCSID)

*CCHARとして定義された置き換えデータと関連付けられているコード化文字セットID (CCSID)を戻すのに使用されるCL変数がある場合に,その名前を指定します。他のすべての置き換えデータは戻される前に変換されません。変換エラーが起こった場合,またはテキストを変換するように要求したCCSIDが65535である場合には,CCSIDメッセージ・データが戻されます。データに*CCHAR置き換えデータがない場合には,65535が戻されます。そうでない場合には,テキストを変換したかったCCSIDが戻されます。即時メッセージでは,0が戻されます。渡したCCSIDを戻されたDTACCSIDと比較することによって,変換エラーの有無を調べることができます。この両者が等しくなく,65535でない場合には,変換エラーが起こりました。この変数は5桁の長さの10進変数でなければなりません。

1:メッセージの受信

RCVMSG   MSGQ(SMITH)  MSGKEY(&KEY)  MSG(&WORK)

このコマンドは,プログラム変数&KEYによって指定されたメッセージ参照キーを持つメッセージをメッセージ待ち行列SMITHから受け取ります。メッセージのテキストはCL変数&WORKにコピーされます。

2:新しいメッセージの受信

RCVMSG   MSGQ(INV)  WAIT(120)  MSG(&WORK)

このコマンドは,INVという名前のメッセージ待ち行列から新しいメッセージを受け取ってCL変数&WORKに入れます。メッセージ待ち行列に新しいメッセージがない場合には,プログラムは120秒まで新しいメッセージの到着を待機します。待ち行列に複数の新しいメッセージがある場合には,その待ち行列の最初のメッセージがプログラムによって受け取られるメッセージです。

3:プロシージャーからのメッセージの受信

RCVMSG   PGMQ(*SAME CURRENT_MONTH_TOTALS)  MSGTYPE(*EXCP)
         RMV(*KEEPEXCP)  MSGID(&MID)  MSG(&MTEXT)

このコマンドは,プロシージャーCURRENT_MONTH_TOTALSから例外メッセージを受け取ります。指定された名前が10文字を超えるので,システムはどのプログラムも検索しません。メッセージが未処理の例外であった場合には,そのメッセージは新しいメッセージとして呼び出しメッセージ待ち行列に残され,例外はRCVMSGコマンドによって処理されません。メッセージIDがCL変数&MIDに戻され,メッセージ・テキストはCL変数&MTEXTに戻されます。例外を処理して,メッセージを除去するには,次のRCVMSGコマンドを実行します。

RCVMSG   PGMQ(*SAME CURRENT_MONTH_TOTALS)  MSGTYPE(*EXCP)
         RMV(*YES)

4:プログラムまたはプロシージャーからのメッセージの受信

RCVMSG   PGMQ(*SAME TARGETPGM)  MSGTYPE(*EXCP)  RMV(*NO)
         MSGID(&MID)  MSG(&MTEXT)

このコマンドは,TARGETPGMという名前のプログラムまたはプロシージャーのメッセージ待ち行列から例外メッセージを受け取ります。指定された名前は9文字だけであるので,システムはプログラムとプロシージャーの両方を検索します。RMV(*NO)が指定されているので,メッセージが未処理の例外であった場合には,その例外がRCVMSGコマンドによって処理されます。メッセージは,古いメッセージとしてメッセージ待ち行列に残されます。

5:修飾子を使用したメッセージの受信

RCVMSG   PGMQ(*SAME PRINT_RPT_FMT1 DEPTRPTS AREARPTS)
         MSGTYPE(*EXCP)  RMV(*YES)
         MSGID(&MID)  MSG(&MTEXT)

このコマンドは,PRINT_RPT_FMT1という名前のプロシージャーのメッセージ待ち行列から例外メッセージを受け取ります。プロシージャーは,モジュールDEPTRPTSにコンパイル済みであり,結合プログラムAREARPTSに結合済みであることが必要です。RMV(*YES)が指定されているので,例外メッセージが未処理の例外に関するものである場合には,その例外が処理されます。メッセージは,常にメッセージ待ち行列から除去されます。

6:部分プロシージャー名を使用したメッセージの受信

RCVMSG   PGMQ(*SAME 'HANDLE_FORM_NUM>>>')  MSGID(&MID)
         MSG(&MTEXT)

このコマンドは,名前がHANDLE_FORM_NUMで始まる最新のプロシージャーから新しいメッセージを受け取ります。

エラー・メッセージ

*ESCAPE メッセージ

CPF2401
ライブラリー&1は認可されていない。
CPF2403
&2にメッセージ待ち行列&1が見つからない。
CPF2407
&2にメッセージ・ファイル&1が見つからない。
CPF2408
メッセージ待ち行列&1は認可されていない。
CPF2411
&2のメッセージ・ファイル&1は認可されていない。
CPF241C
SENDERパラメーターの変数が小さすぎる。
CPF2410
メッセージ・キーがメッセージ待ち行列&1に見つからない。
CPF2415
要求の終わりに達した。
CPF2422
応答が正しくない。
CPF2423
SENDERパラメーターに指定した変数が&1バイトより短い。
CPF2433
システム・ログ・メッセージ待ち行列&1にこの機能を使用することはできない。
CPF2449
応答でなければならないメッセージですが,応答ではありません。
CPF2450
ワークステーション・メッセージ待ち行列&1がジョブに割り振られていない。
CPF2451
メッセージ待ち行列&1は別のジョブに割り振られている。
CPF247A
呼び出しスタックの項目が見つからなかった。
CPF247E
CCSID &1が無効です。
CPF2471
フィールドの長さが正しくない。
CPF2477
メッセージ待ち行列&1は現在使用中である。
CPF2479
呼び出しスタックの項目が見つからなかった。
CPF2482
メッセージ・タイプ&1は無効です。
CPF24A3
呼び出しスタックのカウンター・パラメーターの値が正しくない。
CPF24A8
待機時間の値が正しくない。
CPF24B3
メッセージ・タイプ&1は無効です。
CPF2531
&3のための&2のメッセージ・ファイル&1に損傷がある。
CPF2532
ジョブ・メッセージ待ち行列に損傷がある。ジョブ・ログは終了しました。
CPF2548
&2のメッセージ・ファイル&1に損傷がある。
CPF2551
メッセージ・キーとメッセージ・タイプの組み合わせが正しくない。
CPF36F7
メッセージ待ち行列QSYSOPRは別のジョブに割り振られている。
CPF8127
&9のメッセージ待ち行列&4に&8の損傷がある。VLICログは&7です。
CPF8176
装置記述&4のメッセージ待ち行列に損傷がある。