본문 바로가기

ETC

[ABAP] EDIT-MODE 시, 다른 곳 클릭이나 엔터 안쳐도 바로바로 변경사항 반영되도록 하는 법

반응형

 

해결 방법은 data_changed 이벤트를 강제로 발생시키는 것이다.

해당 코드를 save_data 로직에 넣으면 강제로 data_changed 이벤트를 타게 된다.

  DATA : lv_valid   TYPE char01,       lv_refresh TYPE char01.
  CALL METHOD go_grid01->check_changed_data
    IMPORTING
      e_valid   = lv_valid
    CHANGING
      c_refresh = lv_refresh.

 

이벤트 리시버 클래스에서 적당히 데이터 변경 로직을 반영해주면 된다.

아래 코드는 flag 추가 필드를 이용해 변경된 row를 표기하는 기능이 추가되어 있는 예제이다.

FORM data_changed USING    pi_data_changed TYPE REF TO cl_alv_changed_data_protocol
                  CHANGING pv_error_in_data.
  DATA : ls_modi     TYPE lvc_s_modi,        l_value(30) TYPE c.
  SORT pi_data_changed->mt_mod_cells BY row_id.

  LOOP AT pi_data_changed->mt_mod_cells INTO ls_modi.
    CASE ls_modi-fieldname.
      WHEN 'SHOPID'.
        CALL METHOD pi_data_changed->get_cell_value
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = ls_modi-fieldname
          IMPORTING
            e_value     = l_value.

        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'flag'
            i_value     = 'X'.
        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'SHOPID'
            i_value     = l_value.


      WHEN 'AREAID'.
        CALL METHOD pi_data_changed->get_cell_value
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = ls_modi-fieldname
          IMPORTING
            e_value     = l_value.
        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'flag'
            i_value     = 'X'.

        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'AREAID'
            i_value     = l_value.
      WHEN 'MTRL_SLOC_ID'.
        CALL METHOD pi_data_changed->get_cell_value
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = ls_modi-fieldname
          IMPORTING
            e_value     = l_value.
        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'flag'
            i_value     = 'X'.


        CALL METHOD pi_data_changed->modify_cell
          EXPORTING
            i_row_id    = ls_modi-row_id
            i_fieldname = 'MTRL_SLOC_ID'
            i_value     = l_value.
    ENDCASE.
  ENDLOOP.


ENDFORM. "MTRL_SLOC_ID
반응형