可编辑ALV字段更新检查

可编辑字段较少时,可采用循环内表的方式逐个检查;当字段较多时,就比较繁琐了。可采用ooalv中类CL_ALV_CHANGED_DATA_PROTOCOL属性MP_MOD_ROWS

具体代码如下

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS:handle_data_changed
      FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.
ENDCLASS.                    "lcl_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

*--DATA_CHANGED
  METHOD handle_data_changed.
    PERFORM handle_data_changed CHANGING er_data_changed.
  ENDMETHOD.                    "HANDLE_CHANGED_DATA
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

*&---------------------------------------------------------------------*
*&      Form  handle_data_changed
*&---------------------------------------------------------------------*
*       
*----------------------------------------------------------------------*
FORM handle_data_changed  CHANGING ir_data_changed  TYPE REF TO cl_alv_changed_data_protocol.
  DATAls_mod_cell TYPE lvc_s_modi,
                   lt_mod_cell TYPE lvc_t_modi.

  FIELD-SYMBOLS <ls_mod_row> TYPE type_line,
                                             <lt_mod_row> TYPE tab_type_line.

  ASSIGN ir_data_changed->mp_mod_rows->TO <lt_mod_row>.
  IF <lt_mod_row> IS ASSIGNED AND <lt_mod_row> IS NOT INITIAL.  "判断是否有更改
    LOOP AT ir_data_changed->mt_mod_cells INTO ls_mod_cell.
      READ TABLE <lt_mod_row> ASSIGNING <ls_mod_row> INDEX ls_mod_cell-tabix.
      IF sy-subrc AND <ls_mod_row>-flag ''.
        <ls_mod_row>-flag 'X'.
        ls_mod_cell-fieldname 'FLAG'.
        ls_mod_cell-value 'X'.
        APPEND ls_mod_cell TO lt_mod_cell.
      ENDIF.
      CLEAR ls_mod_cell.
    ENDLOOP.

    IF lt_mod_cell[] IS NOT INITIAL.
      SORT lt_mod_cell.
      DELETE ADJACENT DUPLICATES FROM lt_mod_cell COMPARING ALL FIELDS.
      APPEND LINES OF lt_mod_cell TO ir_data_changed->mt_mod_cells.
    ENDIF.

    ir_data_changed->mt_good_cells[] ir_data_changed->mt_mod_cells[].
  ENDIF.

ENDFORM.                    "handle_data_changed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值