【ABAP】ALV – 項目追加しても一覧に表示されない場合の対策方法(サンプルあり)

ABAP

以前の投稿(【ABAP】ALV – 行選択ボタンの表示(サンプルコードあり))で、行選択ボタンを追加したらショートダンプが起きる場合があると書きました。

既存のALVレポートに対して項目追加や属性変更をしても、更新内容が反映されないケースがあるので原因と対策方法を説明します。

事象の確認

【ABAP】ALV – 行選択ボタンの表示(サンプルコードあり)で作成したプログラムを更新していきます。

既存の画面に項目「登録日(CRDAT)」を追加します。

プログラムは、構造に項目を追加するだけで、該当項目が自動で取得されるように作成しています。

デバッグで内部テーブルの中身を確認すると、登録日を取得できていることが確認できます。

表示されたALVレポートには登録日が表示されていません。

レイアウトで非表示になっている訳でもありません。

プログラム上は想定通り取得できているのに、どこにも表示されないのは何故でしょうか。原因を見ていきましょう。

ALVレポートに更新内容が反映されない原因

結論を先に書くと、前回実行時のデータ構造が表示されるためです

実際にフィールドカタログを取得する汎用モジュール(REUSE_ALV_FIELDCATALOG_MERGE)で取得された内部テーブルの中身を見てみましょう。

構造には登録日を追加していますが、登録日が取得されていません。

続けて対策方法を見ていきます。

対策方法

対策は簡単で、汎用モジュールのパラメータを追加するだけです。

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_structure_name       = 'YTEST0008'
      i_bypassing_buffer     = abap_on
    CHANGING
      ct_fieldcat            = it_fcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

EXPORTINGパラメータの「I_BYPASSING_BUFFER」に’X’を渡すだけです。

これで実行してみましょう。

めでたく追加項目が取得されましたね。ALV画面にもちゃんと表示されています。

サンプルコード

【ABAP】ALV – 行選択ボタンの表示(サンプルコードあり)のソースコードに1行追加しただけです。

REPORT ytest0008.

TYPES:
  BEGIN OF t_main.
    INCLUDE TYPE ytest0008.
  TYPES:
    box TYPE checkbox,
  END   OF t_main.

DATA: it_main TYPE TABLE OF t_main.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
DATA: wa_layout TYPE slis_layout_alv.

START-OF-SELECTION.

  SELECT * FROM but000 INTO CORRESPONDING FIELDS OF TABLE it_main.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_structure_name       = 'YTEST0008'
      i_bypassing_buffer     = abap_on
    CHANGING
      ct_fieldcat            = it_fcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  wa_layout-box_fieldname     = 'BOX'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat   = it_fcat
      is_layout     = wa_layout
    TABLES
      t_outtab      = it_main
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.

行選択ボタンの追加時にショートダンプが発生した理由は?

【ABAP】ALV – 行選択ボタンの表示(サンプルコードあり)で行選択ボタンを追加したときはショートダンプが発生したのに、今回の追加項目でショートダンプが発生しなかったのはなぜでしょうか。

行選択ボタンの場合はレイアウトパラメータで行選択ボタンの項目IDを渡してフィールドシンボルで動的に割り当てていますが、フィールドカタログに行選択ボタンの項目IDが存在しなかったため割当できずショートダンプが発生していました。

まとめ

追加項目がALV一覧に反映されない問題は、汎用モジュールのパラメータを1つで解決します。知らない人がこの問題に直面すると調査に時間がかかってしまうので、開発の際は予め「I_BYPASSING_BUFFER」パラメータを使用することをおすすめします。

コメント

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