BDC 수행중에
아래 상태바에 진행률을 보여주고 싶습니다.
최대한 속도저하를 줄이고자
'SAPGUI_PROGRESS_INDICATOR' 펑션등은 사용하지 않구요..
그냥 MESSAGE S001(00) WITH ... 를 사용해서
"건수 / 총건수 진행중입니다." 를 상태바에 텍스트로 보여주려고 하는데요...
MESSAGE TYPE이 I,W,E등은 다 먹히는데, 성공메세지인 S로 메세지를 주면
상태바에 나타나질 않네요...
왜그럴까요?
MESSAGE 로 처리할 수 없다면 다른 심플한 방법이 있나요?
Indicator를 그냥 쓰시면 1%부터 쭈욱 리프레쉬가 되어서 오히려 수행속도를 느리게 할수 있습니다. 특정 % 에서만 리프레쉬를 하게끔 코딩을 하면 되시는데요. 예제는 다음과 같습니다.
글로벌변수
DATA : line_cnt TYPE i,
cur_pcnt type i,
pre_pcnt type i,
div TYPE i.
DESCRIBE TABLE i_mkpf LINES line_cnt. " 가장 오래걸리는 루프문의 라인수를 받음
LOOP AT i_mkpf.
div = line_cnt / 100.
cur_pcnt = sy-tabix / div. " 백분율로 만듬
* 현재 percentage와 인디케이터에서 이미 보여준 percentage 값을 넘겨줌
PERFORM progress_indicator USING cur_pcnt pre_pcnt.
*&---------------------------------------------------------------------*
*& Form PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
FORM progress_indicator USING p1 p2.
DATA: text(128),
c_pcnt(3) TYPE c.
IF ( cur_pcnt = 1 and pre_pcnt <> 1 ) or " 1%, 30 %, 60 %, 90% 일때만 리프레쉬
( cur_pcnt = 30 and pre_pcnt <> 30 ) or
( cur_pcnt = 60 and pre_pcnt <> 60 ) or
( cur_pcnt = 90 and pre_pcnt <> 90 ).
c_pcnt = cur_pcnt.
CLEAR text.
CONCATENATE c_pcnt '% is progressing...' INTO text
SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = cur_pcnt
text = text.
pre_pcnt = cur_pcnt.
ENDIF.
ENDFORM. " PROGRESS_INDICATOR
수고하세요.