MM01에서 생성된 자재코드를 MM02에서 변경하고자 할 때, Exit을 구현시켜 변경이 불가능하도록 강제로 구현해보자.
우선 MM01에서 자재코드를 생성한 뒤 MM02에서 자재의 단위를 변경시킬 때(재고만없다면) 워닝과 함께 변경이 가능하다.



그렇다면, 자재단위를 변경하고 저장 할 때 어떤 Exit이 수행될 지 확인하여 Exit이 구현될 수 있도록 Badi Implementation를 찾아야 한다.
* Badi Implementation = Exit name
다시 MM02에서 자재 단위를 변경 후 디버깅을 걸고 저장해보자.


디버깅 화면으로 전환되면 브레이크포인트에 다음 옵션을 줘서 해당 로직에 걸리게 세팅한다.
그리고 디버깅을 쭉 돌리면(F8) 위 브레이킹포인트 조건에 따라 BADI exit이 수행되는 포인트에 도달하게 된다.
* Badi Exit을 수행하기 위해 시스템은 cl_exithandler 오브젝트를 생성하는 메소드를 호출한다.

Exit_name 파라미터를 보면 수행하게 되는 Exit 명을 확인할 수 있다.
구글링 또는 SE84, SE19 등에서 패키지코드를 조회조건으로 넣어가면서 내가 원하는 Exit을 찾고 해당 Exit이 디버깅을 통해 진짜 호출하는 Badi인지 확인해야 하는 것 같다(Customer Exit과 마찬가지로 원하는 Exit 찾는게 힘든 것 같다).
Exit 정보는 SE18(Badi Builder)에서 확인할 수 있다.

Check_change_mara_meins로 구현 가능할 것 같다
Exit의 Method에 설명을 보고 내가 원하는 것을 구현할 수 있는지 확인이 필요하다.
여기서 Exit 명은 BADI_MATERIAL_CHECK이고 구현하기 위한 Method는 CHECK_CHANGE_MARA_MEINS다.
Exit 명을 찾았다면 이제 구현할 차례다.
티코드 SE19에서 구현 가능하다.
SE19에서 'Create Implementation' 박스에 Classic BADI를 선택하고 확인한 Exit 명을 입력하고 Create Impl. 버튼을 클릭한다.


내가 구현할 BADI를 정의할 이름을 입력한다.

Short Text를 입력한다.
Interface 탭을 보면 Method 정보가 나열되어 있다.
우리가 찾은 Exit명, BADI_MATERIAL_CHECK는 인터페이스 IF_EX_BADI_MATERIAL_CHECK로 구현되어 있다.
우리가 BADI를 구현한다는 것은 Exit을 구현하는 인터페이스를 가지고 로직을 심을 class를 생성한다는 것이다.
정리하면,
SAP 스탠다드 티코드 내에 부분부분마다 exit 포인트를 심어 놓았는데, 해당 exit 포인트는 인터페이스로 구현된 BADI를 호출한다.
해당 BADI를 SE19에서 카피하여 Z로 된 BADI를 구현하여 로직을 심을 클래스를 생성하고 해당 클래스 내에 로직을 삽입함으로써 BADI로 Exit을 구현하게 되는 것이다.
Z로 된 BADI를 생성하고 활성화까지 했다면, SE19에서 확인할 수 있다.


METHOD를 더블클릭하면 수정할 수 있다.

결국 Method라고 하더라도 Function과 마찬가지로 어떤 파라미터를 받고 어떤 파라미터를 뱉어내는지 알아야 데이터의 정합성을 지키는 로직을 작성할 수 있을 것이다.
se24에서 ZCL_IM_BADDI_MATNR_CHECK 를 조회하고
로직 내에 브레이킹 포인트를 삽입한 뒤 다시 티코드를 돌려 파라미터를 확인할 수 있다.


메소드에 브레이킹 포인트를 걸었다면 티코드를 돌리는 순간 해당 라인으로 디버깅 될 것이다. 이 때 한 단계만 건너뛴다면 위 화면처럼 메소드를 호출한 부분을 볼 수 있으며 파라미터도 확인 가능하다.
이제 단위를 변경할 때 어떤 부분이 호출되고 호출되는 부분에 어떤 값을 주고받는지 알고 수정까지 가능하다면 무엇이든 할 수 있다.



Badi가 정상적으로 구현되었다.
* 틀린 내용은 댓글로 지적해주시면 감사히 받겠습니다 :)

'SAP > Enhancement' 카테고리의 다른 글
[ABAP] 번외. SAP MM01 EXIT (0) | 2024.11.16 |
---|---|
[ABAP] 10. SAP Classic BADI -1 (0) | 2024.11.06 |
[ABAP] 08. SAP Customer Exit: 정리 (0) | 2024.11.05 |
[ABAP] 07. SAP Customer Exit: Screen Exit (0) | 2024.11.05 |
[ABAP] 06. SAP Customer Exit: Menu Exit (0) | 2024.11.04 |