【ABAP】ASSERT命令―アサーションエラーの使いどころを3分で解説

ABAP

ASSERT命令、及びアサーションエラーの仕組みと使いどころを解説します。

ASSERT命令は、一言で言うとプログラム内で起きた想定外のエラー情報を "開発者" に知らせるための命令です。読者の中には「ASSERT 1 = 2.」のような奇妙なコードを見かけたことがある方もいらっしゃるかもしれません。

このページでは、ASSERT命令の仕組み(アサーションエラーとは?)と使いどころをサンプルコード付きで解説します。

このページで学べる内容
  • Assert Error(アサートエラー)とは?
  • ASSERT命令の構文ルール:使い方

ABAPerとして1つレベルアップしたい方は必見です。是非最後までご覧ください。

スポンサーリンク
スポンサーリンク

Assert Error(アサートエラー)とは?

あまり聞きなれない言葉かと思いますが、アサートエラーを分かりやすく言い換えると想定外のエラーとなります。もっとかみ砕けば「ありえないエラー」です。

以下のコードをご覧ください。

* テーブルカテゴリの取得
SELECT TABNAME          "テーブル名
       TABCLASS         "テーブルカテゴリ
  INTO TABLE LT_DD02L
  FROM DD02L
  WHERE TABNAME = 'BKPF'.

上記のコードは指定したテーブルのテーブル名 / テーブルカテゴリを取得するだけの処理で、確実に処理が成功することが想定される処理です。この場合、絶対に "SY-SUBRC" の値は "0" 以外になることは想定されません。にもかかわらず、 "SY-SUBRC" の値が "0" 以外になってしまったら、それが「Assert Error(アサートエラー)」です。

この "想定外" はユーザにとっての想定外ではなく、あくまでも開発者にとっての "想定外" を指します。

ユーザの入力内容によって発生するエラーであれば、例外処理やMESSAGEの表示を行うのが適切です。それは、開発者にとって想定内であるためです。

一方で上記のように開発者にとっても想定外のエラー(ありえないエラー)の場合は、ASSERT命令を利用するのが適切です。

ASSERT命令

ASSERT命令:構文ルール

ASSERT (論理式).

* テーブルカテゴリの取得
SELECT TABNAME          "テーブル名
       TABCLASS         "テーブルカテゴリ
  INTO TABLE LT_DD02L
  FROM DD02L
  WHERE TABNAME = 'BKPF'.

* アサーション
ASSERT SY-SUBRC = 0.

ASSERT命令は、指定した論理式が偽の場合にプログラムの実行時エラー(ASSERTION FAILED)を発生させます。(プログラムがダンプします。)

※オプションを付与することで実行時エラーを回避することは可能ですが、利用されるシーンがほとんどないため説明は省略します。

* テーブルカテゴリの取得
SELECT TABNAME          "テーブル名
       TABCLASS         "テーブルカテゴリ
  INTO TABLE LT_DD02L
  FROM DD02L
  WHERE TABNAME = 'BKPF'.

* アサーション
ASSERT SY-SUBRC = 0.

WRITE '取得成功'.

「SY-SUBRC = 0」の場合は後続処理が続行されます(画面に「取得成功」と表示される)が、「SY-SUBRC = 0」ではない場合には、プログラムがそこで終了しASSERTION FAILEDとなります。

ASSERT命令(ASSERT 1 = 2 .)

ASSERT命令を利用したコードでたまに見かける例がこちら。

CASE GV_VALUE.
  WHEN GP_1000.
    PERFORM Dynrpo_SET_1000.      "Dynpro1000呼び出し
  WHEN GP_2000.
    PERFORM Dynrpo_SET_1000.      "Dynpro2000呼び出し
  WHEN GP_3000.
    PERFORM Dynrpo_SET_3000.      "Dynpro3000呼び出し    
  WHEN OTHERS.
    ASSERT 1 = 2.                 "想定外のエラー
ENDCASE.

「ASSERT 1 = 2. 」のように論理式が必ず偽(FALSE)となるように記述する例です。

変数「GV_VALUE」は、1000 / 2000 / 3000 のいずれかの値しか持たない想定のコード。この場合、1000 / 2000 / 3000 以外の値となった場合、アサートエラーを発生させることができます。

SAP / ABAPを1から学習したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

タイトルとURLをコピーしました