编辑ALV后更新对应的内表

标签:ABAP

好久没碰ABAP了,今天同事问我一个ALV的问题,稀里糊涂地解决了,于是记录下来。

这个问题是有一个可编辑的ALV表格,用户编辑完后点update按钮,需要将编辑后的数据更新到数据库。
最初的要求是更新其中的一个字段,而且只有一行数据,所以可以这样实现:
form f_user_command using r_ucomm like sy-ucomm rs_selfield type slis_selfield.

case r_ucomm.

when 'UPD'.
read table gt_msgreturn ASSIGNING <fs_msg> index rs_selfield-tabindex.
<fs_msg>-text = rs_selfield-value.
多余的代码我就没列出了,这里的gt_msgreturn是ALV对应的内表,而rs_selfield-value只能取到一个字段的值。

而现在的需求改成可以更改多个字段,那么rs_selfield-value就不够用了。于是在SAP SDN里搜索了一下,发现一篇《Updating the Internal Table -After Edit in ALV using Function Modules》
这里面有如下一段代码:
  DATA: gd_repid LIKE sy-repid,
        ref_grid TYPE REF TO cl_gui_alv_grid.
  IF ref_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid = ref_grid.
  ENDIF.
  IF NOT ref_grid IS INITIAL.
    CALL METHOD ref_grid->check_changed_data .
  ENDIF.
我尝试了一下,发现调用ref_grid->check_changed_data后,内表就自动更新了,于是不再需要获取rs_selfield-value,直接将内表更新到数据库即可。

顺带一提,虽然问题是解决了,但没找到这个方法的文档,所以也不知道有什么副作用。

0条评论 你不来一发么↓

    想说点什么呢?