【SAP】ABAP——ALV显示后保存修改后的数据至数据库表

ALV实现前,编辑该字段的fieldcat-edit =  'X'  可编辑。

在USER_COMMAND中进行如下操作:

LOOP AT lt_out INTO wa_out.
  MOVE-CORRESPONDING wa_out TO ls_mod.
  APPEND ls_mod TO lt_old.
  CLEAR: wa_out,ls_mod.
ENDLOOP.    "lt_old ALV显示前的数据

FORM user_command USING ucomm     LIKE sy-ucomm
                        selfield  TYPE slis_selfield.

  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: lt_rows TYPE lvc_t_row WITH HEADER LINE.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.

  CALL METHOD lr_grid->check_changed_data.
  selfield-refresh = 'X'.     "更新修改后的数据至内表

  LOOP AT lt_out INTO wa_out.
    MOVE-CORRESPONDING wa_out TO ls_mod.
    APPEND ls_mod TO lt_new.
    CLEAR: wa_out, ls_mod.
  ENDLOOP.  "lt_new  修改后的数据

  CASE ucomm.
    WHEN '&DATA_SAVE'."修改后点击保存时
      "ALV所修改的行
      CALL FUNCTION 'CTVB_COMPARE_TABLES'  "改函数可比较两个表的增删改
        EXPORTING
          table_old  = lt_old
          table_new  = lt_new
          key_length = 10
        IMPORTING
          table_mod  = lt_mod.
     
      LOOP AT lt_mod INTO ls_mod.
        PERFORM convert_input USING ls_mod-matnr.
        MODIFY lt_mod FROM ls_mod.
        CLEAR:ls_mod.
      ENDLOOP.

      MODIFY zmmt1001 FROM TABLE lt_mod.
      IF sy-subrc = 0.
        COMMIT WORK.
        MESSAGE '保存成功!' TYPE 'S'.
      ELSE.
        ROLLBACK WORK.
        MESSAGE '保存失败!' TYPE 'E'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

 

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值