ABAP

CL_GUI_TIMER - 타이머 이벤트

셜록누나 2026. 4. 12. 22:49

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( ) 호출
   → 안 하면 백그라운드에서 타이머 계속 동작