ABAP/개발 로직

[ABAP]데이터 변경 DATA CHANGED

모늘 2023. 5. 1.
728x90

 

SCREEN에서 ALV를 추가하여 사용자가 정보를 입력하고 저장할 수 있는 기능을 만들었었는데,

기존에 DATA CHANGED에서 사용자가 ENTER를 쳤을 때, 정보를 입력하고 셀에서 벗어났을 때

DATA CHANGED가 되도록 선언했었습니다.

 

 "데이터 변경시 DATA CHANGED 이벤트 호출
 CALL METHOD pr_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

 

 "데이터 변경후 ENTER 입력시 DATA CHANGED 이벤트 호출
  CALL METHOD pr_grid->register_edit_event 
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

하지만 사용자가 엔터도, 셀에서 벗어나지도 않은 상태에서 정보를 입력한 후 저장버튼을 누르면
해당하는 셀에 있는 데이터가 저장되어지지 않는 이슈가 발생했었습니다.

 

강제로 ENTER를 넣어줘야하나 고민하던중, 좋은 로직을 찾아 공유드립니다.

 

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

글로벌 변수 lv_valid와 lv_refresh를 선언합니다.

이후 저 method를 선언해주면, 해당하는 grid가 변경되어진 부분이 있는지 체크하고 그 부분을 바로 refresh 시켜주면서

사용자가 ENTER를 누르지 않아도, 입력한 셀에서 벗어나지 않아도 저장되게 해주는 로직입니다.

 

앞서말한 mc_evt_enter와 mc_evt_modified 둘 다 먹히지 않을 때 저 로직 추가해주면

간편해집니다 :)

 


도움이 되셨으면 좋겠습니다!

궁금하신 점은 언제든 댓글 달아주세요~

728x90
반응형

'ABAP > 개발 로직' 카테고리의 다른 글

[ABAP] line_exists  (0) 2023.05.11
[ABAP] ALV 레이아웃 설정  (0) 2023.05.11
[ABAP] TITLE 동적 설정  (0) 2023.05.01
[ABAP] WHERE A LIKE '%' / 조건절  (0) 2023.05.01
[ABAP] 조회조건 기본값 설정  (0) 2023.03.27

댓글