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: TYPE any.

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.

= l_wa_data-value.

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