본문 바로가기

Language/ABAP

[ABAP] Purchase Order Lock : ENQUEUE_EMEKKOE, DEQUEUE_EMEKKOE

개발을 하다 보면 CBO 프로그램 개발을 통해 구매오더를 변경하는 경우가 있는데,

이때 누가 구매오더를 잡고 있다면 개발 프로그램에서는 해당 구매오더에 접근할 수 없어 데이터 변경이 불가하다.

내가 이 함수를 찾게 된 계기는 하나의 구매오더에 대해 BAPI를 두 번 돌려야 하는 상황에서 

첫 번째 BAPI가 돌아가 고난 후 두 번째 BAPI가 돌아갈 때 그 잠깐 사이에 혹시나 누가 구매오더를 조작하게 될지 몰라

(그런 경우는 거의 없겠지만... 만일의 상황에 대비하기 위해..... )

이리저리 검색하다 알게 된 함수이다.

구매오더 잠금을 설정하는 함수는 'ENQUEUE_EMEKKOE'

구매오더 잠금을 해제하는 함수는 'DEQUEUE_EMEKKOE'

아래와 같이 사용할 수 있다.

 

테스트하기 위해 두 개의 함수 사이에 디버깅을 걸어 테스트해 보니

디버깅이 걸린 상태에서 ME22N으로 해당 구매오더로 들어가 보면

이렇게 프로그램 하단의 STATUS BAR에 이미 처리 중이어서 해당 구매오더 처리가 불가하다는 메시지를 확인할 수 있다.

 

그렇다면 반대로 해보면 어떨까?

구매오더를 수정하기 위해 열어놓은 상태에서 프로그램을 실행해 보면

SUBRC 가 1로 떨어져 오브젝트를 이미 잠갔다는 EXCEPTION을 확인할 수 있고,

시스템 메시지는 오른쪽과 같이 나타난다.

T-CODE : SE91 메시지 클래스에서 해당 메시지를 조회해 보면

이러한 시스템 메시지가 나타난다는 것을 확인할 수 있다.

이렇게 나타나는 시스템 메시지는 ' MESSAGE_TEXT_BUILD' 함수를 통해 텍스트로 전환할 수 있다.

 

참고로, 함수를 사용할 때 EBELP는 없어도 상관없다.

두 번 다 테스트해 본 결과 EBELP를 넣어도 넣지 않아도 동일하게 잠금이 걸리는 것을 확인할 수 있었다.