본문 바로가기

SAP/ABAP

handle_data_changed vs handle_data_changed_finished 차이, mc_evt_modified vs mc_evt_enter 차이점

부제 : SAP ABAP ALV 업데이트 헷갈리는 데이터 체인지 이벤트 구문 차이점 정리

 

안녕하세요, D 입니다.

 

 

오늘은 handle_data_changed 와 handle_data_changed_finished 차이,

mc_evt_modified 와 mc_evt_enter 차이점에 대해 정리해보았습니다.

담백하게 본론으로 들어가겠습니다.

 

 

handle_data_changed VS handle_data_changed_finished

  • 공통점 : 데이터 변경이 있을 때 실행
  • 차이점 : 데이터 변경 반영 여부, 실행 시점

handle_data_changed 와 handle_data_changed_finished 는

둘 모두 alv에 데이터 변경이 있을 때 이를 반영하면서 발생하는 이벤트입니다.

 

alv 화면에 값 변경이 발생하면, 곧바로 인터널테이블에 발영되지 않고

데이터 체인지 이벤트를 타면서 인터널테이블에 반영됩니다.

 

사용자가 값 변경 → handle_data_changed → 변경 값 반영 → handle_data_changed_finished 

순서로 사용자가 입력한 값을 인터널테이블에 반영합니다.

데이터 체인지드는 인터널테이블 변경 값 반영 에,

데이터 체인지 피니시드는 인터널테이블 변경 값 반영 에 실행됩니다.

 

데이터 체인지드는 주로 er_data_changed 를 활용하여 다양한 변경 값을 반영하는데

데이터 체인지 피니시드는 해당 값을 갖고 있지 않습니다.

 

데이터 체인지드 실행 시점에는 인터널 테이블에 변경 값이 반영되어 있지 않지만

mt_mod_cells, mt_good_cells 등 변경 값에 관한 정보를 담고있는 객체들이 있어

이를 활용하여 효율적인 코딩을 할 수 있습니다.

 

 

 

mc_evt_modified VS mc_evt_enter

  • 공통점 : data_changed 이벤트 호출
  • 차이점 : 사용자의 어떤 입력 값에 반응하는가

mc_evt_modified 와 mc_evt_enter 는

둘 모두 데이터 변경 후에 handle_data_changed 이벤트를 호출하는 구문입니다.

 

기본적으로 인터널테이블 값이 변경될 때마다 handle_data_changed 이벤트가 자동적으로 발생하지 않습니다.

데이터 변경 반영을 호출하는 코드가 있어야 handle_data_changed 이벤트가 발생하는데,

이를 호출하는 코드가 register_edit_event 입니다.

 

register_edit_event 에 엔터(mc_evt_enter)를 넣는가, 모디파이(mc_evt_modified)를 넣는가에 따라

이벤트가 얼마나 빈전히 발생하는지가 달라집니다.

 

mc_evt_enter 는 값 변경 후 사용자가 엔터를 입력해야지만 발생합니다.

  CALL METHOD go_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

값 변경 후에 엔터를 입력하지 않는다면 데이터 체인지 이벤트가 발생하지 않고

변경 값이 인터널테이블에 반영되지도 않습니다.

사용자가 엔터 입력을 안할 것 같다면 아래의 모디파이가 대안이 될 수 있습니다.

 

mc_evt_modified 는 값 변경 후 사용자가 해당 셀을 벗어나면 발생합니다.

  CALL METHOD go_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

엔터를 입력하여 값 셀을 이동해도, 탭을 눌러 셀을 이동해도, 화살표를 눌러 셀을 이동해도

모두 데이터 체인지 이벤트가 발생합니다.

사용자가 값을 입력할 때마다, 바로바로 값 변경을 반영한다는 것은 장점입니다.

다만, 여러 값을 변경하고자 할 때는 값 변경이 발생할 때마다 데이터체인지 이벤트를 호출한다는 단점이 있습니다.

 

 

 

적절한 상황에 알맞는 코드를 취사선택할 수 있는 도움이 되었길 바랍니다.

 

더 쉬운 설명을 원하시면 아래 블로그 참고 부탁드립니다.

 

SAP 아밥 ALV 입력값으로 화면 변경 업데이트 하는 방법

오늘의 데일리쌥, D입니다~ 오늘은 ALV 화면을 업데이트 하는 데이터 변경 관련 코드 중 헷갈리는 친구...

blog.naver.com

 

 

아래 링크는 참고했던 사이트입니다.

 

A Twossun Place

Twossun 의 ABAP 지식을 정리하고 공유하는 공간입니다.

twossun.tistory.com

 

 

감사합니다.