本ページでは、MESSAGE命令について解説しています。MESSAGE命令は、エラー時の制御や、ユーザの次のアクションを誘導するための重要な役割を担います。
MESSAGE命令は、入力ミスをした時などに画面の下に赤や黄色で出てくる文章を制御しています。
このページで学べる内容
- MESSAGE命令の処理内容と使い方
- メッセージテーブル(T100)について
- メッセージタイプの意味と区別・処理内容の違いについて
ABAPのコーディングをマスターするうえで、避けては通れない必須知識ばかりですので、是非最後までご覧ください。
早速、解説に移ります。
MESSAGE命令とは?
MESSAGE命令とは、ユーザの入力ミスや何らかの例外処理が発生した際に画面に表示される文章メッセージを規定しています。
例えば、以下の画面がメッセージの出力例です。

FB03(会計伝票参照)の第1画面で、数値を入れるべき場合に文字列を入力してみました。すると、「!数値を入力してください」なるメッセージが出力されていることがわかるかと思います。(画面の一番下)
他にも、ユーザの入力ミスを知らせるためなど多くの画面でメッセージ命令が使われています。

上記2つの画面はSAPの標準画面ですが、アドオンのプログラムでも上記のようなメッセージが表示される場合には、MESSAGE命令が利用されています。
MESSAGE命令を適切に用いることができれば、ユーザにとっては次のアクションが分かりやすくなります。
どこの値が間違っていたのか?
どこの項目に入力漏れがあるのか?
MESSAGE命令はユーザビリティを上げる1つの手段であることを理解し、コーディング方法を学んでいきましょう。
構文ルール(原型):MESSAGE命令
MESSAGE ID メッセージID
TYPE メッセージタイプ
NUMBER メッセージコード
WITH データ項目&1
データ項目&2
データ項目&3
データ項目&4.
MESSAGE命令の原型です。MESSAGE命令をマスターするには、ページ後半で解説する「メッセージID」「メッセージタイプ」などの理解が不可欠です。
構文ルール(簡易型):MESSAGE命令
MESSAGE
メッセージタイプ+メッセージコード(メッセージID)
WITH データ項目&1
データ項目&2
データ項目&3
データ項目&4.
MESSAGE命令は2つ目に紹介した簡易型で用いられることがほとんどです。簡易型をベースにサンプルコードを用いて学習していきたいと思います。
*メッセージを出力する MESSAGE E017(ZAMCM01) "テーブル &1 に &2 が存在しません WITH TVKO "&1 P_VKORG. "&2
MESSAGE命令の処理内容
MESSAGE命令では、
①出力するメッセージの種類
②メッセージに表示するテキスト(変数等)
の2つの情報を指定します。先ほど用いたサンプルコードでは、「E017(ZAMCM01)」が①に相当し、「WITH~」が②に相当します。
*メッセージを出力する MESSAGE E017(ZAMCM01) "テーブル &1 に &2 が存在しません WITH TVKO "&1 P_VKORG. "&2
このコードは、簡単に説明すれば「 E017(ZAMCM01) 」というメッセージを「TVKO」「P_VKORG」という変数の値を組み合わせて表示する処理を行っているのです。
ここから、メッセージタイプなどの用語の意味とシステム的な処理について解説していきますので、大雑把な概要をここで理解しておいて下さい。
メッセージテーブル(T100)の構成

ここからは、上記命令をより深く理解するためのSAPのシステム知識を整理していきます。MESSAGE命令では、基本構文の理解もさることながら、メッセージテーブルの理解、メッセージタイプの制御の理解が必要となります。
SE91:メッセージテーブルの更新
MESSAGE命令は、テーブルID:T100を参照して文章を画面に表示します。T100のテーブル構成を以下に図示しました。

いたって、単純なテーブルです。「言語:SPRSL」「メッセージID:ARBGB」「メッセージコード:MSGNR」「文章:TEXT」の4つのみで構成されます。
このテーブルはリポジトリオブジェクトであり、トランザクションコード:SE91から更新することができます。
項目の左から順に追って説明します。
言語:SPRSL
1桁の言語キーです。SAPで見かける言語コードは普通2桁ですよね。例えば日本語であれば「JA」、英語であれば「EN」です。
T100のメッセージテーブルには、2桁目を省略したコードで登録されています。ここで重要なのは、言語によって表示されるメッセージが異なる、という点です。ログオンした際の言語が、日本語であれば日本語で。英語であれば英語でメッセージが表示されるのは、このテーブルに言語情報を持っているためです。
多言語化する際には、この点に注意が必要となってきます。テキストシンボル(テキストエレメント)も似たような仕組みを採用しているので、合わせて覚えておくと良いでしょう。
ID:ARBGB
現場によっては、メッセージクラスと呼ばれることもあります。これは、メッセージを1つの単位にまとめる役割を担っています。
メッセージテーブルを見てみるとわかりますが、メッセージの量は膨大に存在しています。そのメッセージを機能ごとに管理することで、メッセージ全体の管理をしやすくしています。
このIDに、Z始まり(アドオン開発用)やY始まり(テスト用)を指定すると、自由なメッセージを作成することができるようになります。
メッセージコード:MSGNR
メッセージコードは、最大3桁の数字で構成されます。現場によっては、このコードに規約を持たせることもありますが、通常は連番で採番していきます。
最初から、メッセージの全量と構成を決められるプロジェクトが少ないことと、メッセージの管理は、ID(メッセージクラス)で実現する場合が多いことが一因です。
文章:TEXT
ここには、画面に表示するメッセージを登録しておきます。最大73桁のテキストを保持することができます。
&1~&4までの間でデータ項目(変数)を含めることができます。先ほどの構文ルールの章で説明したように、WITH句で&1に対応する言語を指定し、動的にメッセージを出力をすることが可能です。
例えば、以下の構文で表示されるメッセージは
*メッセージを出力する MESSAGE E017(ZAMCM01) "テーブル &1 に &2 が存在しません WITH 'TVKO' "&1 P_VKORG. "&2
テーブルTVKOにP_VKORGが存在しません。
となります。&の部分をWITH句で指定した単語に変えることができる、ということです。
メッセージテーブル:T100の構成を知ると、メッセージ命令の全体像をつかみやすくなります。構文をそのまま覚えるだけでは実践的ではありませんので、本ページで何度も復習しておきましょう。
ここからは、MESSAGE命令の肝「メッセージタイプ」についての解説に移ります。
メッセージタイプとは
メッセージタイプとは、メッセージが表示される際の処理の挙動を制御する役割を担います。
例えば、メッセージを表示する際に合わせて処理を中断する場合には、「A」を。成功したことを知らせるメッセージであれば、「S」を指定します。
同じ文章でも、このメッセージタイプの指定によって画面の制御を変えることができます。メッセージタイプは全部で6つ存在します。
A:異常終了
このメッセージタイプを指定すると、メッセージの表示とともに処理を終了します(プログラムを強制終了します)。例えば、ユーザが画面に入力をしていた値を全てリセットして、トップ画面に戻したい場合に利用します。
X:異常終了
このメッセージタイプも「A」と同様、処理を終了させたい場合に用います。ただし、Xを指定した場合はダンプを表示します。(ダンプとは、エラーのログ情報みたいなものです)
E:エラー
最も使用頻度の高いメッセージタイプではないでしょうか。このメッセージタイプでは、処理を終了させるのではなく「処理の中断」を行わせることができます。
ユーザの入力に誤りがある場合、エラーメッセージ(※〇〇が正しくありません。)を表示し、新たな値を入力させることができます。正しい値が入力されるため何度もメッセージが表示されます。
W:警告
メッセージタイプ「E」と同様、処理を中断させます。ただし、この場合メッセージが表示されるのは一度きり―。つまり、正しい値にしても良いし、しなくても良い場合に利用します。
その名の通りあくまでも「警告」であるため、「本当にそれでいいの?」といったニュアンスのメッセージを表示する場合に使われるメッセージタイプです。
I:情報
このメッセージタイプは、処理を中断させます。その後、ユーザがEnterキーを押下することで処理を再開することができるメッセージタイプです。
処理に影響は与えないが、ユーザに注意喚起したい場合に用いることが一般的です。
S:成功
その名の通りです。ユーザが入力に成功した場合に表示されるメッセージの場合にこのメッセージタイプを利用します。
メッセージが表示されるのは、入力に成功した場合なので、入力画面ではなく、その次の画面です。よく間違いが散見される点なので注意が必要です。
メッセージタイプの注意点
メッセージタイプは、上記で説明した6つですが、イベントによっては多少動作が変わります。正直、そこまで細かく理解する必要はありませんのでご安心ください。
実際にコーディングする中でなんとなく理解できるようになってくるはずなので、そのノウハウを素早く獲得するためにも、まずは基本理解を深めましょう。
※イベントについて、よくわからない場合はこちらのページも合わせてお読みください。