abap OOALV案例

该案例代码演示了如何通过 OOALV 创造一个可定制的,带有自定义行颜色、工具栏按钮和用户命令的表格。

1.定义数据

TYPES: BEGIN OF ty_sales,
         sales_order TYPE vbeln_va,   " 销售订单号
         customer_id TYPE kunnr,      " 客户 ID
         order_date  TYPE erdat,      " 订单日期
         net_amount  TYPE bapivbapko-netwr,   " 净金额 
       END OF ty_sales.

DATA: lt_sales TYPE TABLE OF ty_sales WITH HEADER LINE.

2.查询数据并生成字段目录

* 获取销售订单数据
SELECT a~vbeln a~kunnr a~erdat b~netwr
   INTO TABLE lt_sales
   FROM vbak AS a
   JOIN vbap AS b ON a~vbeln = b~vbeln
   WHERE a~auart EQ 'OR'

* 创建字段目录 
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name     = 'TY_SALES'
  CHANGING
    ct_fieldcat          = gt_fcat[].

3.创建 ALV 对象

* 创建 ALV 对象
DATA(lo_alv) = NEW cl_gui_alv_grid( ).
lo_alv->set_table_for_first_display(
      EXPORTING
        i_structure_name     = 'TY_SALES'
        is_layout             = gs_layout
        it_toolbar_excluding = it_toolbar_excl[]
      CHANGING
        it_outtab             = lt_sales
        it_fieldcatalog       = gt_fcat[]
        it_sort               = gt_sort[]
        it_alv_edit           = gt_edited_cells[]
).

4.添加自定义行颜色

* 定义回调函数
METHODS:
  row_color
    FOR EVENT row_color_of_table OF cl_gui_alv_grid
    IMPORTING
    e_row_id
    e_row_settings.

* 在 ALV 对象上注册回调函数
SET HANDLER me->row_color FOR lo_alv.

* 添加回调函数的实现
METHOD row_color.
  DATA: lv_index TYPE i.
  " 每隔两行一换色 
  IF odd(e_row_id) = abap_false.
    READ TABLE me->mt_sales INDEX e_row_id / 2 ASSIGNING FIELD-SYMBOL(<item>).
    lv_index = sy-tabix - ( e_row_id / 2 * 2 ) + 1. 
    CASE lv_index.
      WHEN 1.
        e_row_settings-row_style = cl_gui_alv_grid=>mc_style_hotspot_light.
      WHEN 2.
        e_row_settings-row_style = cl_gui_alv_grid=>mc_style_hotspot_dark.
    ENDCASE.
  ENDIF.
ENDMETHOD.

5.添加工具栏按钮和用户命令

* 定义回调函数  
METHODS:
  process_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING
    e_ucomm, e_extab,
    e_repid, e_selfield.

* 在 ALV 对象上注册回调函数 
SET HANDLER me->process_user_command FOR lo_alv.

* 添加工具栏按钮 
DATA(lo_toolbar) = lo_alv->get_toolbar( ).
lo_toolbar->add_function(
         text   = 'Export to Excel'
         tooltip = 'Export the sales data to Excel file.'
         aicon  = cl_gui_alv_grid=>mc_button_export
         function = 'EXPORT_TO_EXCEL'
          ).

* 添加用户命令的实现 
METHOD process_user_command.
  TYPES: BEGIN OF ty_cell,
           row TYPE i,
           col TYPE i,
         END OF ty_cell.
  DATA: lt_data   TYPE TABLE OF ty_cell,
        lv_row    TYPE sytabix,
        lv_column TYPE lvc_s_col.

  CASE e_ucomm.
    WHEN '&XL'.
      *--- 导出数据到 Excel
      EXPORT_DATA_TO_EXCEL( ).
    WHEN '&FILTER'.
      *--- 设置过滤条件  
      CALL SCREEN 1000.
    WHEN OTHERS.
  ENDCASE.
ENDMETHOD.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值