ABAPOOALVmenubuttonbuttonclick 事件

作者:ABAP猿 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图

Knowing is not enough; we must apply.

光是知道是不够的; 我们必须能够应用。

ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图

1

程序效果

ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图
ABAPOOALVmenubuttonbuttonclick 事 - 封面图

2

源码分享

TYPES

BEGIN OF gty_spfli_incl ,

cbox TYPE c ,

ddfi TYPE char2 ,

f4fi TYPE char2 ,

snum TYPE i ,

icon TYPE icon_d ,

scol TYPE lvc_t_scol ,

styl TYPE lvc_t_styl ,

END OF gty_spfli_incl .

DATA

BEGIN OF gs_spfli .

INCLUDE TYPE spfli . INCLUDE TYPE gty_spfli_incl .

DATA

END OF gs_spfli ,

gt_spfli LIKE TABLE OF gs_spfli .

DATA go_alv TYPE REF TO cl_gui_alv_grid .

DATA gs_layout TYPE lvc_s_layo .

DATA gt_fieldcat TYPE lvc_t_fcat .

DATA gs_fieldcat TYPE lvc_s_fcat .

DATA gs_sort TYPE lvc_s_sort .

DATA gt_sort TYPE lvc_t_sort .

DATA gt_filter TYPE lvc_t_filt .

DATA gs_filter TYPE lvc_s_filt .

DATA gs_variant TYPE disvariant .

DATA gt_qinfo TYPE alv_t_qinf .

DATA gs_qinfo TYPE alv_s_qinf .

DATA gt_toolbar_exc TYPE ui_functions .

DATA gt_f4 TYPE lvc_t_f4 .

DATA gs_f4 TYPE lvc_s_f4 .

INITIALIZATION .

sy \- title = 'ABAP OOALV演示程序-公众号(ABAP猿)' .

gs_variant \- report = sy \- repid .

START-OF-SELECTION .

SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli UP TO

30 ROWS .

DATA ls_ctyp TYPE salv_s_int4_column .

DATA ls_scol TYPE lvc_s_scol .

DATA ls_styl TYPE lvc_s_styl .

LOOP AT gt_spfli INTO gs_spfli .

gs_spfli \- snum = sy \- tabix .

CASE sy \- tabix .

WHEN 1 .

gs_spfli \- icon = '@5B@' .

"行颜色

CLEAR ls_scol .

ls_scol \- color \- col = 5 . ls_scol \- color \- int = 1 . ls_scol \- color \- inv = 0 .
ls_scol \- fname = '' . ls_scol \- nokeycol = '' . APPEND ls_scol TO gs_spfli \- scol .

WHEN 2 .

gs_spfli \- icon = '@5C@' .

"行颜色(覆盖Key颜色)

CLEAR ls_scol .

ls_scol \- color \- col = 6 . ls_scol \- color \- int = 1 . ls_scol \- color \- inv = 0 .
ls_scol \- fname = '' . ls_scol \- nokeycol = 'X' . "避免被Key颜色覆盖 APPEND ls_scol TO gs_spfli \- scol .

WHEN 3 .

gs_spfli \- icon = '@5D@' .

"单元格颜色

CLEAR ls_scol .

ls_scol \- color \- col = 3 . ls_scol \- color \- int = 1 . ls_scol \- color \- inv = 0 .
ls_scol \- fname = 'COUNTRYFR' . ls_scol \- nokeycol = 'X' . APPEND ls_scol TO gs_spfli \- scol .
ls_scol \- fname = 'COUNTRYTO' . APPEND ls_scol TO gs_spfli \- scol .
ls_scol \- fname = 'FLTIME' . APPEND ls_scol TO gs_spfli \- scol .

WHEN 4 .

"行样式(button)

CLEAR ls_styl .

ls_styl \- fieldname = '' . ls_styl \- style = cl_gui_alv_grid => mc_style_button . APPEND ls_styl TO gs_spfli \- styl .

WHEN 5 .

"行样式(hotspot)

CLEAR ls_styl .

ls_styl \- fieldname = '' . ls_styl \- style = cl_gui_alv_grid => mc_style_hotspot . APPEND ls_styl TO gs_spfli \- styl .

WHEN 6 .

"单元格样式(button + hotspot)

CLEAR ls_styl .

ls_styl \- fieldname = 'COUNTRYFR' . ls_styl \- style = cl_gui_alv_grid => mc_style_button . APPEND ls_styl TO gs_spfli \- styl .

CLEAR ls_styl .

ls_styl \- fieldname = 'COUNTRYTO' . ls_styl \- style = cl_gui_alv_grid => mc_style_hotspot . APPEND ls_styl TO gs_spfli \- styl .

WHEN 7 .

"行可编辑

CLEAR ls_styl .

ls_styl \- fieldname = '' . ls_styl \- style = cl_gui_alv_grid => mc_style_enabled . APPEND ls_styl TO gs_spfli \- styl .

WHEN 8 .

"单元格可编辑

CLEAR ls_styl .

ls_styl \- fieldname = 'COUNTRYFR' . ls_styl \- style = cl_gui_alv_grid => mc_style_enabled . APPEND ls_styl TO gs_spfli \- styl .

CLEAR ls_styl .

ls_styl \- fieldname = 'COUNTRYTO' . ls_styl \- style = cl_gui_alv_grid => mc_style_enabled . APPEND ls_styl TO gs_spfli \- styl .

WHEN OTHERS .

ENDCASE . MODIFY gt_spfli FROM gs_spfli . ENDLOOP .

CREATE OBJECT go_alv

EXPORTING

i_parent = cl_gui_container => default_screen .

DATA lo_evt_handler TYPE REF TO lcl_evt_handler .

CREATE OBJECT lo_evt_handler .

SET HANDLER

lo_evt_handler -> toolbar FOR go_alv ,

lo_evt_handler -> hotspot_click FOR go_alv ,

lo_evt_handler -> double_click FOR go_alv ,

lo_evt_handler -> before_user_command FOR go_alv ,

lo_evt_handler -> user_command FOR go_alv ,

lo_evt_handler -> after_user_command FOR go_alv ,

lo_evt_handler -> onf4 FOR go_alv ,

lo_evt_handler -> data_changed FOR go_alv ,

lo_evt_handler -> data_changed_finished FOR go_alv ,

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

lo_evt_handler -> menu_button FOR go_alv ,

lo_evt_handler -> button_click FOR go_alv .

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

CLEAR gs_layout .

gs_layout \- zebra = 'X' .

gs_layout \- cwidth_opt = 'X' .

gs_layout \- sel_mode = 'D' .

gs_layout \- keyhot = 'X' .

gs_layout \- no_keyfix = 'X' .

gs_layout \- ctab_fname = 'SCOL' .

gs_layout \- stylefname = 'STYL' .

• gs_layout-no_toolbar = 'X'.

• gs_layout-edit = 'X'.

"添加排序

CLEAR gs_sort .

gs_sort \- spos = '1' .

gs_sort \- fieldname = 'CARRID' .

gs_sort \- subtot = 'X' .

gs_sort \- up = 'X' .

gs_sort \- down = '' .

APPEND gs_sort TO gt_sort .

"添加过滤

CLEAR gs_filter .

gs_filter \- fieldname = 'CARRID' .

gs_filter \- sign = 'E' .

gs_filter \- option = 'EQ' .

gs_filter \- low = 'JL' .

APPEND gs_filter TO gt_filter .

"添加鼠标悬停文本

gs_qinfo \- type = cl_salv_tooltip => c_type_icon .

gs_qinfo \- value = '@5B@' .

gs_qinfo \- text = '图标值:绿灯!' .

APPEND gs_qinfo TO gt_qinfo .
gs_qinfo \- type = cl_salv_tooltip => c_type_icon .

gs_qinfo \- value = '@5C@' .

gs_qinfo \- text = '图标值:红灯!' .

APPEND gs_qinfo TO gt_qinfo .
gs_qinfo \- type = cl_salv_tooltip => c_type_icon .

gs_qinfo \- value = '@5D@' .

gs_qinfo \- text = '图标值:黄灯!' .

APPEND gs_qinfo TO gt_qinfo .

"隐藏应用程序工具栏按钮

APPEND cl_gui_alv_grid => mc_fc_loc_paste_new_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_copy TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_append_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_copy_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_insert_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_delete_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_move_row TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_cut TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_paste TO gt_toolbar_exc . APPEND cl_gui_alv_grid => mc_fc_loc_undo TO gt_toolbar_exc .

DATA lt_dropval TYPE lvc_t_drop .

DATA ls_dropval TYPE lvc_s_drop .

CLEAR ls_dropval .

ls_dropval \- handle = 1 . ls_dropval \- value = '绿灯' . APPEND ls_dropval TO lt_dropval .
ls_dropval \- value = '红灯' . APPEND ls_dropval TO lt_dropval .
ls_dropval \- value = '黄灯' . APPEND ls_dropval TO lt_dropval .
ls_dropval \- value = '' . APPEND ls_dropval TO lt_dropval .
CALL METHOD go_alv -> set_drop_down_table

EXPORTING

it_drop_down = lt_dropval .

CLEAR gs_f4 .

gs_f4 \- fieldname = 'F4FI' .

gs_f4 \- register = 'X' .

gs_f4 \- getbefore = 'X' .

gs_f4 \- chngeafter = 'X' .

gs_f4 \- internal = '' .

APPEND gs_f4 TO gt_f4 .
CALL METHOD go_alv -> register_f4_for_fields

EXPORTING

it_f4 = gt_f4 .

go_alv -> register_edit_event ( EXPORTING i_event_id = cl_gui_alv_grid

=> mc_evt_modified ).

go_alv -> register_edit_event ( EXPORTING i_event_id = cl_gui_alv_grid

=> mc_evt_enter ).

"字段目录

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'

EXPORTING

i_structure_name = 'SPFLI'

CHANGING

ct_fieldcat = gt_fieldcat .

"添加输出列

CLEAR gs_fieldcat .

gs_fieldcat \- fieldname = 'SNUM' .

gs_fieldcat \- reptext = '序号' .

APPEND gs_fieldcat TO gt_fieldcat .

CLEAR gs_fieldcat .

gs_fieldcat \- fieldname = 'ICON' .

gs_fieldcat \- reptext = '图标' .

APPEND gs_fieldcat TO gt_fieldcat .

CLEAR gs_fieldcat .

gs_fieldcat \- fieldname = 'CBOX' .

gs_fieldcat \- reptext = '选择' .

APPEND gs_fieldcat TO gt_fieldcat .

CLEAR gs_fieldcat .

gs_fieldcat \- fieldname = 'DDFI' .

gs_fieldcat \- reptext = '下拉列表' .

APPEND gs_fieldcat TO gt_fieldcat .

CLEAR gs_fieldcat .

...

ABAP猿

关于作者:ABAP猿

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAPOOALVmenubuttonbuttonclick事件.md」整理生成,仅用于内部技术分享与学习交流。