ABAP OOALV添加自定義按鈕及按鈕功能

DATA: gv_repid TYPE sy-repid,
gv_sname TYPE sy-dynnr.
TYPES: BEGIN OF gs_data.
INCLUDE STRUCTURE spfli.
TYPES: celtab TYPE lvc_t_styl.
TYPES: END OF gs_data.
DATA: gs_data1 TYPE gs_data.
DATA: gt_data TYPE TABLE OF gs_data WITH HEADER LINE.

DATA: g_con01 TYPE REF TO cl_gui_custom_container.

DATA: g_grid01 TYPE REF TO cl_gui_alv_grid.

DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gs_dropdowm TYPE lvc_s_drop,
gt_dropdowm TYPE lvc_t_drop,
gs_style TYPE lvc_s_styl,
gt_style TYPE lvc_t_styl.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
CONSTANTS: g_cus01 TYPE scrfname VALUE ‘CUS01’.

----------------------------------------------------------------------

  •   CLASS cl_event_receiver DEFINITION
    

----------------------------------------------------------------------
*
----------------------------------------------------------------------
CLASS cl_event_receiver DEFINITION.
PUBLIC SECTION.
" 声明Toolbar事件方法
METHODS handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
methods handle_user_command for EVENT user_command of cl_gui_alv_grid
IMPORTING
e_ucomm.
ENDCLASS. "cl_event_receiver DEFINITION

----------------------------------------------------------------------

  •   CLASS cl_event_receiver IMPLEMENTATION
    

----------------------------------------------------------------------
*
----------------------------------------------------------------------
CLASS cl_event_receiver IMPLEMENTATION.
" 实现Toolbar事件方法
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR: ls_toolbar.
ls_toolbar-butn_type = 3. " 分隔符
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR: ls_toolbar.
ls_toolbar-function = ‘EDIT’. " 功能码
ls_toolbar-icon = ICON_CHANGE . " 图标名称
ls_toolbar-quickinfo = ‘EDIT’. " 图标的提示信息
ls_toolbar-disabled = ‘’. " X表示灰色,不可用
ls_toolbar-text = ‘’. " 按钮上显示的文本
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
CASE e_ucomm.
WHEN ‘EDIT’.
IF g_grid01->is_ready_for_input( ) EQ 0.
CALL METHOD g_grid01->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
CALL METHOD g_grid01->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
ENDCLASS. "cl_event_receiver IMPLEMENTATION
DATA: event_receiver TYPE REF TO cl_event_receiver.

START-OF-SELECTION.
PERFORM get_data.
CALL SCREEN 100.

&---------------------------------------------------------------------
*& Form GET_DATA
&---------------------------------------------------------------------

  •   text  获取数据
    

----------------------------------------------------------------------
FORM get_data.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_data
UP TO 30 ROWS
FROM spfli.
ENDFORM. "GET_DATA

&---------------------------------------------------------------------
*& Form SET_FIELDCAT
&---------------------------------------------------------------------

  •   text  ALV显示字段文本
    

----------------------------------------------------------------------
FORM set_fieldcat.
CLEAR: gt_fieldcat[].
DEFINE macro_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
gs_fieldcat-hotspot = &3.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.

macro_fieldcat ‘CARRID’ ‘航线代码’ ‘X’.
macro_fieldcat ‘CONNID’ ‘航班连接Id’ ‘’.
macro_fieldcat ‘COUNTRYFR’ ‘起飞国家’ ‘’.
macro_fieldcat ‘CITYFROM’ ‘起飞城市’ ‘’.
macro_fieldcat ‘AIRPFROM’ ‘起飞机场’ ‘’.
macro_fieldcat ‘COUNTRYTO’ ‘目标国家’ ‘’.
macro_fieldcat ‘CITYTO’ ‘目标城市’ ‘’.
macro_fieldcat ‘AIRPTO’ ‘目标机场’ ‘’.
macro_fieldcat ‘FLTIME’ ‘航班时间’ ‘’.
macro_fieldcat ‘DEPTIME’ ‘启程时间’ ‘’.
macro_fieldcat ‘ARRTIME’ ‘到达时间’ ‘’.
macro_fieldcat ‘DISTANCE’ ‘距离’ ‘’.

ENDFORM. "SET_FIELDCAT

&---------------------------------------------------------------------
*& Form SET_LAYOUT
&---------------------------------------------------------------------

  •   text  布局
    

----------------------------------------------------------------------

  •  -->P_LAYOUT   text
    

----------------------------------------------------------------------
FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
p_layout-cwidth_opt = ‘X’. " 自动调节字段长度
p_layout-sel_mode = ‘D’. " 选择模式,可选择多行
p_layout-edit = ‘X’.
p_layout-stylefname = ‘CELTAB’.
ENDFORM. "SET_LAYOUT

&---------------------------------------------------------------------
*& Module INIT_CON OUTPUT
&---------------------------------------------------------------------

  •   text  创建ALV
    

----------------------------------------------------------------------
MODULE init_con OUTPUT.

DATA: ls_layout TYPE lvc_s_layo.

IF g_con01 IS INITIAL.
PERFORM set_fieldcat.
PERFORM set_layout CHANGING ls_layout.

" 创建SAP容器实例
CREATE OBJECT g_con01
  EXPORTING
    container_name              = g_cus01 " 自定义控件名称
  EXCEPTIONS
    cntl_error                  = 1
    cntl_system_error           = 2
    create_error                = 3
    lifetime_error              = 4
    lifetime_dynpro_dynpro_link = 5
    OTHERS                      = 6.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
" 创建GRID实例
CREATE OBJECT g_grid01
  EXPORTING
    i_parent          = g_con01
  EXCEPTIONS
    error_cntl_create = 1
    error_cntl_init   = 2
    error_cntl_link   = 3
    error_dp_create   = 4
    OTHERS            = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT event_receiver.
"注册事件handler方法
SET HANDLER event_receiver->handle_toolbar FOR g_grid01.
set HANDLER event_receiver->handle_user_command for g_grid01.
" 调用ALV 显示方法
CALL METHOD g_grid01->set_table_for_first_display
  EXPORTING
  •   i_structure_name              = 'SPFLI' " 参照表结构字段显示
      is_layout                     = ls_layout " 布局
    CHANGING
      it_fieldcatalog               = gt_fieldcat " 显示字段
      it_outtab                     = gt_data[]
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
    
    IF sy-subrc <> 0.
  • Implement suitable error handling here
    
    ENDIF.
    ENDIF.

ENDMODULE. " INIT_CON OUTPUT

&---------------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
&---------------------------------------------------------------------
----------------------------------------------------------------------
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘S0001’.
ENDMODULE. " STATUS_0100 OUTPUT
&---------------------------------------------------------------------
*& Module USER_EXIT_0100 INPUT
&---------------------------------------------------------------------
----------------------------------------------------------------------
MODULE user_exit_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN ‘BACK’.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_EXIT_0100 INPUT
ABAP OOALV添加自定義按鈕及按鈕功能_第1张图片
ABAP OOALV添加自定義按鈕及按鈕功能_第2张图片

你可能感兴趣的:(ABAP,abap,sap)