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 |
댓글