CL_GUI_TIMER 기본 구조
" 선언
DATA: gcl_timer TYPE REF TO cl_gui_timer,
gcl_handler TYPE REF TO lcl_handler. " 이벤트 핸들러 클래스
" 핸들러 클래스
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS: on_timer FOR EVENT finished OF cl_gui_timer.
ENDCLASS.
CLASS lcl_handler IMPLEMENTATION.
METHOD on_timer.
" 타이머 실행 시 동작할 로직
ENDMETHOD.
ENDCLASS.
활용 방안 5가지
1. 저장 후 자동 화면 초기화
METHOD on_timer.
" 2초 후 화면 리셋
PERFORM init_screen.
gcl_timer->stop( ).
ENDMETHOD.
2. 실시간 ALV 자동 새로고침
" 5초마다 ALV 데이터 갱신
gcl_timer->interval = 5.
gcl_timer->run( ).
METHOD on_timer.
PERFORM get_data. " DB 재조회
PERFORM refresh_grid. " ALV 갱신
" 타이머 stop 안 하면 계속 반복됨
ENDMETHOD.
3. 세션 타임아웃 경고
" 10분 후 경고
gcl_timer->interval = 600.
gcl_timer->run( ).
METHOD on_timer.
MESSAGE s000 WITH '세션이 곧 만료됩니다.'.
gcl_timer->stop( ).
ENDMETHOD.
4. 진행률 표시 (Progress Bar 연동)
DATA: gv_progress TYPE i VALUE 0.
gcl_timer->interval = 1.
gcl_timer->run( ).
METHOD on_timer.
gv_progress = gv_progress + 10.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = gv_progress
text = |처리 중... { gv_progress }%|.
IF gv_progress >= 100.
gcl_timer->stop( ).
ENDIF.
ENDMETHOD.
5. 입력 대기 후 자동 조회 (Debounce)
" 사용자가 입력 멈추고 1초 후 자동 조회
METHOD on_input_change.
gcl_timer->stop( ). " 기존 타이머 리셋
gcl_timer->interval = 1.
gcl_timer->run( ).
ENDMETHOD.
METHOD on_timer.
PERFORM get_data. " 1초 동안 추가 입력 없으면 조회
gcl_timer->stop( ).
ENDMETHOD.
주의사항
1. stop( ) 필수
→ on_timer 안에서 stop 안 하면 interval마다 무한 반복
2. CREATE OBJECT 중복 방지
→ IS INITIAL 체크 후 생성
3. Dynpro 화면 종료 시
→ LEAVE PROGRAM 전에 gcl_timer->stop( ) 호출
→ 안 하면 백그라운드에서 타이머 계속 동작