%MSG (メッセージ ID: メッセージ・ファイル { : replacement-text } )
%MSG は、 SND-MSG 命令の第 2 オペランドとして使用されます。 %MSG は値を戻しません。また、SND-MSG 命令以外の場所で指定することはできません。
%MSG は、送信するメッセージを指定します。
第 1 オペランドはメッセージ ID です。 これはジョブ CCSID の文字式でなければなりません。 メッセージ ID の長さは 7 文字です。 オペランドの長さが 7 より長い場合、残りの文字はブランクでなければなりません。 実行時には, メッセージ ID がメッセージ・ファイルに存在していなければなりません。
- MYMSGF
- MYLIB/MYMSGF
- *LIBL/MYMSGF
第 3 オペランドはオプションです。 メッセージの置換テキストを指定します。 これは、ジョブ CCSID またはデータ構造内の文字値にすることができます。
%MSG の例
以下の例では、メッセージ・ファイル MYLIBL/MYMSGF が存在し、ライブラリー MYLIB がライブラリー・リストにあることを前提としています。
これらの例を試してみたい場合には, 次の CL コマンドを使用してメッセージ・ファイルを作成することができます。
- メッセージ ABC0001 には置換テキストがありません。
- メッセージ ABC0002 には 1 つの置換値があります。 このタイプは、RPG の CHAR (10) 値と一致します。
- メッセージ ABC0003 には、2 つの置換値があります。 最初の置換値のタイプは RPG の CHAR (25) 値と一致し、2 番目の置換値のタイプは RPG の PACKED (5: 2) 値と一致します。
CRTMSGF MYLIB/MYMSGF
ADDMSGD MSGID(ABC0001)
MSGF(MYLIB/MYMSGF)
MSG('MSGID = ABC0001') /* 1 */
ADDMSGD MSGID(ABC0002)
MSGF(MYLIB/MYMSGF)
MSG('MSGID = ABC0002, &1')
FMT((*CHAR 10)) /* 2 */
ADDMSGD MSGID(ABC0003)
MSGF(MYLIB/MYMSGF)
MSG('MSGID = ABC0003, &1, &2.')
FMT((*CHAR 25) (*DEC 5 2)) /* 3 */
以下の例では、通知メッセージ ABC0001 をメッセージ・ファイル MYMSGFに送信します。
ジョブ・ログには「MSGID = ABC0001」が示されます。
SND-MSG %MSG('ABC0001' : 'MYMSGF');
以下の例では、メッセージ・ファイル MYMSGF内のエスケープ・メッセージ ABC0002 を送信します。 このメッセージの置換テキストのタイプは CHAR (10)であるため、%MSG の置換テキスト・オペランドとして文字式を使用できます。
ジョブ・ログに「MSGID = ABC0002, Error!」と表示されます。
SND-MSG *ESCAPE %MSG('ABC0002' : 'MYMSGF' : 'Error!');
以下の例では、通知メッセージ ABC0003 をメッセージ・ファイル MYMSGFに送信します。 このメッセージの置換テキストには 2 つの値があるため、置換テキストを指定するためにデータ構造が使用されます。 データ構造の各サブフィールドは、置換値と一致します。
ジョブ・ログには、「MSGID = ABC0003, Radio, 15.99.」と表示されます。
DCL-DS ABC0003_text qualified;
item CHAR(25);
price PACKED(5:2);
END-DS;
ABC0003_text.item = 'Radio';
ABC0003_text.price = 15.99;
SND-MSG *INFO %MSG('ABC0003' : 'MYMSGF' : ABC0003_text);