%MSG (メッセージ ID: メッセージ・ファイル { : replacement-text } )

%MSG は、 SND-MSG 命令の第 2 オペランドとして使用されます。 %MSG は値を戻しません。また、SND-MSG 命令以外の場所で指定することはできません。

%MSG は、送信するメッセージを指定します。

第 1 オペランドはメッセージ ID です。 これはジョブ CCSID の文字式でなければなりません。 メッセージ ID の長さは 7 文字です。 オペランドの長さが 7 より長い場合、残りの文字はブランクでなければなりません。 実行時には, メッセージ ID がメッセージ・ファイルに存在していなければなりません。

第 2 オペランドはメッセージ・ファイルです。 これはジョブ CCSID の文字式でなければなりません。 以下のいずれかの形式にすることができます。
  • MYMSGF
  • MYLIB/MYMSGF
  • *LIBL/MYMSGF

第 3 オペランドはオプションです。 メッセージの置換テキストを指定します。 これは、ジョブ CCSID またはデータ構造内の文字値にすることができます。

%MSG の例

以下の例では、メッセージ・ファイル MYLIBL/MYMSGF が存在し、ライブラリー MYLIB がライブラリー・リストにあることを前提としています。

これらの例を試してみたい場合には, 次の CL コマンドを使用してメッセージ・ファイルを作成することができます。

  1. メッセージ ABC0001 には置換テキストがありません。
  2. メッセージ ABC0002 には 1 つの置換値があります。 このタイプは、RPG の CHAR (10) 値と一致します。
  3. メッセージ 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);