zl程序教程

您现在的位置是:首页 >  后端

当前栏目

OO ALV-单击事件,双击事件,添加自定义按钮事件(EVENT)实例详解编程语言

实例事件编程语言 详解 添加 自定义 按钮 Event
2023-06-13 09:11:51 时间

OO ALV中经常会用的行单击,行双击,application tool bar上添加按钮以及按钮的相应事件,如下:

1,单击:handle_hotspot_click 事件

2,双击:handle_double_click

3,工具栏上添加自定按钮: handle_toolbar,其中,butn_type = 3. 是分隔符详细参照下面代码

4, 自定义按钮相应事件:handle_command

这些事件需要用SET HANDLER先注册,然后再在类中实现,添加自己的逻辑。

下面是个完整代码以及相关屏幕的创建过程:

1) 创建0100屏幕

屏幕PAI,PBO中流逻辑代码

PROCESS BEFORE OUTPUT. 

 MODULE STATUS_0100. 

 MODULE INIT_CON. 

PROCESS AFTER INPUT. 

 MODULE USER_EXIT_0100 AT EXIT-COMMAND.

2017-02-27_13-52-59


amp;lt;img >

2)  在0100屏幕上画自定义控件,命名为CUS01

在屏幕点击下面红框内的按钮创建控件CUS01.

2017-02-27_13-21-07


amp;lt;img >

3,程序中的Status

2017-02-27_13-47-59


amp;lt;img >

4,程序代码

REPORT ZTEST_OO_ALV_EVENT. 

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_click 

 FOR EVENT hotspot_click OF cl_gui_alv_grid 

 IMPORTING e_row_id e_column_id. 

 " 声明双击事件方法 

 METHODS handle_double_click 

 FOR EVENT double_click OF cl_gui_alv_grid 

 IMPORTING e_row e_column. 

 " 声明Toolbar事件方法 

 METHODS handle_toolbar 

 FOR EVENT toolbar OF cl_gui_alv_grid 

 IMPORTING e_object e_interactive. 

 " 声明USER-COMMAND 事件方法 

 METHODS handle_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. 

 " 单击事件方法的实现 

 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_COMMAND 

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-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_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_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_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 

* ---------------------------------------------------------------------* 

* text 工具条 

*----------------------------------------------------------------------* 

MODULE status_0100 OUTPUT. 

 SET PF-STATUS S0001. 

ENDMODULE. " STATUS_0100 OUTPUT 

* ---------------------------------------------------------------------* 

* Module USER_EXIT_0100 INPUT 

* ---------------------------------------------------------------------* 

* text 取消事件 

*----------------------------------------------------------------------* 

MODULE user_exit_0100 INPUT. 

 LEAVE TO SCREEN 0. 

ENDMODULE. " USER_EXIT_0100 INPUT

5,运行效果

2017-02-27_13-49-33


img >

2017-02-27_13-50-06


img >

2017-02-27_13-50-33


img >

以上

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19218.html

cjavamac