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