アドオン開発で意外と盲点になるのがメッセージ出力の部分です。
ABAPでの基本的な機能の一つなので何が盲点なのかと疑問に思う方もいるかと思いますが、エラーメッセージを出力するときの挙動が作る人によって違うことがよくあります。
設計者が「エラーメッセージを出力する」と設計書に書いて、開発者が字面通りに実装しても、設計者が思い描いている挙動と異なる場合があるのです。
それでは何故そんなことが起きるのか、メッセージについて詳しくみていきましょう。
SAPで出力できるメッセージの種類
ABAPヘルプに記載がありますが、まとめると以下の6種類あります。
メッセージタイプ | テキスト | 挙動 |
S | 正常メッセージ | 処理続行 |
I | 情報メッセージ | 処理続行 |
W | 警告メッセージ | 中断or続行を実行時に選択 |
E | エラーメッセージ | 中断 |
A | 強制終了メッセージ | プログラム終了 |
X | 実行時エラー | ショートダンプ |
タイプAとX以外の4つはプロジェクトでよく使われますが、
レポートプログラムでメッセージを出力する場合、実装するイベントによって挙動が変わる場合があるので、設計者・開発者が共通の認識を持つことが重要です。
具体的な挙動は次で見ていきます。
警告メッセージ、エラーメッセージを出力する場合の注意点
警告メッセージ、エラーメッセージを出力したい場合、実装位置がイベント「AT SELECTION-SCREEN」であるか「START-OF-SELECTION」であるかで挙動が大きく変わるので注意が必要です。
警告メッセージ(タイプW)
AT SELECTION-SCREEN内(画面左側)で警告メッセージを出力する場合は、仕様通り警告メッセージとして選択画面上に表示されますが、
START-OF-SELECTION内(画面右側)で警告メッセージを出力すると、警告のメッセージタイプを指定してもエラーメッセージとして表示されます。しかも選択画面を抜けてしまっているので、メッセージが出た画面でENTERキーを押下すると、メニューの画面まで戻ってしまいます。
エラーメッセージ(タイプE)
AT SELECTION-SCREEN内(画面左側)でエラーメッセージを出力する場合は、選択画面上にエラーメッセージが表示されますが、
START-OF-SELECTION内(画面右側)でエラーメッセージを出力すると、警告メッセージの場合と同様に選択画面を抜けてエラーメッセージが出力されてしまいます。
選択画面を抜けてエラーメッセージが出力されるケースを実際のプロジェクトで案外よく見かけますが、操作性が悪くなるので避けるべきです。
一般的に、AT SELECTION-SCREENは選択画面項目のチェック処理、START-OF-SELECTIONはデータ抽出以降の主処理を実装するイベントとして使用されますが、主処理以降でエラーメッセージを出力したい場合はどうすればいいのでしょうか。
実装方法を見ていきましょう。
DISPLAY LIKEオプションを効果的に使う
メッセージを出力する命令文はそのままMESSAGEですが、そのオプションに「DISPLAY LIKE ~ 」というものがあります。
英語の直訳通りの意味ですが、「メッセージタイプを~のように見せる」というもので、STAR-OF-SELECTION内でエラーメッセージを出力する場合はこのやり方が一般的です。
こんな感じで使います。
MESSAGE 'test message' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ポイントは2つ。
- TYPE指定するメッセージタイプはS(正常)でDISPLAY LIKEオプションで表示したいメッセージタイプを指定すること
- LEAVE LIST-PROCESSINGで処理を終了すること
まとめ
- START-OF-SELECTION内での警告メッセージ、エラーメッセージ出力は避けるべき
- 代わりにDISPLAY LIKEオプションで警告やエラーのように見せること
メッセージ出力時の挙動については、あまり意識されない部分のため、作る人によって挙動が変わってしまうことがよくあります。
しかし、ユーザから見ると挙動に統一感がないのは好ましくありません。結合テストなどの後工程に入ってから挙動を統一するために修正をする可能性もあります。
設計時からメッセージ出力時の挙動を意識しておくことで、後ろの工程での手戻りをなくすことにも繋がりますので、設計者はもちろん開発者も意識するのが良いと思います。