!--a11y-->

ユーザメッセージを汎用モジュールモジュールから送信するためには、
MESSAGE ... RAISING 命令で指定されているメッセージです。汎用モジュールでの例外処理を RAISE 命令を使ってプログラムすると、実行時エラーが発生します。汎用モジュールでの例外処理に関する追加情報が必要な場合は、 汎用モジュールのプログラミングを参照してください。送信されるメッセージは、
MESSAGE ... RAISING 命令で指定されているメッセージです。 モジュールテーブルで汎用モジュールに対して定義されているメッセージは無視されます。DEMAND
命令を使用して従属データをコンテキストインスタンスから照会するときに、ユーザメッセージの処理をシステムが行うか、それともユーザ自身がプログラム内で処理するかどうかを決定することができます。メッセージ処理
- システムシステムにメッセージを処理させるときは、
DEMAND 命令の基本型を MESSAGES オプションを使用しないで使用します。その場合、汎用モジュール内の MESSAGE 命令が DEMAND 命令のあとで使用された場合と同じ効果があります。各種メッセージタイプに対するシステムのリアクションは、現在のユーザダイアログ(ダイアログ画面、選択画面または一覧)に依存することに注意してください。メッセージ処理
- プログラムメッセージをプログラムで捕捉したい場合は、オプション
MESSAGES INTO <itab> を使った DEMAND 命令を使用します。その場合、内部テーブル <itab> を構造 SYMSG を使って定義する必要があります。 DEMAND 命令の先頭の <itab> テーブルの内容が削除されます。コンテキストの処理中は、メッセージの出力やリアクションは発生せず、その ID を <itab> に書き込みます。 DEMAND 命令のあとに <itab> にメッセージがあると、リターンコード SY-SUBRC がゼロと等しくない値にセットされます。これによって、コンテキストによる自動メッセージ処理が防止され、
<itab> でのエントリを使ってユーザ自身の処理をプログラムすることができます。これは、たとえば入力画面の特定の項目を再入力できるようにしたい場合に重要です。この場合、メッセージ処理はコンテキスト内の項目ではなく、項目を基準としなければなりません(画面制御ロジックで FIELDS 命令を使用するか、選択画面で ABAP 命令 AT SELECTION-SCREEN を使用します)。

汎用モジュール
PERCENT に以下のソースコードがあるものとします。FUNCTION PERCENT.
RESULT = V1 - V2.
IF V1 = 0.
MESSAGE ID 'AT' TYPE 'E' NUMBER '012' RAISING DIV_ZERO.
ELSE.
RESULT = RESULT * 100 / V1.
ENDIF.
ENDFUNCTION.
コンテキスト
DOCU_TEST4 はこの汎用モジュールを唯一のモジュールとして使用し、入力パラメータ V1 と V2 にはキー項目 MAX と OCC 、出力パラメータ RESULT に従属項目 PERCENT を使用します。システムによるメッセージ処理を示すため、以下のプログラムを実行します。
REPORT RSGCON04.
DATA: INPUT_1 TYPE I,
INPUT_2 TYPE I,
PERCENTAGE TYPE I.
CONTEXTS DOCU_TEST4.
DATA: CONTEXT_INST TYPE CONTEXT_DOCU_TEST4.
SUPPLY MAX = 00
OCC = 20
TO CONTEXT CONTEXT_INST.
DEMAND PERCENT = PERCENTAGE
FROM CONTEXT CONTEXT_INST.
WRITE: / 'Percentage: ', PERCENTAGE.
プログラムは以下のエラーメッセージを出して終了します。
This is an error message
プログラムによるメッセージ処理を示すため、以下のプログラムを実行します。
REPORT RSGCON05.
DATA: INPUT_1 TYPE I,
INPUT_2 TYPE I,
PERCENTAGE TYPE I.
CONTEXTS DOCU_TEST4.
DATA: CONTEXT_INST TYPE CONTEXT_DOCU_TEST4.
DATA ITAB LIKE SYMSG OCCURS 0 WITH HEADER LINE.
SUPPLY MAX = 00
OCC = 20
TO CONTEXT CONTEXT_INST.
DEMAND PERCENT = PERCENTAGE
FROM CONTEXT CONTEXT_INST MESSAGES INTO ITAB.
WRITE: / 'Percentage: ', PERCENTAGE.
LOOP AT ITAB.
WRITE: / ITAB-MSGTY, ITAB-MSGID, ITAB-MSGNO,
ITAB-MSGV1, ITAB-MSGV2.
ENDLOOP.
このプログラムの出力は以下のとおりです。
PERCENTAGE: 0
E AT 012
プログラムはエラーメッセージを出して終了する代わりに、
<itab> にメッセージを格納するので、それを使用してそのあとの処理を行うことができます。