OO面向对象ALV小测试

选择屏幕时,不需要话个alv控件,
这时也可以用OO ALV的

REPORT  zlm_alv_oo_03 .
DATA :
            g_it_spfli  TYPE  TABLE  OF spfli ,
            g_wa_spfli  TYPE spfli .

DATA : l_ref_alv    TYPE  REF  TO cl_gui_alv_grid .
DATA : g_s_events  TYPE slis_t_event .
DATA : gt_events    TYPE slis_t_event ,                    "ALV 事件
            gw_events    TYPE slis_alv_event .

*----------------------------------------------------------------------*
      事件类定义
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:
*To add new functional buttons to the ALV toolbar
    handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object ,"e_interactive     ,

*To implement user commands
    handle_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING e_ucomm             ,

*Hotspot click control
    handle_hotspot_click
    FOR EVENT hotspot_click OF cl_gui_alv_grid
    IMPORTING e_row_id e_column_id es_row_no ,

*Double-click control
    handle_double_click
    FOR EVENT double_click OF cl_gui_alv_grid
    IMPORTING e_row e_column    ,

    handle_data_changed
    FOR EVENT data_changed OF cl_gui_alv_grid
    IMPORTING er_data_changed         .

ENDCLASS.                    "lcl_event_handler DEFINITION

*----------------------------------------------------------------------*
      CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
 事件类实现
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .
*Handle Toolbar
  METHOD handle_toolbar.
    PERFORM handle_toolbar USING e_object ." e_interactive .
  ENDMETHOD                    "handle_toolbar

*Handle Hotspot Click
  METHOD handle_hotspot_click .
    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no .
  ENDMETHOD                    "handle_hotspot_click

*Handle Double Click
  METHOD handle_double_click .
    PERFORM handle_double_click USING e_row e_column .
  ENDMETHOD                    "handle_double_click

*Handle User Command
  METHOD handle_user_command .
    PERFORM handle_user_command USING e_ucomm .
  ENDMETHOD.                    "handle_user_command

*Handle Data Changed
  METHOD handle_data_changed .
    PERFORM handle_data_changed USING er_data_changed .
  ENDMETHOD.                    "handle_data_changed

ENDCLASS                     "lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*&      Form  HANDLE_BEFORE_USER_COMMAND
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_before_user_command  USING    p_e_ucomm.

ENDFORM.                    HANDLE_BEFORE_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  HANDLE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_E_ROW  text
     -->P_E_COLUMN  text
*----------------------------------------------------------------------*
FORM handle_double_click   USING    e_row TYPE lvc_s_row
                                    e_column TYPE lvc_s_col.
  READ TABLE g_it_spfli INTO g_wa_spfli  INDEX e_row-index.
  IF sy-subrc AND e_column-fieldname 'CITYFROM'.
    MESSAGE g_wa_spfli-cityfrom   TYPE 'I'.
  ELSE.
    MESSAGE g_wa_spfli-carrid TYPE 'I'.
  ENDIF.
ENDFORM.                    HANDLE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  HANDLE_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_E_ROW_ID  text
     -->P_E_COLUMN_ID  text
     -->P_ES_ROW_NO  text
*----------------------------------------------------------------------*
FORM handle_hotspot_click  USING    e_row       TYPE lvc_s_row
                                    e_column    TYPE lvc_s_col
                                    es_row_no   TYPE lvc_s_roid.



ENDFORM.                    HANDLE_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
*&      Form  HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_E_OBJECT  text
     -->P_E_INTERACTIVE  text
*----------------------------------------------------------------------*
form HANDLE_TOOLBAR  using    p_e_object
                              p_e_interactive.

endform.                    HANDLE_TOOLBAR 
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command  USING    p_e_ucomm.

ENDFORM.                    HANDLE_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_ER_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM handle_data_changed  USING    p_er_data_changed.

ENDFORM.                    HANDLE_DATA_CHANGED


START-OF-SELECTION.

  SELECT FROM spfli INTO TABLE g_it_spfli.
  PERFORM zform_show.



*&---------------------------------------------------------------------*
*&      Form  zform_show
*&---------------------------------------------------------------------*
FORM zform_show.
*填充事件信息
  CLEAR gt_events[].
  gw_events-name 'CALLER_EXIT'.
  gw_events-form 'CALLER_EXIT'.
  APPEND gw_events TO gt_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     i_callback_program                sy-repid
     i_structure_name                  'SPFLI'
     it_events                         gt_events[]
    TABLES
      t_outtab                           g_it_spfli
            .
ENDFORM.                    "zform_show

*&---------------------------------------------------------------------*
*&      Form  caller_exit
*&---------------------------------------------------------------------*
FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
  DATA: o_event_handler    TYPE REF TO lcl_event_handler."声明事件处理类对象。
*创建事件处理类
  CREATE OBJECT o_event_handler.
*获取全局的ALV对象
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid l_ref_alv.
*设置事件理类
  SET HANDLER o_event_handler->handle_toolbar        FOR l_ref_alv.
  SET HANDLER o_event_handler->handle_user_command   FOR l_ref_alv.
  SET HANDLER o_event_handler->handle_double_click   FOR l_ref_alv.
  SET HANDLER o_event_handler->handle_hotspot_click  FOR l_ref_alv.
  SET HANDLER o_event_handler->handle_data_changed   FOR l_ref_alv.

ENDFORM.                    "CALLER_EXIT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP OOALV是一种在ABAP编程语言中面向对象的方式实现的ALV(ABAP List Viewer)报表。它提供了更灵活和可扩展的方式来创建和展示报表数据。 以下是ABAP OOALV的一些关键步骤和示例代码[^1][^2]: 1. 定义变量和选择屏幕定义:在ABAP程序中定义所需的变量,并选择适当的屏幕定义。 2. 创建类:创建一个类来处理ALV报表的逻辑和功能。这个类应该继承自`CL_GUI_ALV_GRID`类。 3. 调用函数:在类中定义一个方法来调用ALV函数模块,例如`REUSE_ALV_GRID_DISPLAY`。 4. 获取数据并展示:在类中定义一个方法来获取报表数据,并将数据传递给ALV函数模块。 5. 表头字段设置:在类中定义一个方法来设置ALV报表的表头字段。 6. ALV输出格式:在类中定义一个方法来设置ALV报表的输出格式,例如列宽、对齐方式等。 7. 展示ALV:在类中定义一个方法来展示ALV报表。 8. 其他:根据需要,可以在类中定义其他方法来处理特定的功能,例如处理单击事件、排序等。 下面是一个简单的示例代码,演示了如何使用ABAP OOALV来创建和展示一个简单的报表: ```abap CLASS lcl_alv_report DEFINITION. PUBLIC SECTION. METHODS: constructor, display_alv. PRIVATE SECTION. DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid. METHODS: get_data, set_field_catalog, set_layout. ENDCLASS. CLASS lcl_alv_report IMPLEMENTATION. METHOD constructor. CREATE OBJECT lo_alv_grid EXPORTING i_parent = cl_gui_container=>screen0. ENDMETHOD. METHOD display_alv. CALL METHOD lo_alv_grid->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = lt_spfli. ENDMETHOD. METHOD get_data. SELECT * FROM spfli INTO TABLE lt_spfli. ENDMETHOD. METHOD set_field_catalog. DATA: lt_fieldcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CALL METHOD lo_alv_grid->get_frontend_fieldcatalog RECEIVING rt_fieldcatalog = lt_fieldcat. LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-outputlen = 20. ENDLOOP. CALL METHOD lo_alv_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lt_fieldcat. ENDMETHOD. METHOD set_layout. DATA: lo_layout TYPE REF TO cl_gui_alv_layout. CREATE OBJECT lo_layout EXPORTING i_grid_title = 'ALV Report'. CALL METHOD lo_alv_grid->set_layout EXPORTING is_layout = lo_layout. ENDMETHOD. ENDCLASS. DATA: lo_report TYPE REF TO lcl_alv_report. START-OF-SELECTION. CREATE OBJECT lo_report. lo_report->get_data( ). lo_report->set_field_catalog( ). lo_report->set_layout( ). lo_report->display_alv( ). ``` 这是一个简单的ABAP OOALV报表的示例,它获取了`SPFLI`表中的数据,并展示在ALV报表中。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值