プログラム・メッセージ送信 (SNDPGMMSG)

プログラム・メッセージ送信(SNDPGMMSG)コマンドは,指定されたメッセージ待ち行列または呼び出しメッセージ待ち行列にメッセージを送ります。呼び出しメッセージ待ち行列は*EXT外部メッセージ待ち行列,または呼び出しスタック項目と関連したメッセージ待ち行列とすることができます。プログラムまたはプロシージャーが呼び出されるたびに,新しいメッセージ待ち行列がその呼び出しスタック項目と関連付けられます。メッセージ待ち行列はその関連プログラムまたはプロシージャーの名前で識別されます。

プログラムは,それ自身のメッセージ待ち行列,または別の呼び出しスタック項目と関連しているメッセージ待ち行列にメッセージを送ることができます。

このコマンドは例外および非例外メッセージの両方を送ることができます。例外メッセージが送信されると,送信元プログラムの処理は,その例外に対して処置が行われるまで中断されます。行われる処置によっては,送信元プログラムの処理は再開できます。再開できる場合には,処理は,送信元プログラム内のSNDPGMMSGコマンドの直後のCLコマンドから続行されます。例外以外のメッセージが送信される際には,送信元プログラムの処理は中断されません。メッセージの送信後に,送信元プログラムはSNDPGMMSGコマンドの直後のCLコマンドから実行を続行します。

プログラムまたはプロシージャーが例外メッセージをモニターしていて,そのプログラムまたはプロシージャーが実行されている呼び出しスタック項目に例外メッセージが送信されると,システムによって関連例外ハンドラーが呼び出されて実行されます。そのため,プログラムまたはプロシージャーは,自身が実行されている呼び出しスタック項目に例外メッセージが送信された時点を特定できます。例外以外のメッセージの自動通知はありません。

メッセージは即時メッセージ,またはメッセージ・ファイル内に保管されている事前定義メッセージとすることができます。メッセージ内の置換変数を置き換えるために,置換データをMSGDTAパラメーターに(1つ以上の連結されたメッセージ・データ・フィールドを含む単一の文字ストリングとして)指定することができます。メッセージの送信先は,ジョブの*EXTメッセージ待ち行列,呼び出しスタック項目に関連したメッセージ待ち行列,1つ以上の非プログラム・メッセージ待ち行列(ユーザー・プロファイル・メッセージ待ち行列など),システム操作員メッセージ待ち行列,またはシステム・ヒストリー・ログQHSTとすることができます。

制約事項:

  1. SNDPGMMSGコマンドにより,最大512桁のメッセージを送ることができます。ただし,メッセージが対話式ジョブの*EXTメッセージ待ち行列に送られた場合には,プログラム・メッセージの表示画面に76桁しか表示されません。メッセージがユーザー,ワークステーション,またはシステム操作員のメッセージ待ち行列に送られた場合には,メッセージ表示(DSPMSG)コマンドを使って,512桁全部を表示することができます。
  2. このコマンドは,(MSGTYPE(*INQ)によって指定された)照会メッセージを1つのメッセージ待ち行列または2つの非プログラム・メッセージ待ち行列(どちらか一方が*HSTLOGの場合)にしか送れません。

パラメーター

キーワード 記述 選択項目 ノーツ
MSG メッセージ・テキストまたは 文字値 オプショナル, 定位置 1
MSGID メッセージID 名前 オプショナル, 定位置 2
MSGF メッセージ・ファイル 修飾オブジェクト名 オプショナル, 定位置 3
修飾子 1: メッセージ・ファイル 名前
修飾子 2: ライブラリー 名前, *LIBL, *CURLIB
MSGDTA メッセージ・データ・フィールドの値 文字値, *NONE オプショナル, 定位置 4
TOPGMQ 呼出スタック項目メッセージ待行列 単一値: *EXT
その他の値: 要素リスト
オプショナル
要素 1: 関係 *PRV, *SAME
要素 2: 呼出スタック項目識別コード 要素リスト
要素 1: 呼び出しスタック項目 文字値, *
要素 2: モジュール 名前, *NONE
要素 3: バインド済みプログラム 名前, *NONE
TOMSGQ 非PGMメッセージ待ち行列へ送信 単一値: *TOPGMQ, *SYSOPR
その他の値 (最大 50 回の繰り返し): 修飾オブジェクト名
オプショナル
修飾子 1: 非PGMメッセージ待ち行列へ送信 名前, *HSTLOG
修飾子 2: ライブラリー 名前, *LIBL, *CURLIB
TOUSR TOユーザー・プロファイル 名前, *SYSOPR, *ALLACT, *REQUESTER オプショナル
MSGTYPE MSG タイプ *INFO, *INQ, *RQS, *COMP, *DIAG, *NOTIFY, *ESCAPE, *STATUS オプショナル
RPYMSGQ 応答を受けるメッセージ待ち行列 単一値: *PGMQ
その他の値: 修飾オブジェクト名
オプショナル
修飾子 1: 応答を受けるメッセージ待ち行列 名前
修飾子 2: ライブラリー 名前, *LIBL, *CURLIB
KEYVAR KEYVARのCL変数 (4) 文字値 オプショナル
CCSID コード化文字セットID 1-65535, *HEX, *JOB オプショナル

メッセージ・テキストまたは (MSG)

送信されるメッセージ・テキストを指定します。最大3000文字を指定することができます。あるいは,対話式ジョブでこのコマンドのプロンプトを出す場合には,最大512文字を指定することができます。特殊文字(ブランクを含む)を使用する場合には,ストリング全体をアポストロフィで囲まなければなりません。このパラメーターを指定した場合には,メッセージID (MSGID)パラメーターに値を指定することはできず,また,MSG タイプ (MSGTYPE)パラメーターに*ESCAPE, *NOTIFY,または*STATUSを指定することはできません。このパラメーターを指定した場合には,メッセージ・ファイル (MSGF)パラメーターまたは メッセージ・データ・フィールドの値 (MSGDTA)パラメーターに値を指定することはできません。これらのタイプは,メッセージIDの指定も必要とするからです。

コード化文字セットID (CCSID)に関する考慮事項

MSGパラメーターに指定されたテキストは,コード化文字セットIDがCCSIDパラメーターに指定されない限り,このコマンドを実行中のジョブのCCSIDに入っているとみなされます。メッセージ・ハンドラーとそれによるCCSIDの使用の詳細については,IBM I INFORMATION CENTER (HTTP://WWW.IBM.COM/SYSTEMS/I/INFOCENTER/)の「I5/OSのグローバリゼーション」トピック・コレクションを参照してください。

メッセージID (MSGID)

その事前定義メッセージがプログラムによってメッセージ待ち行列に送られるメッセージ記述のメッセージIDを指定します。このパラメーターを指定した場合には,メッセージ・テキストまたは (MSG)パラメーターに値を指定することはできません。

メッセージ・ファイル (MSGF)

送信される事前定義メッセージが入っているメッセージ・ファイルを指定します。メッセージID (MSGID)パラメーターに値を指定した場合には,このパラメーターは必須です。

修飾子1: メッセージ・ファイル

名前
送信される事前定義メッセージが入っているメッセージ・ファイルの名前を指定してください。

修飾子2: ライブラリー

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

メッセージ・データ・フィールドの値 (MSGDTA)

定義済みメッセージ内でメッセージ・データ・フィールドとして使用される1つまたは複数の置き換え値を含む文字ストリング,または文字ストリングを含むCL変数を指定します。置き換え値は,メッセージの定義時にメッセージ・テキストの中で定義された置換変数に代わります。

注: MSGパラメーターを指定した場合には,MSGDTAパラメーターを使用することはできません。

*NONE
指定されたメッセージの中で使用する置き換え値の文字ストリングはありません。
文字ストリング
プログラムによって送られる指定された定義済みメッセージの中で置き換え値を指定する文字ストリングを指定するか,文字ストリングを含むCL変数の名前を指定してください。

MSGDTAに置き換え値を指定するための規則:

  • 複数の置換変数が存在する場合,すべての置き換え値を連結して,MSGDTAパラメーターに指定される単一の文字ストリングを形成する必要があります。
  • メッセージ中に複数の置換変数が存在する場合,MSGDTA文字ストリングは,メッセージに定義されたすべてのメッセージ・データ・フィールド形式の合計と同じ長さでなければなりません。
  • 置き換え値を含む文字ストリングには,適切な充てん文字(数値の場合はゼロ,文字値の場合はブランク)によるコーディングを行ってこのストリング内の値を適切に位置指定することにより,単一ストリングの作成に使用される連結フィールドと突き合わせる必要があります。特殊文字(ブランクなど)を含むストリングは,アポストロフィで囲まなければなりません。置き換え値にヌル値*Nを指定することはできません。
  • 連結した置換データの文字ストリング全体の長さは3000文字を超えることはできません。また,このコマンドのプロンプトを出す場合には,この長さは512文字を超えることはできません。個々のメッセージ・データ・フィールドの長さに関する詳細については,ADDMSGD(メッセージ記述追加)コマンドのFMTパラメーターの説明を参照してください。
  • MSGDTAストリングに指定された置き換え値は,ADDMSGDコマンドのFMTパラメーターに定義されたのと同じ順序でなければなりません。
  • 置換変数に渡された置き換え値の長さがADDMSGDコマンドのFMTパラメーターに指定された長さより短い場合,置き換え値はヌル・フィールドになります。
  • 置換変数に渡された置き換え値の長さがADDMSGDコマンドのFMTパラメーターに指定された長さより長い場合,置き換え値は切り捨てられます。

これらの規則の使用例として,メッセージに3つの置換変数が含まれる例を考えます。

変数  タイプ  長さ             予期値
&1        *CHAR   3文字          YESまたはNO
&2        *CHAR   4桁            4桁
&3        *CHAR   8文字          1または2ワード

以下は,MSGDTAに指定できる有効な文字ストリングのサンプルです。

MSGDTA('YES0007NOT DONE')
MSGDTA('NO 0285FINISHED')
MSGDTA(&DTA)

2番目の置換変数は,10進変数としてではなく,文字変数として定義されていることに注意してください。CL変数ではなく文字ストリングを使用してMSGDTAパラメーターに置き換え値を指定する場合は,関連する置換変数を(ADDMSGDコマンドのFMTパラメーターに)文字変数として定義して,送信されるメッセージのテキストに無効な結果が生じないようにする必要があります。

有効な文字ストリングの3番目のサンプルは,実際の文字ストリングではなくCL変数を示しています。このCL変数&DTAは,送信元プログラム内で以下のように宣言される可能性があります。

DCL   VAR(&DTA)  TYPE(*CHAR)
      LEN(15)  VALUE('YES0175NOT DONE')

変数&DTAの初期値として指定された文字ストリングには,連結された3つの置き換え値(YES, 0175,およびNOT DONE)が含まれ,メッセージ・データとして送信されます。

注: MSGDTAに指定されたストリングの最後の文字が(フォーマット・タイプ*BIN, *UBIN, *ITV,および日付タイム・スタンプ・フィールドの場合に)ブランクの場合,システムはそのブランクを切り捨てます。結果のストリングがADDMSGDコマンドのFMTパラメーターに指定された長さより短い場合,置換変数はヌル・フィールドになります。システムがブランクを切り捨てないようにするには,(フォーマット・タイプ*BIN, *UBIN, *ITV,および日付タイム・スタンプ・フィールドの場合に)非ブランク文字をブランクの後のストリングに連結します。システムは,これらのブランクを保持し,追加の文字を切り捨てます。

コード化文字セットID (CCSID)に関する考慮事項

*CCHARタイプ・フィールドと対応するMSGDTAパラメーターに指定されたテキストは,コード化文字セットIDがCCSIDパラメーターに指定されない限り,このコマンドを実行中のジョブのCCSIDに入っているとみなされます。MSGDTAパラメーターに指定された他のすべてのテキストは65535であるとみなされ,変換されません。メッセージ・ハンドラーとそれによるCCSIDの使用の詳細については,IBM I INFORMATION CENTER (HTTP://WWW.IBM.COM/SYSTEMS/I/INFOCENTER/)の「I5/OSのグローバリゼーション」トピック・コレクションを参照してください。*CCHARタイプ・フィールドの詳細については,メッセージ記述追加(ADDMSGD)コマンドを参照してください。

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

指定したメッセージが送られる先のプログラム・メッセージ待ち行列を指定します。このメッセージ待ち行列は,*EXT外部待ち行列とするか,あるいは呼び出しスタック項目に関連付けられたメッセージ待ち行列とすることができます。

単一値

*EXT
メッセージはジョブの外部メッセージ待ち行列に送られます。外部メッセージ待ち行列は,表示装置ユーザーなどの,ジョブの外部要求元と通信するために使用されます。対話式ジョブ内で*EXTに送られる*INQメッセージは,省略時の応答が送られるまでに,24時間待機します。バッチ・ジョブでは,省略時の応答はただちに送られます。

この待ち行列に送られるメッセージの長さは512桁とすることができますが,プログラム・メッセージ画面に表示されるのはテキストの76桁だけです。

要素1: 関係

2つのパラメーター要素が,メッセージの送信元である呼び出しスタック項目メッセージ待ち行列を指定するために使用されます。最初の要素は,メッセージ待ち行列が2番目の要素によって識別されるプログラムまたはプロシージャーと関連付けられるか,あるいはプログラムまたはプロシージャーの呼び出し側と関連付けられるかを指定します。

*PRV
メッセージは,このパラメーターの2番目の値によって識別されるメッセージ待ち行列の直前にある呼び出しスタック項目のメッセージ待ち行列に送られます。ただし,2番目の要素によって識別されるものの直前のメッセージ待ち行列が統合化言語環境(ILE)プログラム入り口プロシージャー(PEP)用のものである場合には,メッセージはスタック中のPEPメッセージ待ち行列の前にあるメッセージ待ち行列に送られます。
*SAME
メッセージは,このパラメーターの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
プログラム修飾子は指定されません。
名前
メッセージ待ち行列の識別に使用されるプログラム名を指定します。この名前は,プロシージャーのバインド先のプログラムを識別します。

TOPGMQパラメーターの呼び出しスタック項目要素(2番目の要素の最初の修飾子)には,次の特殊値を指定することができます。

*CTLBDY
最も新しい制御境界にある呼び出しスタック項目を指定します。この項目は,SNDPGMMSGコマンドを実行しているCLプログラムと同じ活動化グループで実行されることになります。呼び出しスタック上のすべてのプログラムがOPMプログラムである場合には,制御境界は存在しないことに注意してください。
*PGMBDY
SNDPGMMSGコマンドを使用しているプログラムか名前がこのパラメーターの修飾子3に指定されているプログラムのいずれかのプログラム境界を指定します。修飾子3に名前が指定されていない場合には,プログラムはこのプログラムを使用している方のプログラムとみなされます。

プログラムが指定しようとしているILEプログラムである場合には,この特殊値はそのプログラムのプログラム入り口プロシージャー(PEP)の呼び出しスタック項目を識別します(このプログラムが動的呼び出しによって呼び出されたものである場合)。プログラムがプロシージャー・ポインターによって呼び出されたものである場合には,この特殊値はポイントされたプロシージャーの呼び出しスタック項目を識別します。プログラムが指定しようとしているILEサービス・プログラムである場合には,この特殊値はそのサービス・プログラム内で呼び出された最初のプロシージャーの呼び出しスタック項目を識別します。

指定しようとするプログラムがOPMプログラムである場合には,この特殊値は項目1の特殊値*またはプログラム名を指定するのと同じ効果を持ちます。違いがあるのは,OPMプログラムが自分自身を反復して呼び出した場合です。この場合には,この特殊値は,特殊値*またはプログラム名が使用された場合と同様に,現行反復レベルではなく最初の反復レベルを識別します。

*PGMNAME
呼び出しスタック項目がプログラム名(および任意選択でモジュール名)を使用することによってのみ識別されることを指定します。この特殊値を使用する場合には,修飾子3はILEプログラム,サービス・プログラム名,またはOPMプログラム名を指定していなければなりません。修飾子2には特殊値*NONEかILEモジュール名のいずれかを含めることができます。

この特殊値は,指定されたILEプログラムまたはサービス・プログラムの一部である最も新しく呼び出されたプロシージャーにメッセージを送るために使用されます。この特殊値を使用する時には,プロシージャー名を明示的に指定する必要はありません。モジュールも指定する場合には,この特殊値は,識別されたプログラムおよび識別されたモジュールの両方の部分である最も新しく呼び出されたプロシージャーにメッセージを送るために使用されます。

この特殊値はOPMプログラムにメッセージを送る場合にも使用することができます。この場合には,この特殊値を使用し,項目3にOPMプログラム名を指定することは,そのプログラム名をこの項目1に指定することとまったく同じ効果があります。OPMプログラムへの送信のためにこの特殊値を使用する場合には,モジュール名を*NONEとして指定しなければならないことに注意してください。

非PGMメッセージ待ち行列へ送信 (TOMSGQ)

通知メッセージの送り先である最大50個の非プログラム・メッセージ待ち行列を指定します。照会メッセージの場合には,1つのメッセージ待ち行列を指定するか,2つのメッセージ待ち行列(一方が*HSTLOGの場合)を指定することができます。 TOユーザー・プロファイル (TOUSR)パラメーターに値が指定されている場合には,このパラメーターを使用することはできません。

単一値

*TOPGMQ
メッセージは,呼出スタック項目メッセージ待行列 (TOPGMQ)パラメーターに指定された呼び出しメッセージ待ち行列にだけ送られます。
*SYSOPR
メッセージは,システム操作員メッセージ(ライブラリーQSYSのメッセージ待ち行列QSYSOPR)に送られます。ライブラリーQSYSのメッセージ待ち行列QSYSOPRに送られたメッセージについては,すべて自動的にそのメッセージのコピーがライブラリーQSYSのQHST(ヒストリー・ログ)メッセージ待ち行列に送られます。

修飾子1: PGMメッセージ待ち行列へ送信

*HSTLOG
メッセージは,システムのヒストリー・ログ(ライブラリーQSYSのメッセージ待ち行列QHST)に送られます。*HSTLOGが複数回指定されても,システムのヒストリー・ログに送られるメッセージは1つだけです。*HSTLOGがメッセージ待ち行列QSYSOPRとともに指定されても,システムのヒストリー・ログに送られるメッセージは1つだけです。
名前
メッセージが送られる先のメッセージ待ち行列の名前を指定してください。最大15個のメッセージ待ち行列を指定することができます。

修飾子2: ライブラリー

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

TOユーザー・プロファイル (TOUSR)

メッセージは,このパラメーターで指定したユーザーのユーザー・プロファイル中で指定されているメッセージ待ち行列に送られることを指定します。PGMメッセージ待ち行列へ送信 (TOMSGQ)パラメーターまたは呼出スタック項目メッセージ待行列 (TOPGMQ)パラメーターに値が指定されている場合には,このパラメーターを使用することはできません。

*SYSOPR
メッセージは,システム操作員(ライブラリーQSYSのメッセージ待ち行列QSYSOPR)に送られます。ライブラリーQSYSのメッセージ待ち行列QSYSOPRに送られたメッセージについては,すべて自動的にそのメッセージのコピーがライブラリーQSYSのQHST(ヒストリー・ログ)メッセージ待ち行列に送られます。
*REQUESTER
メッセージは,対話式ジョブの場合はユーザー・プロファイル・メッセージ待ち行列に送られ,バッチ・ジョブの場合はシステム操作員のメッセージ待ち行列(ライブラリーQSYSのQSYSOPR)に送られます。
*ALLACT
メッセージのコピーが,対話式ジョブを現在実行中の各ユーザー・プロファイルのユーザー・プロファイル・メッセージ待ち行列に送られます。照会メッセージで*ALLACTを指定することはできません。
名前
メッセージが送られる先のユーザーのユーザー・プロファイル名を指定してください。

MSG タイプ (MSGTYPE)

このメッセージがこのプログラムによって送られる時にどのメッセージ・タイプを割り当てるかを指定します。

:

  1. 照会メッセージを送ることができるのは,外部待ち行列かTOUSRまたはTOMSGQパラメーターに名前が指定されたメッセージ待ち行列のいずれかだけです。TOMSGQパラメーターを使って照会メッセージを送る時には,その値は*HSTLOGであれば,待ち行列をもう1つ指定することができます。
  2. 完了,診断,エスケープ,通知,および状況メッセージは,呼び出しメッセージ待ち行列に対してだけ送ることができます。
  3. エスケープ・メッセージを外部メッセージ待ち行列に送ることはできません。
*INFO
メッセージは通知メッセージとして送られます。
*INQ
メッセージは照会メッセージとして送られます。
*COMP
完了メッセージは呼び出しメッセージ待ち行列に送られます。処理の状況を指示する完了メッセージは正常に実行されました。
*DIAG
診断メッセージは呼び出しメッセージ待ち行列に送られます。このプログラムによってエラー検出についての情報が診断メッセージに提供されます。エラーは送り先,または実行中に要求した機能の間に起こったそれらのどちらかです。また,メッセージ待ち行列に診断メッセージがあることを受信プログラムまたはプロシージャーに知らせるために,エスケープまたは通知メッセージも送られるはずです。
*NOTIFY
通知例外メッセージは呼び出しメッセージ待ち行列に送られます。通知メッセージの記述は訂正処置による条件について送り出しプログラムを実行させる前でなければなりません。応答メッセージは送信済みプログラムのうしろに送られます。後に訂正処置,実行中に再開される送信済みプログラム,およびメッセージ待ち行列から応答メッセージに受信されます。
*ESCAPE
エスケープ例外メッセージは呼び出しメッセージ待ち行列に送られます。エスケープ・メッセージの記述は回復不能なエラー状態です。この送信されているプログラムは実行に継続されません。
*RQS
要求メッセージは呼び出しメッセージ待ち行列に送られます。要求メッセージに認可される装置ファイルから受信する要求データは別のプログラムまたはプロシージャーにこのプログラムから渡されます。要求を送るためには,MSGパラメーターによって指定された,即時メッセージを,使用しなければなりません。
*STATUS
状況例外メッセージは呼び出しメッセージ待ち行列に送られます。状況メッセージは,送信元プログラムによって実行される作業の状況を説明します。MSGDTAパラメーター中のメッセージ・データの最初の28文字は,メッセージのモニター(メッセージ・モニター(MONMSG)コマンドによって確立される)用の比較データとして使用されます。状況例外メッセージがモニターされていない場合には,制御は送信元プログラムに戻されます。状況メッセージが対話式ジョブの外部メッセージ待ち行列に送られた場合には,そのメッセージは24行目に表示され,処理は続行されますが,応答は必要ありません。

注: メッセージ・テキストまたは (MSG)パラメーターが指定されている場合には,この値を指定することはできません。

応答を受けるメッセージ待ち行列 (RPYMSGQ)

照会および通知メッセージの場合に限り,応答メッセージが送られる先の呼び出しメッセージ待ち行列または非プログラム・メッセージ待ち行列を指定します。

注: 通知メッセージが送られる場合,または照会メッセージが*EXTに送られる場合は,値*PGMQを指定する必要があります。

単一値

*PGMQ
照会または通知メッセージに対する応答は,プログラムまたはこのコマンドが使用されているプロシージャーの呼び出しスタック項目に関連したメッセージ待ち行列に送られます。

修飾子1: 応答を受けるメッセージ待ち行列

名前
応答が送られる先のメッセージ待ち行列の名前を指定してください。

修飾子2: ライブラリー

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

KEYVARのCL変数 (4) (KEYVAR)

このコマンドを含むプログラムが送り出したメッセージを識別するメッセージ参照キーが入っている,CL文字変数の名前(ある場合)を指定します。メッセージ参照キーは,メッセージが送られた時にシステムによって割り当てられ,ここで指定する変数に入れられます。

メッセージが呼び出しスタック項目に関連したメッセージ待ち行列に送られる場合には,KEYVARはそのメッセージ待ち行列(呼出スタック項目メッセージ待行列(TOPGMQ)パラメーターに指定されます)を参照します。MSG タイプ (MSGTYPE)パラメーターに*INQまたは*NOTIFYが指定されている場合,KEYVARは応答を受けるメッセージ待ち行列 (RPYMSGQ)パラメーターに指定されたメッセージ待ち行列にある送信元コピー・メッセージを参照します。その他の場合にはすべて,KEYVARはTOPGMQパラメーターに指定されているメッセージ待ち行列を参照します。

いずれのタイプのメッセージにも,プログラム・メッセージ待ち行列に送られる時には,キーを割り当てることができます。それ以外のメッセージ待ち行列に送られるメッセージの場合には,照会(*INQ)メッセージについてのみメッセージ参照キーを使用することができます。プログラム待ち行列以外の待ち行列に別のタイプのメッセージが送られる場合には,メッセージ・キーを使用することはできず,KEYVARにブランクが戻されます。

変数は,長さが4文字の文字変数でなければなりません。KEYVARが指定されていなくて,応答が必要な場合には,プログラムによってFIFO(先入れ先出し)順で受信することができます。

注: このフィールドの一般的な使用法として,照会メッセージおよび応答メッセージを処理します。照会メッセージの送信時に,その照会メッセージへの応答を取得するためのメソッドとしてこのパラメーターを使用します。例えば,ある照会の送信時,このパラメーターには送信元コピーのキーが入ります。このキーをRCVMSGコマンドのMSGKEYパラメーターに指定することで,照会メッセージにいったん送られた応答を得ることができます。

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

指定されたメッセージまたはメッセージ・データのコード化文字セットID (CCSID)を指定します。メッセージIDが指定された場合には,*CCHARタイプ・フィールドと対応するMSGDTA(メッセージ・データ)パラメーターによって指定されたテキストが,CCSIDパラメーターによって指定されたCCSIDになっているとみなされます。*CCHARタイプ・フィールドと対応していない指定されたデータは65535であるとみなされて,変換されません。*CCHARタイプ・フィールドの詳細については,メッセージ記述追加(ADDMSGD)コマンドを参照してください。

メッセージIDが指定されない場合には,MSG(メッセージ)パラメーターによって指定されたテキストは,CCSIDパラメーターによって指定されたCCSIDになっているとみなされます。メッセージ・ハンドラーとそれによるCCSIDの使用の詳細については,IBM I INFORMATION CENTER (HTTP://WWW.IBM.COM/SYSTEMS/I/INFOCENTER/)の「I5/OSのグローバリゼーション」トピック・コレクションを参照してください。

*JOB
メッセージ・データまたは即時テキストは,このコマンドを実行するジョブのCCSIDに入っているとみなされます。
*HEX
メッセージ・データまたは即時テキストは変換されません。CCSID 65535が使用されます。
コード化文字セットID
メッセージまたはメッセージ・データが入っていると考えられる有効なCCSIDを指定してください。有効な値の範囲は1から65535です。このコマンドはCCSIDの妥当性検査を行います。有効なCCSIDの値のリストについては,ISERIES INFORMATION CENTER (HTTP://WWW.IBM.COM/ESERVER/ISERIES/INFOCENTER)にあるグローバリゼーション情報を参照してください。

1:置き換え値の指定

SNDPGMMSG   MSGID(UIN0023)  MSGF(INV)  MSGDTA('50 100')
            TOPGMQ(*EXT)

このコマンドは,メッセージ・ファイルINVに保管されている,UIN0023として識別されたメッセージをジョブの外部メッセージ待ち行列に送ります(表示装置では,「プログラム・メッセージ表示」によってメッセージが表示されます)。MSGDTAパラメーターによって指定された2つの置き換え値を含むデータがメッセージと一緒に送られます。そして,このデータは,メッセージ・ファイルでメッセージUIN0023がどのように定義されているかに応じて,メッセージが受け取られる時に置き換え値として使用したり,あるいはダンプを取るデータとして使用することができます。変数&1および&2がそれぞれ3文字の長さの文字変数としてメッセージ・ファイルに定義され,メッセージUIN0023の第1レベル・メッセージ・テキストは「REQUESTED ITEM DECREASED BY &1; CURRENT BALANCE &2.」であったとします。送られるメッセージは「REQUESTED ITEM DECREASED BY 50; CURRENT BALANCE 100.」となります。

2:照会メッセージの送信

SNDPGMMSG   MSG('MOUNT CHECKS IN PRINTER BEFORE CONTINUING')
            MSGTYPE(*INQ)  TOMSGQ(*SYSOPR)

このコマンドは,照会メッセージをシステム操作員に送ります。操作員は,DSPMSGコマンドを使用することによって,送られたメッセージを調べ,その表示装置で直接メッセージに応答します。プログラムでは,操作員の応答を受け入れるためにメッセージ受信(RCVMSG)コマンドが使用されます。

3:エスケープ・メッセージの送信

SNDPGMMSG   MSGID(USR0001)  MSGF(USRMSGR)  TOPGMQ(*PRV  *)
            MSGTYPE(*ESCAPE)

このコマンドは,異常終了の原因となる可能性があるメッセージがプログラムまたはプロシージャーの呼び出し側にどのように送られるかの例です。メッセージUSR0001は,無効なコードが渡されたこと(数値が必要な場合の非数値など)を示している場合があります。送られているメッセージはエスケープ・メッセージであるので,そのメッセージを送っているプログラムまたはプロシージャーを再開することはできません。値*PRVおよび*はTOPGMQパラメーターでは省略時の値であるため,このコマンドにコーディングする必要はありませんでした。

4: ILEプロシージャーへのエスケープ・メッセージの送信

SNDPGMMSG   MSGID(USR0001)  MSGF(USRMSGR)
            TOPGMQ(*SAME ACCOUNT_FINAL_TOTALS)
            MSGTYPE(*ESCAPE)

このコマンドは,メッセージをILEプロシージャーに送ります。この例では,呼び出しスタック項目IDが10文字を超えています。修飾子は指定されていないので,プロシージャーの検索では,そのプロシージャーに関連した実際のモジュール名および結合プログラム名は使用されません。要素1に*SAMEが指定されているため,このエスケープ例外メッセージはACCOUNT_FINAL_TOTALSと関連付けられたメッセージ待ち行列に送られます。

5:修飾子を使用したエスケープ・メッセージの送信

SNDPGMMSG   MSGID(USR0001)  MSGF(USRMSGR)
            TOPGMQ(*PRV FIRST_QTR_SUMMARY SUMQTRS REPORTS)
            MSGTYPE(*ESCAPE)

このコマンドは,エスケープ例外メッセージをプロシージャーFIRST_QTR_SYMMARYの呼び出し側に送ります。プロシージャーは,モジュール名SUMQTRSおよび結合プログラム名REPORTSによって修飾されています。このエスケープ例外メッセージは,送信プログラムを中断し,その送信プログラムは再開されません。

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

SNDPGMMSG   MSGID(USR0001)  MSGF(USRMSGR)
            TOPGMQ(*SAME 'MANAGE_SALES>>>')  MSGTYPE(*COMP)

このコマンドは,名前がMANAGE_SALESで始まる最新のプロシージャーに,完了メッセージを送ります。

エラー・メッセージ

*ESCAPE メッセージ

CPF24CB
*PGMNAMEにはプログラム名の指定が必要である。
CPF2409
指定のメッセージ・タイプは指定したプログラム・メッセージ待ち行列では正しくない。
CPF2428
メッセージ待ち行列パラメーターが正しくありません。
CPF2453
応答待ち行列が,送信元のプログラム・メッセージ待ち行列ではない。
CPF2469
メッセージ&1の送信中に,エラーが起こった。
CPF247A
呼び出しスタックの項目が見つからなかった。
CPF247E
CCSID &1が無効です。
CPF2499
メッセージID&1が正しくない。
CPF2524
理由コード&1のために例外処理プログラムを使用することができない。
CPF2550
削除されたプログラムまたはプロシージャーに例外メッセージが送られた。
CPF2702
装置記述&1が見つかりません。
CPF7C08
保守サポート・ネットワークと接続されない。
CPF8C0C
問題レコード&1の内容が正しくない。
CPF8C0E
ライブラリーQGPLが見つからない。
CPF8C01
IBMサービス・システムに接続することができない。1つのセッションが許されます。
CPF8C07
パラメーターが正しくない。
CPF8C08
制御点名に*SELECTを指定することはできない。
CPF8C09
&1はサービス提供元として定義されていない。
CPF8C16
要求の処理中にエラーが起こった。
CPF8C17
サインオンが正常に行われなかった。
CPF8C18
保守サポート・ネットワークと接続されない。
CPF8C19
リモート・サポート適用業務が正常に実行されなかった。
CPF8C2A
IBMサービス・システムに接続することができない。
CPF8C24
要求の処理中にエラーが起こった。
CPF8C27
代替ロード装置が見つからない。
CPF8C32
PTFの発注を処理することができない。
CPF9830
ライブラリー&1を割り当てることができない。
CPF9845
ファイル&1のオープン中にエラーが起こった。
CPF9846
ライブラリー&2のファイル&1の処理中にエラーが起こった。
CPF9847
ライブラリー&2のファイル&1のクローズ中にエラーが起こった。