SAP/ABAP

MIGO 에서 구현한 Badi Enhancement 가 입고 BAPI 처리 시 실행되지 않는 경우 강제로 타게 하는 방법

Buggie 2024. 11. 11. 16:28

Case)

MIGO 에서 구매오더 번호를 여러 개 입력해서 아이템이 여러 라인이 있다.

아이템 기준 체크로직을 추가했다.

그리고 체크에 걸리면 메시지 처리 후 자재문서를 만들지 말아야 한다.

 

 

MIGO 는 S/4 로 오게 되면서 생긴 MM 에서 자주 사용하는 Tcode 이다.

GR/GI, 이전전기 등등의 트랜잭션을 다 처리할 수 있다.

 

MIGO 에서 입고를 하는 것과 동일한 동작을

대체하여 CBO 프로그램 상에서 BAPI_GOODSMVT_CREATE 함수를 써서 할 수 있다.

 

문제는, 스탠다드 MIGO 에 체크로직을 추가해야 하는데, Badi 를 구현하여

'MB_MIGO_BADI' 체크하는데까지는 가능하지만,

저 CBO 의 BAPI 함수를 수행할 때는 이 Badi 가 Trigger 되지 않는다는 것이다.

그 이유는 Badi 는 스크린 레벨에서 동작하기 때문인데..

 

Solution)

아래의 몇 스텝만 따라하면 MIGO 에서 동작하는 것과 동일하게

BAPI 실행시에도 Badi 에 걸어둔 체크로직이 타게 할 수 있다. (So Simple 하다)

 

1. CBO 로 Function 을 생성한다. (단, Badi 와 동일한 파라미터 값 가지도록)

 

 

2. 'MB_CREATE_GOODS_MOVEMENT' 내에서 1번에서 만든 Function 을 호출한다.

   (Enhancement Point 를 생성해야 하는데, 그 위치는 Function 의 소스 중 맨 아래쪽이다.
    즉, ENDFUNCTION 바로 위가 되겠지?)

 

3. 위 두 개의 단계만 해주면, BAPI 가 실행될때마다 Badi 에서 구현해준 로직이 호출된다.

 

 


Tcode : SE19 (BAdI Builder)

 

MB_MIGO_BADI 를 참조하여 ZMB_MIGO_BADI 를 생성한다.

 

 

ZMB_MIGO_BADI 의 구현 클래스

 

기본 제공되는 메소드 중에 적당한 위치에 체크로직을 구현해 준다.

POST_DOCUMENT 는 전기할때 타는 메소드,

CHECK_ITEM 또는 CHECK_HEADER 는 점검할때 타는 메소드..

 

한군데서만 체크를 수행하면 되므로, 적당히 POST_DOCUMENT 에 로직을 구현해서
MIGO 에서는 전기시 체크가 잘 된다.

 

POST_DOCUMENT 메소드에 구현한 체크로직

 

MB_CREATE_GOODS_MOVEMENT 함수의 가장 아랫부분에 Enhancement Point 를 생성한다.

MB_CREATE_GOODS_MOVEMENT

 

 

이 CBO Function 의 핵심은..
파라미터 타입이 IT_MSEG 으로 Screen Level 의 아이템 라인을 받아서 아이템 기준 체크로직을
Badi 에서 걸었던 체크로직과 동일하게 걸어준다는것이다.

CBO 로 만든 Function

 

BAdI 의 파라미터 구조

 

여기까지 활성화하고, BAPI 를 태워보면

체크가 가능하다.

 

끝.