Progress Indicator 처리용 Common Include
SAPGUI_PROGRESS_INDICATOR
실행시간이 오래 걸리는 프로그램의 경우 최대한 튜닝을 하여 빠르게 처리되는게 가장 좋지만
튜닝에도 한계가 있다보니 어쩔수 없이 처리 소요시간이 오래걸리는 경우가 있습니다.
이경우 진행 상태를 눈으로 볼수 있도록 Progress Indicator 를 이용하면 사용자 입장에서는 똑같이 오래 걸리더라도 "무언가 처리되는 중이구나"라고 생각하여 심리적으로 덜 오래 걸리는것 처럼 느껴진다고 합니다.
단, Progress Indicator 호출도 처리 시간이 소요되다 보니 왠만큼 오래걸리는 작업이 아닌 경우 사용을 자제하는게 좋습니다.
아래는 Progress Indicator를 좀더 손쉽게 사용할 수 있도록 'Common Include' 형태로 작성한 소스코드 입니다.
기존 또는 신규 리포트 개발시 해당 Include를 추가하여 간편하게 Progress 처리 구문을 삽입할 수 있습니다.
더 간편한 사용을 위해 Class로 만들어 사용해도 좋습니다.
2023.05.24 - [ABAP/소스코드] - [Class] Progress Indicator 처리용 Common Class
[Class] Progress Indicator 처리용 Common Class
Progress Indicator 처리용 Common Class SAPGUI_PROGRESS_INDICATOR "SAPGUI_PROGRESS_INDICATOR"을 간편하기 사용하기 위해 Common Include를 만들어서 사용하고 있었습니다. 2023.05.10 - [ABAP/소스코드] - [Include] Progress Indicator
playabap.tistory.com
#1. Include 소스코드
*&---------------------------------------------------------------------*
*& Include ZCM_PROGRESS
*&---------------------------------------------------------------------*
DATA : G_PROGRESS_TOTAL TYPE I,
G_PROGRESS_CURNT TYPE I,
G_PERCENTAGE_PREV TYPE I.
* Process Indicator용 전역변수 초기화
FORM INITIAL_PROGRESS_VARIANT.
CLEAR : G_PROGRESS_TOTAL,
G_PROGRESS_CURNT,
G_PERCENTAGE_PREV.
ENDFORM.
* Progress를 퍼센트(%)로 표현
FORM SET_PROGRESS_WITH_PERCENT USING P_TEXT.
DATA : LV_PROGRESS_TITLE TYPE STRING,
LV_PERCENTAGE TYPE I,
LV_PER_TEXT(10) TYPE C.
ADD 1 TO G_PROGRESS_CURNT.
IF G_PROGRESS_TOTAL = 0.
G_PROGRESS_TOTAL = 100.
ENDIF.
IF G_PROGRESS_CURNT <> 0.
LV_PERCENTAGE = G_PROGRESS_CURNT * 100 / G_PROGRESS_TOTAL.
ENDIF.
IF LV_PERCENTAGE > 100.
LV_PERCENTAGE = 100.
ENDIF.
IF LV_PERCENTAGE > G_PERCENTAGE_PREV.
G_PERCENTAGE_PREV = LV_PERCENTAGE.
WRITE LV_PERCENTAGE TO LV_PER_TEXT. CONDENSE LV_PER_TEXT.
CONCATENATE '[' LV_PER_TEXT '%] ' ` ` P_TEXT INTO LV_PROGRESS_TITLE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = LV_PERCENTAGE
TEXT = LV_PROGRESS_TITLE.
ENDIF.
ENDFORM.
* Progress를 10 of 40 과 같이 Step으로 표현
FORM SET_PROGRESS_WITH_STEP USING P_TEXT.
DATA : LV_PROGRESS_TITLE TYPE STRING,
LV_PERCENTAGE TYPE I,
LV_CUR_TEXT(10) TYPE C,
LV_TOT_TEXT(10) TYPE C.
CLEAR : LV_CUR_TEXT, LV_TOT_TEXT.
ADD 1 TO G_PROGRESS_CURNT.
WRITE G_PROGRESS_CURNT TO LV_CUR_TEXT. CONDENSE LV_CUR_TEXT.
IF G_PROGRESS_TOTAL = 0.
G_PROGRESS_TOTAL = 100.
ELSE.
WRITE G_PROGRESS_TOTAL TO LV_TOT_TEXT. CONDENSE LV_TOT_TEXT.
ENDIF.
IF G_PROGRESS_CURNT <> 0.
LV_PERCENTAGE = G_PROGRESS_CURNT * 100 / G_PROGRESS_TOTAL.
ENDIF.
IF LV_PERCENTAGE > 100.
LV_PERCENTAGE = 100.
ENDIF.
IF LV_TOT_TEXT IS INITIAL.
CONCATENATE '[' LV_CUR_TEXT '] ' ` ` P_TEXT INTO LV_PROGRESS_TITLE.
ELSE.
CONCATENATE '[' LV_CUR_TEXT 'of' LV_TOT_TEXT '] ' ` ` P_TEXT INTO LV_PROGRESS_TITLE.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = LV_PERCENTAGE
TEXT = LV_PROGRESS_TITLE.
ENDFORM.
#2. 사용 예시
REPORT YBA102022078_SANDBOX.
"Progress Indicator Common Include
INCLUDE ZCM_PROGRESS.
START-OF-SELECTION.
SELECT
*
FROM T001
INTO TABLE @DATA(LT_T001).
"Progress 전역 변수 초기화
PERFORM INITIAL_PROGRESS_VARIANT.
"Progress의 최대값 설정
G_PROGRESS_TOTAL = LINES( LT_T001 ).
LOOP AT LT_T001 INTO DATA(LS_T001).
"퍼센트 형식의 Progress 호출
PERFORM SET_PROGRESS_WITH_PERCENT USING '처리중입니다...'.
WAIT UP TO '0.5' SECONDS.
ENDLOOP.
'ABAP > 소스코드' 카테고리의 다른 글
[Class] Progress Indicator 처리용 Common Class (0) | 2023.05.24 |
---|---|
[Report] Client copy 후 번호범위 자동 조정 프로그램 (1) | 2023.05.24 |
[ABAP] HMAC 암호화(HMACSHA256) 소스코드 (0) | 2023.05.09 |
[SAP/Report] Table/Structure 의 필드 리스트 조회 (2) | 2023.05.07 |
[SAP/User-Exit] 회사코드 탐색 도움말 불필요 항목 제외처리 (0) | 2023.05.07 |
댓글