ABAP 监听ALV的data_changed事件 获取数据的更新、新增、删除


ABAP 监听ALV的data_changed事件 获取数据的更新、新增、删除

 

在使用 CL_GUI_ALV_GRID 的 check_changed_data 获取ALV中数据的变化时,往往无法获取所要的数据,如将原有的值删除后,原值依然存在在内表中。这里我们可以使用事件监听的方式来获取到ALV数据的详细的改变信息。

创建监听类,并实例化: DATA: event_receiver TYPE REF TO lcl_event_receiver.

lcl_event_receiver的内容如下:

  CLASS lcl_event_receiver DEFINITION.

    PUBLIC SECTION.
      DATA: ucomm TYPE sy-ucomm.

      METHODS handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.


    PRIVATE SECTION.
  ENDCLASS.                    "lcl_event_receiver DEFINITION


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

    METHOD handle_data_changed.
      PERFORM data_changed USING er_data_changed.
    ENDMETHOD.                    "handle_data_changed

  ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

这里只是定义了一个方法,用来监听数据变更事件

FORM data_changed  USING     p_er_data_changed
                   TYPE REF TO   cl_alv_changed_data_protocol.

  DATA : l_tabix TYPE sy-tabix .
  DATA : ls_row  TYPE ty_data .
  DATA : ls_data TYPE ty_data .
  FIELD-SYMBOLS: <f_data> LIKE LINE OF gt_data.
  FIELD-SYMBOLS: <f_value> TYPE lvc_s_modi-value .
  FIELD-SYMBOLS: <f_field> TYPE ANY .

  DATA : ls_modi TYPE lvc_s_modi .

  SORT gt_data by acttx1
                   acttx2
                   acttx3 .

* 这里将无法捕捉到的变更的数据,更新至内表
  LOOP AT p_er_data_changed->mt_good_cells INTO ls_modi .

   READ TABLE gt_data ASSIGNING <f_data> INDEX ls_modi-row_id .

   ASSIGN ls_modi-value To <f_value> .

   ASSIGN COMPONENT ls_modi-fieldname OF STRUCTURE <f_data> TO <f_field> .

   IF sy-subrc EQ 0 .
      <f_field> = <f_value> .
   ENDIF.

  ENDLOOP.

*   FIELD-SYMBOLS: <f_mod_rows> TYPE table .
*   ASSIGN p_er_data_changed->mp_mod_rows->* TO <f_mod_rows> .
*
*   LOOP AT <f_mod_rows> INTO ls_row .
*
*     LOOP AT gt_data INTO ls_data WHERE actid EQ ls_row-actid.
*
*       l_tabix = sy-tabix .
*
*       MODIFY gt_data FROM ls_row INDEX l_tabix .
*
*     ENDLOOP.
*
*   CLEAR ls_row .
*
*ENDLOOP.

ENDFORM.                    " data_changed

 

通过调试你会发现cl_alv_changed_data_protocol类中有你所想要的绝大多数有关ALV数据变更的内容,这里不一一阐述,说及这个类,一看便知!

 

http://apps.hi.baidu.com/share/detail/11638959


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM