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:<lv_field> 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 <lv_field>. 
      IF sy-subrc = 0. 
        <lv_field> = 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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/18638.html

(0)
上一篇 2021年7月19日 21:20
下一篇 2021年7月19日 21:20

相关推荐

发表回复

登录后才能评论