ABAP - Function ALVでの交通信号表示の実装

ALVグリッドでのステータス表示にアイコンを追加する方法

実際の開発において、データのステータスを視覚的にわかりやすく表示するニーズがあります。たとえば、出荷指示のピッキング状況(未ピッキング、部分ピッキング、完了)などをALVグリッドで表示する場合、赤・黄・緑の信号アイコンを用いることで情報が一目で伝わるようになります。

必要なデータ構造の定義

信号アイコンを表示するには、表示用データの構造にアイコン名を格納するためのフィールドを追加します。そのフィールドの型にはABAP標準のICONNAMEを使用します。

TYPES: BEGIN OF ty_data,
        flag   TYPE iconname,
      END OF ty_data.

DATA gw_data TYPE ty_data.

gw_data-flag = icon_red_light.    "赤信号
gw_data-flag = ICON_yellow_light. "黄信号
gw_data-flag = ICON_green_light.  "緑信号

サンプルコード

以下は、学生の成績データに対して、点数に応じてアイコンを自動で設定し、ALVグリッドで表示する例です。

TYPES: BEGIN OF ty_data,
        check  TYPE char1,
        status TYPE iconname,
        name   TYPE char10,
        points TYPE p LENGTH 2 DECIMALS 1,
        result TYPE c LENGTH 20,
      END OF ty_data.

DATA gt_data TYPE TABLE OF ty_data.
DATA gw_data TYPE ty_data.

* Layout定義
DATA gs_layout TYPE lvc_s_layo.

* フィールドカタログ定義
DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat.

DATA gv_pos TYPE i.

DEFINE %%add_fieldcat.
  gv_pos = gv_pos + 1.
  gs_fieldcat-col_pos = gv_pos.
  gs_fieldcat-fieldname = &1.
  gs_fieldcat-scrtext_m = &2.

  CASE &1.
    WHEN 'CHECK'.
      gs_fieldcat-checkbox = 'X'. "チェックボックス表示
      gs_fieldcat-edit     = 'X'. "編集可能
  ENDCASE.

  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR gs_fieldcat.
END-OF-DEFINITION.

START-OF-SELECTION.
  PERFORM fetch_data.
  PERFORM show_alv.

FORM fetch_data.
  gt_data = VALUE #(
                     ( check = '' status = '' name = 'TOM'    points = '58' )
                     ( check = '' status = '' name = 'JEERY'  points = '98' )
                     ( check = '' status = '' name = 'MASTER' points = '68' )
                   ).

  LOOP AT gt_data INTO gw_data.
    IF gw_data-points < 60.
      gw_data-status = icon_red_light.
      gw_data-result = '不合格'.
    ELSEIF gw_data-points >= 60 AND gw_data-points < 85.
      gw_data-status = ICON_yellow_light.
      gw_data-result = '良好'.
    ELSE.
      gw_data-status = ICON_green_light.
      gw_data-result = '優秀'.
    ENDIF.
    MODIFY gt_data FROM gw_data.
  ENDLOOP.
ENDFORM.

FORM show_alv.
  %%add_fieldcat: 'CHECK'   '選択',
                  'STATUS'  '状態',
                  'RESULT'  '結果',
                  'NAME'    '氏名',
                  'POINTS'  '点数'.

  gs_layout-cwidth_opt = 'X'.   "列幅自動調整
  gs_layout-zebra      = 'X'.   "ゼブラ模様表示

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_STATUS'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
    TABLES
      t_outtab                 = gt_data
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
ENDFORM.

FORM set_status USING p_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD'.
ENDFORM.

タグ: ABAP ALV Function Module アイコン表示 REUSE_ALV_GRID_DISPLAY_LVC

6月9日 20:20 投稿