100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ALV OO:单击事件-双击事件-自定义按钮事件(示例)

ALV OO:单击事件-双击事件-自定义按钮事件(示例)

时间:2020-02-09 12:14:43

相关推荐

ALV OO:单击事件-双击事件-自定义按钮事件(示例)

程序运行效果:

1). 新建100屏幕

PROCESS BEFORE OUTPUT.MODULE status_0100.MODULE init_con.PROCESS AFTER INPUT.MODULE user_exit_0100 AT EXIT-COMMAND.

2). 在100屏幕上画自定义控件,命名为CUS013). 程序代码:

REPORT ztest_sy09.DATA: gs_data TYPE spfli.DATA: gt_data LIKE TABLE OF gs_data.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.CONSTANTS: g_cus01 TYPE scrfname VALUE 'CUS01'.*----------------------------------------------------------------------** CLASS cl_event_receiver DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS cl_event_receiver DEFINITION.PUBLIC SECTION." 声明单击事件的方法METHODS handle_hotspot_clickFOR EVENT hotspot_click OF cl_gui_alv_gridIMPORTING e_row_id e_column_id." 声明双击事件方法METHODS handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_row e_column." 声明Toolbar事件方法METHODS handle_toolbarFOR EVENT toolbar OF cl_gui_alv_gridIMPORTING e_object e_interactive." 声明USER-COMMAND 事件方法METHODS handle_commandFOR EVENT user_command OF cl_gui_alv_gridIMPORTING e_ucomm.ENDCLASS. "cl_event_receiver DEFINITION*----------------------------------------------------------------------** CLASS cl_event_receiver IMPLEMENTATION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS cl_event_receiver IMPLEMENTATION." 单击事件方法的实现METHOD handle_hotspot_click.CONDENSE e_row_id NO-GAPS.CONDENSE e_column_id NO-GAPS.MESSAGE i001(00) WITH '单击事件->行号:' e_row_id '、列名:' e_column_id.ENDMETHOD. "handle_HOTSPOT_CLICK" 双击事件方法的实现METHOD handle_double_click.CONDENSE e_row NO-GAPS.CONDENSE e_column NO-GAPS.MESSAGE i001(00) WITH '双击事件->行号:' e_row '、列名:' e_column.ENDMETHOD. "handle_double_click" 实现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 = 'DISP'. " 功能码ls_toolbar-icon = icon_display. " 图标名称ls_toolbar-quickinfo = '显示'. " 图标的提示信息ls_toolbar-butn_type = 0. " 0表示正常按钮ls_toolbar-disabled = ''. " X表示灰色,不可用ls_toolbar-text = '按钮1'. " 按钮上显示的文本APPEND ls_toolbar TO e_object->mt_toolbar.ENDMETHOD. "handle_toolbar" 实现USER-COMMAND 事件方法METHOD handle_command.CASE e_ucomm.WHEN 'DISP'.MESSAGE i001(00) WITH 'Toolbar事件 + USER-COMMAND事件 '.ENDCASE.ENDMETHOD. "HANDLE_COMMANDENDCLASS. "cl_event_receiver IMPLEMENTATIONDATA: 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_dataUP TO 30 ROWSFROM 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-zebra = 'X'. " 颜色交替显示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_con01EXPORTINGcontainer_name = g_cus01 " 自定义控件名称EXCEPTIONScntl_error = 1cntl_system_error = 2create_error= 3lifetime_error = 4lifetime_dynpro_dynpro_link = 5OTHERS = 6.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF." 创建GRID实例CREATE OBJECT g_grid01EXPORTINGi_parent= g_con01EXCEPTIONSerror_cntl_create = 1error_cntl_init = 2error_cntl_link = 3error_dp_create = 4OTHERS = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.CREATE OBJECT event_receiver." 注册事件handler方法SET HANDLER event_receiver->handle_hotspot_click FOR g_grid01.SET HANDLER event_receiver->handle_double_click FOR g_grid01.SET HANDLER event_receiver->handle_toolbar FOR g_grid01.SET HANDLER event_receiver->handle_command FOR g_grid01." 调用ALV 显示方法CALL METHOD g_grid01->set_table_for_first_displayEXPORTING* i_structure_name = 'SPFLI' " 参照表结构字段显示is_layout = ls_layout " 布局CHANGINGit_fieldcatalog= gt_fieldcat " 显示字段it_outtab = gt_data[]EXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines= 3OTHERS = 4.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.ENDIF.ENDMODULE. " INIT_CON OUTPUT*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text 工具条*----------------------------------------------------------------------*MODULE status_0100 OUTPUT.SET PF-STATUS 'STATUS_BAR'.ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Module USER_EXIT_0100 INPUT*&---------------------------------------------------------------------** text 取消事件*----------------------------------------------------------------------*MODULE user_exit_0100 INPUT.LEAVE TO SCREEN 0.ENDMODULE. " USER_EXIT_0100 INPUT

注: 如有疏漏之处,还请不吝赐教!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。