SAP/Enhancement 10

[ABAP] 번외. SAP MM01 EXIT

자재코드를 생성하는 MM01에 CBO 필드나 메세지를 본적이 있나?해당 부분을 유지보수 하기 위해 관련 패키지의 Enhancement에 Screen Exit 을 찾아봤나? ​그러나 아무리 찾아봐도 Screen Exit은 없을 것이다.아래는 mm01에 연결된 Exit이다. 그럼 어떻게 MM01에 CBO 스크린을 그려넣고 데이터를 이동시킬 수 있는 것일까?​답은 Enhancement와 IMG세팅(SPRO)에 있다.1. XMG0 패키지에 CBO스크린을 그려주고2. Function Exit을 유지보수해주고3. 티코드 OMT3에서 서브스크린을 할당해주면 된다.* 만약 MM01에서 입력한 CBO 데이터가 MARA에 추가되어야 한다면 사전에 MARA에 APPEND STRUCTURE를 하여 Table Enhanceme..

SAP/Enhancement 2024.11.16

[ABAP] 11. SAP Classic BADI -2

MM01에서 생성된 자재코드를 MM02에서 변경하고자 할 때, Exit을 구현시켜 변경이 불가능하도록 강제로 구현해보자.​우선 MM01에서 자재코드를 생성한 뒤 MM02에서 자재의 단위를 변경시킬 때(재고만없다면) 워닝과 함께 변경이 가능하다. 그렇다면, 자재단위를 변경하고 저장 할 때 어떤 Exit이 수행될 지 확인하여 Exit이 구현될 수 있도록 Badi Implementation를 찾아야 한다.* Badi Implementation = Exit name​​다시 MM02에서 자재 단위를 변경 후 디버깅을 걸고 저장해보자.디버깅 화면으로 전환되면 브레이크포인트에 다음 옵션을 줘서 해당 로직에 걸리게 세팅한다.​그리고 디버깅을 쭉 돌리면(F8) 위 브레이킹포인트 조건에 따라 BADI exit이 수행되는 ..

SAP/Enhancement 2024.11.06

[ABAP] 10. SAP Classic BADI -1

BADI(Business ADD In)란 OOP 기반의 Enhancement다. Customer Exit이 Function module 기반의 Enhancement라면 BADI는 class를 이용한 Enhancement인 셈이다.​OOP와 Function 모두 모듈화를 위한 프로그래밍 방법이지만 Function은 재사용이 불가능(상황에 따라) 한 반면 OOP는 상속, 인터페이스 등 여러가지 방법을 통해 재사용이 가능하다는 점이다.​즉, 이번에 해볼 BADI 는 재사용이 가능하다는 것이다.Enhancement에서 재사용이 가능하다는 의미는 다음과 같다.​Customer Exit은 Function으로 구동된다. 즉 재사용이 불가능하다.따라서 Function Exit이 A프로젝트에 할당되어 있다면 A프로젝트가..

SAP/Enhancement 2024.11.06

[ABAP] 08. SAP Customer Exit: 정리

Customer Exit은 스크린, 메뉴, 로직에 대해 Function을 통해 스탠다드 티코드를 Enhancement 할 수 있는 방법이다.​티코드 'CMOD' 에서 프로젝트 라고 하는 Exit을 관리하는 묶음 단위를 먼저 정의(생성)해야한다.​정의했다면 프로젝트 안에 들어갈 Exit 명을 입력해야 한다.​Exit을 찾기 위해서는 가장 먼저,소스 혹은 오브젝트 내에 단서를 기준으로 Enhance 가능한 티코드인지 확인이 필요하다. Exit단서Function ExitCall customer-function 'xxx'Menu Exit+'xxx'Screen ExitCall customer-subscreen 단서를 찾았다면해당 부분의 티코드를 포함하는 개발클래스, 프로그램 정보, 스크린정보 등을 종합하여 SMO..

SAP/Enhancement 2024.11.05

[ABAP] 07. SAP Customer Exit: Screen Exit

Screen Exit이란 스탠다드 티코드의 화면에 cbo 필드를 추가하는 것이다.​SAP는 스크린의 서브스크린에 필드를 추가할 수 있도록 열어놓았는데, 바로 그 부분에 개입하여 exit을 수행하는 것이다.​앞서 봤던 Function Exit, Menu Exit과 동일하게 Screen Exit도 어떻게 수정포인트(Exit)를 찾을 수 있을까?​Function Exit이 'Call Customer-function'으로 시작하는 것 처럼Screen Exit도 'Call Customer-Subscreen'으로 시작한다.즉, 스크린 PBO 내에 'Call Customer-Subscreen' 이 있어야 하는데, 찾는 방법은 다음과 같다.    찾고자 하는 티코드 스테이터스를 띄우고 스크린 넘버를 더블클릭하여 로직을..

SAP/Enhancement 2024.11.05

[ABAP] 06. SAP Customer Exit: Menu Exit

SAP는 상단 메뉴바에도 유저 메뉴를 심을 수 있도록 열어놓았는데 해당 Exit 포인트를 Menu Exit이라고 한다.​먼저 티코드에 메뉴 Exit이 가능하도록 열려있는 티코드인지 확인이 되어야한다. 확인 방법은 다음과 같다. 스탠다드의 gui status 를 연다 MENU EXIT은 + 라는 문자와 3가지 문자로 구성되어 있다.설명에는 Customer Exit이라고 적혀있으므로 쉽게 식별 가능하다.​프로그램명(SAPLS38E)과 Exit 펑션코드(+PGE)를 찾았다면 Exit 명을 찾을 수 있다. 내가 수정하려는 Exit의 명칭은 SEUED001 이다.Exit 명을 찾았다면 이후 절차는 Function exit과 같다.티코드 CMOD -> 프로젝트 생성 -> Enhancement Assignment에 ..

SAP/Enhancement 2024.11.04

[ABAP] 05. SAP Customer Exit: Function Exit

수정해야 할 부분에 걸려있는 Function 모듈을 찾았다면, 어떻게 수정해야 할까?​​먼저 티코드 CMOD에서 *프로젝트를 정의한다.*프로젝트: Exit(customer function)을 묶어 관리하는 하나의 묶음단위프로젝트를 만들었다면 프로젝트 안에 Exit(Function)명을 입력해야 하므로 스탠다드 티코드 로직 안에 있는 Exit 포인트(Call Customer~)를 찾아야 한다.단, 해당 Exit 포인트가 내가 수정할 부분이 맞는지 점검이 필요하다. 위 단계에 따라 Exit 명을 확인했다면 프로젝트에 Exit을 입력한다. 프로젝트에 Exit 할당이 끝났다면, 해당 Exit(Function)에 CBO 로직을 삽입해야 한다. Z INCLUDE문은 로직을 입력할 수 있다.​본 포스팅에서 예제로 해..

SAP/Enhancement 2024.11.04

[ABAP] 04. SAP Customer Exit

Customer Exit은 Function 기반의 Exit이다.SAP는 스탠다드 티코드 곳곳에 customer function을 심어놓았다.해당 customer function에는 Z네이밍의 INCLUDE 프로그램이 선입력되어있다.​알다시피 우리는 Z프로그램을 수정할 수 있다.즉, SAP는 유저에게 스탠다드 티코드의 수정 포인트로써 Z프로그램을 customer function이라는 이름의 특수 function에 심어놓은 것이다.​customer function도 결국 function이므로 sap의 가이드에 따라 파라미터를 넣고 받아야 한다는 점은 있지만,기존 스탠다드 티코드의 정합성을 깨트리지 않기 위함이 아닐까?​먼저 Customer Exit은 3가지 종류가 있다.프로그램 로직을 수정할 수 있는 Fun..

SAP/Enhancement 2024.11.04

[ABAP] 01. SAP Implicit Enhancement

Implict Enhancement란 스탠다드 오브젝트(펑션, 서브루틴 등)의 처음이나 끝에 소스를 추가하여 우회할 수 있는 방법을 의미한다.오브젝트의 시작과 끝에 CBO로직을 추가함으로써 기존 로직은 유지하되 요구사항은 충족시킬 수 있는 것이다.​​가령 사용자가 이런 요구를 했다고 가정해보자.화면에 그리드가 출력될 때 어떤 프로그램에서 호출된 것인지 알 수 있도록 팝업을 띄워주세요! 물론 정석은.. alv를 띄워주는 펑션 앞에 type i 메세지를 뿌려주는 것이다.alv 펑션이 쓰인 곳이 100곳이라고 해도 일일이 다 쫒아가서 수정하는 것도 고되지만 좋은 방법이다.​하지만 좀 더 쉬운 방법이 없을까?​펑션을 호출하는 프로그램을 알려주는 시스템 값인 SY-CPROG 값을 이용한다면,SY-CPROG를 al..

SAP/Enhancement 2024.11.04

[ABAP] 00. SAP Enhancement & Modification

SAP 유저가 쓸 수 있는 프로그램은 2가지다, CBO와 스탠다드.​사용자가 자신의 요구사항을 들며 CBO를 개발해 달라고 하는 것은 SAP 개발 프레임워크가 제공하지 않는 기능을 요구하지 않는 이상 불가능할 건 없다.하지만 스탠다드 프로그램 수정을 요구한다면 어떻게 해야할까?​수 많은 티코드에서 공용으로 쓰는 INCLUDE 프로그램들과 의미를 알 수 없는 영어로 쓰여진 독일어 소스코드들, 끝없이 안으로 타고 내려가는 계단식 프로그램 구조.​해괴하고 매우 난이도 높은 프로그램의 구조를 문제삼는건 둘째치고 일반 개발자가 SAP 스탠다드 프로그램을 수정하는 것은 Access key를 받기 전까진 불가능하다. ​이런 상황에서 사업부서에서 스탠다드 티코드에 업무상 필요한 기능을 구현해달라고 요구한다면 일반 개발..

SAP/Enhancement 2024.11.04