三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!
博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
登場人物紹介
三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!
博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
この記事を読むメリット
これまでABAPの様々な構文を紹介してきましたが、ここではまとめてMESSAGE命令・PERFORM命令・SUBMIT命令・TRY-CATCH構文の使い方や書き方について解説していきます!
新着のSAPフリーランス案件
【FI】
SAP HANAバージョンアップにおける会計機能設計支援
【FI】
自動車メーカー向けS4HANA導入支援(FI/CO)
【SD】
外資系アパレル業向けSDモジュール運用保守支援
【FI】
電気機械器具向け SAP導入プロジェクト支援 FIコンサル(AA/GL/AP/AR)
【FI】
電気機械器具向け SAP導入プロジェクト支援 FI SE(基本設計者)
【FI】
食品・薬品製造販売業向けSAP運用保守支援
【MM】
【SD】
大手製造業向けECC⇒S4移行におけるグローバルテンプレート構築支援(ロジ領域)
【FI】
FI-AAモジュール 要件定義支援
【FI】
【MM】
【SD】
S4HANA導入コンサル支援(SD/MM/FI)
【CO】
【MM】
半導体製造機器製造向けSAP運用保守
メッセージは、プログラムからユーザーに情報を伝える重要な手段の一つです。主な使用場面として、以下が挙げられます。
メッセージを効率的に管理するために「メッセージクラス」が利用されます。これにより、複数のメッセージを一元管理し、システム全体で共有可能になります。
プログラム内でMESSAGE命令を使ってメッセージを表示します。
基本の構文
MESSAGE <メッセージタイプ> <メッセージ番号> <メッセージクラス>.
MESSAGE S001(ZMSG). "ステータスメッセージを表示
このプログラムでは、メッセージクラスZMSGのメッセージ番号001を表示しています。タイプはステータス(S)です。
以下がABAPプログラムを実行した際の画面下に出るメッセージ表示です。
上記で出てきたメッセージタイプの一覧を表にしました。MESSAGE命令を使う上では必須の知識なので動かして覚えていきましょう!
メッセージタイプ | 説明 | 挙動 |
---|---|---|
A | 強制終了 | 処理が強制終了されます。 |
E | エラー | 選択画面での入力エラー時で使用した際、選択画面で誤った値を入力した場合にエラーが表示されます。再度選択画面に値を入力しなおし再実行可能です。 メイン処理(START-OF-SELECTION内)で使用すると処理が強制終了されます。 |
I | インフォメーション | 処理が中断されポップアップが表示されます。ENTER押下後に処理はそのまま続行されます。 |
S | ステータス | 設定したメッセージが表示されるのみで処理に影響を与えません。 主に進行状況を表示させたり、処理が成功した旨のメッセージを表示する際に使用します。 |
W | 警告 | ユーザーに警告(黄色のビックリマーク)でメッセージが表示されますが、処理は続行可能です。 |
X | 例外(プログラム終了) | ショートダンプされるため致命的なエラーが発生したことを通知したい時に使用します。T-CODE:ST22にてショートダンプ時の断面を確認することが可能です。 |
メッセージタイプに関係なく、指定したアイコンの表示をすることが可能です。
例えばメイン処理内でメッセージタイプ”E”の表示をさせたいが処理を止めたくない場合に、以下のようにメッセージタイプ”S”を指定しDISPLAY LINEに”E”設定することで解決します。
MESSAGE S002(ZMSG) DISPLAY LIKE 'E'. " エラーアイコンを表示
このプログラムでは、ステータス(S)のメッセージをエラー(E)アイコンで表示します。
以下がABAPプログラムを実行した際の画面下に出るメッセージ表示です。
メッセージ内のプレースホルダに値を動的に挿入します。
MESSAGE E003(ZMSG) WITH '田中太郎' '管理者権限'. " プレースホルダに変数値を挿入
このプログラムでは、登録したメッセージの&1に「田中太郎」、&2に「管理者権限」が挿入されます。
PERFORM命令(FORM命令)は「サブルーチン」や「関数」とも呼ばれ、プログラム内で共通処理としてまとめ、必要な場面で呼び出せる機能です。
サブルーチンはFORMブロックとして定義し、PERFORM命令で呼び出します。
基本の構文
●サブルーチンの定義
FROM <サブルーチン名>.
” 実行する処理を記述
ENDFROM.
●サブルーチンの呼び出し
PEFROM <サブルーチン名>.
START-OF-SELECTION.
PERFORM display_message.
FORM display_message.
WRITE: / 'これはサブルーチンから出力されたメッセージです。'.
ENDFORM.
このプログラムでは、サブルーチンdisplay_messageを呼び出し、指定のメッセージを画面に出力します。
サブルーチンでは引数を用いることで、処理を動的に変更できます。
START-OF-SELECTION.
PERFORM display_message USING 'こんにちは、世界!'.
FORM display_message USING text TYPE string.
WRITE: / text.
ENDFORM.
このプログラムでは、サブルーチンに文字列「こんにちは、世界!」を渡し、画面に出力します。
DATA: lv_number TYPE i VALUE 5.
START-OF-SELECTION.
PERFORM double_number CHANGING lv_number.
WRITE: / '結果:', lv_number.
FORM double_number CHANGING number TYPE i.
number = number * 2.
ENDFORM.
このプログラムでは、CHANGINGパラメータを使い、数値を2倍にして結果を返します。
DATA: lv_base TYPE i VALUE 3,
lv_result TYPE i.
START-OF-SELECTION.
PERFORM calculate_power USING lv_base
CHANGING lv_result.
WRITE: / '3の3乗は:', lv_result.
FORM calculate_power USING base TYPE i
CHANGING result TYPE i.
result = base ** 3.
ENDFORM.
このプログラムでは、USINGで基数を渡し、CHANGINGで結果を呼び出し元に返しています。このサブルーチンは、渡された基数を3乗した結果を計算します。
1、引数の型を明示する
引数の型をしっかり指定し、意図しないデータ型のエラーを防ぎます。
2、可読性を重視する
サブルーチンの名前や引数は、処理内容が明確にわかるように命名しましょう。
SUBMIT命令は、ABAPプログラムから他のABAPプログラムを呼び出して実行するためのコマンドです。プログラム間でデータを連携したり、バッチ処理を実行する際に便利です。
基本の構文
SUBMIT <プログラム名> [WITH <条件>] AND RETURN.
<プログラム名>: 実行するABAPプログラム名
WITH: 実行時に渡すパラメータを指定
AND RETURN: 呼び出し元のプログラムに戻る
呼び出し先プログラムにパラメータを渡すことができます。
●呼び出し元プログラム(Z_CALL_PROGRAM)
REPORT z_call_program.
PARAMETERS: p_name TYPE string DEFAULT 'John'.
START-OF-SELECTION.
" SUBMITで別プログラムを呼び出し
SUBMIT z_target_program WITH p_name = p_name AND RETURN.
●呼び出し先プログラム(Z_TARGET_PROGRAM)
REPORT z_target_program.
PARAMETERS: p_name TYPE string.
START-OF-SELECTION.
WRITE: / '呼び出し元から渡された名前:', p_name.
このプログラムでは、Z_CALL_PROGRAMがZ_TARGET_PROGRAMを呼び出し、パラメータp_nameを渡します。呼び出し先では、その値を受け取って画面に出力します。
SUBMITとスプーリングを組み合わせて、実行結果を取得できます。
●呼び出し元プログラム(Z_CALL_TABLE_PROGRAM)
REPORT z_call_table_program.
DATA: lt_list TYPE TABLE OF abaplist, " スプールデータを格納
lt_output TYPE TABLE OF char10, " 実行結果を保持
lv_text TYPE char10.
START-OF-SELECTION.
" SUBMITでプログラムを呼び出し、スプールに出力
SUBMIT z_target_table_program EXPORTING LIST TO MEMORY AND RETURN.
" スプールリストを取得
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = lt_list
EXCEPTIONS
others = 1.
" スプールリストをテキスト形式に変換
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
listobject = lt_list
listasci = lt_output
EXCEPTIONS
others = 1.
" 結果を表示
LOOP AT lt_output INTO lv_text.
WRITE: / lv_text.
ENDLOOP.
●呼び出し先プログラム(Z_TARGET_TABLE_PROGRAM)
REPORT z_target_table_program.
DATA: lt_data TYPE TABLE OF char10.
START-OF-SELECTION.
" サンプルデータ作成
APPEND 'データ1' TO lt_data.
APPEND 'データ2' TO lt_data.
APPEND 'データ3' TO lt_data.
" データを出力
LOOP AT lt_data INTO DATA(lv_row).
WRITE: / lv_row.
ENDLOOP.
このプログラムでは、SUBMITを使用してZ_TARGET_TABLE_PROGRAMを呼び出し、結果をスプールに出力します。呼び出し元プログラムでスプールを取得し、テキスト形式に変換して表示します。Z_TARGET_TABLE_PROGRAMは内部テーブルlt_dataのデータを画面に出力するシンプルなプログラムです。
TRY-CATCH構文は、プログラム内で発生する例外(エラー)をキャッチし、適切な処理を行うための仕組みです。たとえば、ファイル読み込み時にエラーが発生しても、ショートダンプを回避し、エラー内容をログに記録したり、代替処理を実行することが可能です。
基本の構文
TRY.
” エラーが発生する可能性のある処理
CATCH <例外クラス>.
” エラーが発生した際の処理
ENDTRY.
TRY: エラーが発生する可能性のある処理を記述
CATCH: 発生したエラーをキャッチし、対応する処理を記述
※CATCHブロックを複数設けることで、異なる種類の例外を別々に処理が可能
ENDTRY: ブロックの終了
DATA: lv_result TYPE i.
TRY.
lv_result = 10 / 0. " ゼロ除算でエラー発生
CATCH cx_sy_arithmetic_error.
WRITE: / '計算エラーが発生しました。'.
ENDTRY.
このプログラムでは、ゼロ除算エラーをキャッチし、計算エラーの通知メッセージを表示します。
例外クラスは、ABAPで発生するエラーの種類を定義したクラスです。
SAPが提供する標準例外クラスの例:
ABAPを用いたメッセージ、サブルーチン、プログラム呼出し、try-catchの基本構文の解説は以上です!
他の構文についても解説しているのでぜひ確認してみてくださいね!
新着のSAPフリーランス案件
【FI】
SAP HANAバージョンアップにおける会計機能設計支援
【FI】
自動車メーカー向けS4HANA導入支援(FI/CO)
【SD】
外資系アパレル業向けSDモジュール運用保守支援
【FI】
電気機械器具向け SAP導入プロジェクト支援 FIコンサル(AA/GL/AP/AR)
【FI】
電気機械器具向け SAP導入プロジェクト支援 FI SE(基本設計者)
【FI】
食品・薬品製造販売業向けSAP運用保守支援
【MM】
【SD】
大手製造業向けECC⇒S4移行におけるグローバルテンプレート構築支援(ロジ領域)
【FI】
FI-AAモジュール 要件定義支援
【FI】
【MM】
【SD】
S4HANA導入コンサル支援(SD/MM/FI)
【CO】
【MM】
半導体製造機器製造向けSAP運用保守
SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!
SAPラボのライターの特徴
・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!
SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。
募集要項
・SAP導入や運用保守プロジェクトへの参画経験1年以上
ご応募/お問合せ先
info@sap-labo.com
少しでもご興味ある方、ぜひお気軽にご連絡下さい!
新卒でSAPエンジニアとしてABAPでの新規開発や保守業務を担当。
業務内容としてはロジ系(MM/SD)がメインで、ABAPの開発が最も得意。