!--a11y-->

ユーザメッセージをテーブルモジュールから送るときは、最初に
モジュールテーブルの個別モジュールに対するメッセージを定義しておく必要があります。何も定義されていないと、テーブルモジュールに関するメッセージは出力することができず、該当する従属値が単にリセットされるだけです。DEMAND
命令を使用して従属データをコンテキストインスタンスから照会するときに、ユーザメッセージの処理をシステムが行うか、それともユーザ自身がプログラム内で処理するかどうかを決定することができます。メッセージ処理
- システムシステムにメッセージを処理させるときは、
DEMAND 命令の基本型を MESSAGES オプションを使用しないで使用します。その場合、以下の命令が DEMAND 命令のあとで使用された場合と同じ効果があります。MESSAGE ID 'Message Id' TYPE 'T' NUMBER 'Number'
WITH 'Variable 1' .... 'Variable 4'.
MESSAGE
命令の引数は モジュールテーブルの該当するエントリから取得されます。各種メッセージタイプに対するシステムのリアクションは、現在のユーザダイアログ(ダイアログ画面、選択画面または一覧)に依存することに注意してください。メッセージ処理
- プログラムメッセージをプログラムで捕捉したい場合は、オプション
MESSAGES INTO <itab> を使った DEMAND 命令を使用します。その場合、内部テーブル <itab> を構造 SYMSG を使って定義する必要があります。 DEMAND 命令の先頭の <itab> テーブルの内容が削除されます。コンテキストの処理中は、メッセージの出力やリアクションは発生せず、その ID を <itab> に書き込みます。 DEMAND 命令のあとに <itab> にメッセージがあると、リターンコード SY-SUBRC がゼロと等しくない値にセットされます。これによって、コンテキストによる自動メッセージ処理が防止され、
<itab> でのエントリを使ってユーザ自身の処理をプログラムすることができます。これは、たとえば入力画面の特定の項目を再入力できるようにしたい場合に重要です。この場合、メッセージ処理はコンテキスト内の項目ではなく、項目を基準としなければなりません(画面制御ロジックで FIELDS 命令を使用するか、選択画面で ABAP 命令 AT SELECTION-SCREEN を使用します)。

コンテキスト
DOCU_TEST1 ( モジュールとしてのテーブルの使用を参照)の モジュールテーブルにモジュール SPFLI に対する以下のエントリが含まれているとします。
システムによるメッセージ処理を示すため、以下のプログラムを実行します。
REPORT RSGCON02.
DATA: C_FROM LIKE SPFLI-CITYFROM,
C_TO LIKE SPFLI-CITYTO.
CONTEXTS DOCU_TEST1.
DATA: CONTEXT_INST TYPE CONTEXT_DOCU_TEST1.
SUPPLY CARRID = 'XX'
CONNID = '400'
TO CONTEXT CONTEXT_INST.
DEMAND CITYFROM = C_FROM
CITYTO = C_TO
FROM CONTEXT CONTEXT_INST.
WRITE: / C_FROM, C_TO.
プログラムは以下のエラーメッセージを出して終了します。
No entries found for key XX 0400
プログラムによるメッセージ処理を示すため、以下のプログラムを実行します。
REPORT RSGCON03.
DATA: C_FROM LIKE SPFLI-CITYFROM,
C_TO LIKE SPFLI-CITYTO.
DATA ITAB LIKE SYMSG OCCURS 0 WITH HEADER LINE.
CONTEXTS DOCU_TEST1.
DATA: CONTEXT_INST TYPE CONTEXT_DOCU_TEST1.
SUPPLY CARRID = 'XX'
CONNID = '400'
TO CONTEXT CONTEXT_INST.
DEMAND CITYFROM = C_FROM
CITYTO = C_TO
FROM CONTEXT CONTEXT_INST MESSAGES INTO ITAB.
WRITE: / C_FROM, C_TO.
LOOP AT ITAB.
WRITE: / ITAB-MSGTY, ITAB-MSGID, ITAB-MSGNO,
ITAB-MSGV1, ITAB-MSGV2.
ENDLOOP.
このプログラムの出力は以下のとおりです。
E AT 107 XX 0400
プログラムはエラーメッセージを出して終了する代わりに、
<itab> にメッセージを格納するので、それを使用してそのあとの処理を行うことができます。