OO ALV-单击事件,双击事件,添加自定义按钮事件(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.
amp;lt;img >
2) 在0100屏幕上画自定义控件,命名为CUS01
在屏幕点击下面红框内的按钮创建控件CUS01.
amp;lt;img >
3,程序中的Status
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,运行效果
img >
img >
img >
以上
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19218.html
cjavamac相关文章
- Java爬虫-URLConnection使用实例
- 【源码】10 个 Python 爬虫入门实例!
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )
- Oracle LogMiner的使用实例代码
- mysql触发器使用实例详解数据库
- Oracle表空间与实例:学习新知识的演练(oracle表空间与实例)
- MSSQL添加管理账户实例分享(mssql 添加管理账户)
- Oracle切换实例,轻松解决复杂任务(oracle中切换实例)
- js鼠标、键盘事件实例代码
- jquery中dom操作和事件的实例学习-表单验证
- PHP数据库调用类调用实例(详细注释)
- python利用hook技术破解https的实例代码
- winform使用委托和事件来完成两个窗体之间通信的实例
- php二维数组用键名分组相加实例函数
- Javascript封装DOMContentLoaded事件实例
- php模拟asp.netwebFrom按钮提交事件实例
- c#分页读取GB文本文件实例
- Python中的并发编程实例
- Java对时间的简单操作实例
- jquery中one()方法的用法实例
- jquery事件preventDefault()方法用法实例
- VC++角色游戏中的人物初始化模块代码实例
- javascript事件模型实例分析
- javascript中键盘事件用法实例分析
- java常见事件响应方法实例汇总
- jQuery级联操作绑定事件实例
- C#4.0新特性之协变与逆变实例分析