ABAPOOALV 布局刷新

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

Knowing what must be done does away with fear.

当清楚知道目标该做什么时,恐惧感就会自行远离。

ABAPOOALV 布局刷新 - 封面图
ABAPOOALV 布局刷新 - 封面图

1

程序效果

ABAPOOALV 布局刷新 - 封面图
ABAPOOALV 布局刷新 - 封面图
ABAPOOALV 布局刷新 - 封面图
ABAPOOALV 布局刷新 - 封面图

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 ,

urlf TYPE scarr \- url ,

urlh TYPE int4 ,

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

ligt TYPE icon_d ,

mesg TYPE string ,

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

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 ,

gt_scarr LIKE TABLE OF scarr ,

gs_scarr LIKE LINE OF gt_scarr .

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 .

DATA gt_link TYPE lvc_t_hype .

DATA gs_link TYPE lvc_s_hype .

DATA go_dragdrop TYPE REF TO cl_dragdrop .

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

• CLASS lcl_dragdropobj DEFINITION

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

*

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

CLASS lcl_dragdropobj DEFINITION .

PUBLIC SECTION .

DATA data LIKE gs_spfli .

DATA indx TYPE i .

ENDCLASS . "lcl_dragdropobj DEFINITION

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 .

IF gt_spfli IS NOT INITIAL . SELECT * FROM scarr INTO TABLE gt_scarr

FOR ALL ENTRIES IN gt_spfli

WHERE carrid = gt_spfli \- carrid .

SORT gt_scarr BY carrid .

ENDIF .

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 .

CLEAR gs_scarr .

READ TABLE gt_scarr INTO gs_scarr WITH KEY carrid = gs_spfli \-

carrid BINARY SEARCH .

IF sy \- subrc EQ 0 .

CLEAR gs_link .

gs_link \- handle = sy \- tabix .

gs_link \- href = gs_scarr \- url .

APPEND gs_link TO gt_link .

gs_spfli \- urlf = gs_link \- href .

gs_spfli \- urlh = gs_link \- handle .

ENDIF .
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 ,

lo_evt_handler -> ondrag FOR go_alv ,

lo_evt_handler -> ondrop FOR go_alv ,

lo_evt_handler -> context_menu_request 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'.

DATA lv_effect TYPE i .

DATA lv_ddid TYPE i .

CREATE OBJECT go_dragdrop .

lv_effect = cl_dragdrop => move . " + cl_dragdrop=>copy.
CALL METHOD go_dragdrop -> add

EXPORTING

flavor = 'Line'

dragsrc = 'X'

droptarget = 'X'

effect = lv_effect .
CALL METHOD go_dragdrop -> get_handle

IMPORTING

handle = lv_ddid .
gs_layout \- s_dragdrop \- row_ddid = lv_ddid .

"添加排序

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 .

...

ABAP猿

关于作者:ABAP猿

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

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