ABAP基础二:ALV基础之ALV的简单编辑
- 格式:pdf
- 大小:61.72 KB
- 文档页数:2
ABAP基础⼆:ALV基础之ALV的简单编辑
前两天有个打印需求变更,需要在ALV显⽰列表中添加两个字段,可编辑,⽽我⾃⼰⽤的是函数:REUSE_ALV_GRID_DISPLAY_LVC
因为之前做可编辑基本都是固定套路,定义类,画屏幕。。。。
很是⿇烦,所以才看看能不能不⽤屏幕,不⽤定义⽅法,结果是可以的,分享给⼤家!
前提:ALV使⽤⾃定义的⼯具栏(⼯具栏引⽤标准的⼯具按钮,有个⼩技巧,有空的⾃⼰研究)
⼀:只是做编辑,修改,⾃动更新内表:
只需添加⼏⾏代码即可:
在SET_STATUS⾥加⼊:
FORM prm_set_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTAT'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
这样系统⽤⾃⼰的modify事件,修改数据,回车的时候就会触发更新内表
这种⽅式结合字段⽬录中定义的参考表和字段,就可以轻松实现F4功能,简单使⽤。
⼆:⽤⾃定义的修改逻辑:
给ALV添加事件和FORM
REFRESH:lt_event.
ls_event-form = 'DATA_CHANGED_METHOD'.
ls_event-name = 'DATA_CHANGED'.
APPEND ls_event TO lt_event.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PRM_SET_STATUS'
i_callback_user_command = 'PRM_USER_COMMAND'
is_layout_lvc = ls_layout
it_fieldcat_lvc = gt_fieldcat[]
i_default = 'X'
i_save = 'A'
it_events = lt_event[]
TABLES
t_outtab = gt_show[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
注意:⽤此⽅法,也需要⼀中的代码
然后在程序中添加⾃⼰的代码处理内表就可以了,⽤这种⽅法可以做数据更新,关联更新
FORM data_changed_method
USING pa_data_changed TYPE REF TO cl_alv_changed_data_protocol .
DATA:
l_it_data TYPE lvc_t_modi,
l_wa_data LIKE LINE OF l_it_data.
FIELD-SYMBOLS:
l_it_data = pa_data_changed->mt_mod_cells.
CHECK l_it_data IS NOT INITIAL.
LOOP AT pa_data_changed->mt_mod_cells INTO l_wa_data.
READ TABLE gt_show INTO gw_show INDEX l_wa_data-row_id.
IF sy-subrc = 0.
ASSIGN COMPONENT l_wa_data-fieldname OF STRUCTURE gw_show TO
IF sy-subrc = 0.
MODIFY gt_show FROM gw_show INDEX l_wa_data-row_id.
ENDIF.
ENDIF.
ENDLOOP.
CALL METHOD lr_grid->refresh_table_display.
ENDFORM. " DATA_CHANGED_METHOD