ABAP으로 여러 개의 생성 트랜잭션을 처리하는 BDC 프로그램을 개발해야 하는 경우가 있습니다.
예를 들어 판매오더를 생성하고, 생성된 판매오더로 납품문서를 생성하고, 다시 납품문서에 대한 대금청구문서를 생성하는 일련의 과정을 한번에 일괄처리 하는 BDC 프로그램을 개발해야 하는 경우가 있습니다.
또는 판매오더를 생성하고, 해당 판매오더를 참조하여 생산오더를 생성하는 BDC 프로그램을 개발해야 하는 경우도 생길 수 있습니다.
또는 구매요청을 생성하고, 구매요청으로 구매오더를 생성하고, 다시 구매입고까지 잡는 BDC 프로그램을 개발해야 하는 경우가 생길 수도 있습니다.
이처럼 여러 개의 트랜잭션을 생성하는 BDC를 한번에 모아서 연속적으로 처리할 때 앞의 생성 BDC 처리 결과를 가지고 다음 생성 BDC가 처리되어야 합니다.
즉, 판매오더를 생성하는 BDC 처리 결과 만들어진 판매오더문서를 가지고, 납품문서 생성 BDC가 처리되어야 한다는 것입니다.
여기에서 한가지 문제가 발생할 수 있습니다. 판매오더 생성 BDC가 끝남과 동시에 바로 납품문서 생성 BDC를 처리할 경우 미처 판매오더문서를 가져오지 못하는 일이 발생할 수 있습니다. 이를 경우 납품문서 생성 BDC에서 오류가 발생하게 됩니다.
이러한 오류를 방지하기 위해서는 하나의 생성 BDC가 끝난 다음 일정 시간의 지연 시간을 두고, 전 단계에서 생성된 문서를 읽어와서 다음 단계의 BDC를 처리하면 됩니다.
이번 글에서는 ABAP에서 일정 시간 동안 실행을 지연(Delay, Sleep) 시키는 방법 2가지에 대해 알아보겠습니다.
데모 시나리오
– 판매오더를 생성하고 생성된 판매오더로 납품문서 생성하고 그리고 최종 빌링문서까지 생성하는 BDC 프로그램 개발한다고 했을 때 중간에 대기 시간을 주지 않으면 후속 작업으로 진행이 안되고 어느 단계의 처리 부분에서 오류가 발생하기도 합니다.
– 트랜잭션 처리 과정 : VA01 => VL01 => VF01 (판매오더 생성 => 아웃바운드납품문서 생성 => 대금청구(빌링)문서 생성)
- 특히 결산이 돌아갈 때 등 시스템의 부하가 발생할 때 자주 이런 현상이 생길 수 있습니다.
ABAP에서 RZL_SLEEP 함수를 사용하여 실행 지연 시간 설정하기
▶ ABAP에서 제공하는 RZL_SLEEP Function Module을 사용하는 방법입니다.
CALL FUNCTION ‘RZL_SLEEP‘
EXPORTING
SECONDS = 2 ” 2초간 프로그램 대기
* EXCEPTIONS
* ARGUMENT_ERROR = 1
* OTHERS = 2
- SECONDS 값은 1~5초 사이의 숫자만 입력 가능합니다.
- 5를 초과하는 숫자를 입력하면 Exception 오류 덤프가 발생합니다.
ABAP에서 WAIT UP TO nn SECONDS. 구문을 사용하여 실행 지연 시간 설정하기
▶ 가장 간단하게 사용할 수 방법으로 WAIT UP To nn SECONDS. 구문을 사용하는 방법입니다.
WAIT UP TO 20 SECONDS. ” 20초간 프로그램 대기
- 설정할 수 있는 시간 값의 제한이 없습니다.
- 5초 이상의 지연 시간을 발생 시켜야 하는 경우 WAIT UP TO nn SECONDS.를 사용하면 됩니다.
※ 참고로 DO nn TIMES. ~ ENDDO. 구문을 사용해서 일정 시간 지연을 주는 방법을 사용하기도 합니다.
결론
ABAP 프로그램에서 실행 단계에서 중간에 임의로 지연 시간을 주어야 할 경우가 있습니다.
앞 단락에서 설명한 2가지 방법 중에 적당한 방법으로 지연 시간을 주면 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^