SAP/Enhancement

[ABAP] 01. SAP Implicit Enhancement

쌥돌이 2024. 11. 4. 23:22

Implict Enhancement란 스탠다드 오브젝트(펑션, 서브루틴 등)의 처음이나 끝에 소스를 추가하여 우회할 수 있는 방법을 의미한다.

오브젝트의 시작과 끝에 CBO로직을 추가함으로써 기존 로직은 유지하되 요구사항은 충족시킬 수 있는 것이다.

가령 사용자가 이런 요구를 했다고 가정해보자.

화면에 그리드가 출력될 때 어떤 프로그램에서 호출된 것인지 알 수 있도록 팝업을 띄워주세요!

 

물론 정석은.. alv를 띄워주는 펑션 앞에 type i 메세지를 뿌려주는 것이다.

alv 펑션이 쓰인 곳이 100곳이라고 해도 일일이 다 쫒아가서 수정하는 것도 고되지만 좋은 방법이다.

하지만 좀 더 쉬운 방법이 없을까?

펑션을 호출하는 프로그램을 알려주는 시스템 값인 SY-CPROG 값을 이용한다면,

SY-CPROG를 alv 펑션 앞에 띄워준다면 모든 프로그램에 일괄 적용되어 사용가능하지 않을까?

>>>>

 

데이터를 끌고 와 reuse alv 펑션으로 뿌려주는 기초적인 프로그램이다.

 

수행하면 당연히 아무런 액션 없이 기본적인 alv가 출력된다.

여기서 요구사항을 충족시키기 위해 alv 펑션내에서 소스코드 에디터(ctrl + f1)를 열어보자.

 

 

아.. 막혔다.

바로 이럴 때 Implicit Enhancement를 통해 기존 소스코드를 건드리는 것 없이 상단에 cbo 로직을 추가함으로써 우회할 수 있다.

스탠다드 펑션 소스코드에서 상단 동글뱅이 버튼(ctrl + f4)를 누르자.

그러면 이렇게 소스코드 라인 옆에 망사가 생긴다.

 

 

그리고 상단 메뉴바에서 Edit->Enhancement Operations -> Show Implicit Enhancement Options 경로를 차례대로 선택한다.

그러면 소스코드에 아래처럼 """""""""""""""""" 라인이 한 줄 생긴다.

 

그 라인에 정확하게 커서를 두고 우클릭을 한 뒤에

Enhancement Operations -> Create Implementation 을 차례대로 선택한다.

Code를 선택한다(Declaration과 Code는 무슨 차이인지 모르겠다. Declaration을 선택한 뒤 소스코드를 집어넣어도 되는 것 같은데).

 

Enhancement ID와 설명을 입력을 입력하고 체크를 선택한다.

*Enhancement ID: 스탠다드 오브젝트 내에서 관리 될 Enhancement 소스구역 이름

Enhancement도 개발->테스트->운영 이관의 절차를 걸쳐야 하므로 패키지를 할당하고 CTS를 채번해야한다.

(본인은 로컬 오브젝트로...)

그렇게 하면...

소스코드가 열렸다.

요구사항인 ALV 출력 시 호출 프로그램 정보를 나타내는 팝업출력 소스코드를 작성한 뒤 활성화 시킨다.

소스에 오류가 없다면 활성화되면서 위 표시된 주석이 inactive version에서 active version으로 바뀐다.

active가 완료되면 다시 SE37에서 해당 펑션 소스코드를 조회해보면 내가 위에서 작성한 소스코드가 저장되어 있음을 확인할 수 있다. 일반적인 소스코드 에디터 편집방법으로는 절대 수정 불가능하다.

이제 이 소스코드는 제껍니다.

 

 

이제 요구사항이 잘 반영되었는지 최초의 레포트 프로그램을 수행해보자.

팝업이 성공적으로 출력되면서...

ALV도 성공적으로 출력되었다.

* 스탠다드는 전사 공통으로 쓰는 오브젝트이므로.. 연습이 끝나면 원복해놓아야 한다.

소스코드에서 Enhance 버튼을 누른 뒤에 cbo 소스 안에 커서를 두고 Undo 버튼을 누른다.

그러면 작성했던 cbo 로직이 사라지는데 그 상태로 active를 하면 소스가 원복된다.

 

 

프로그램 오브젝트 리스트에서도 삭제해줘야 한다.

* 틀린 내용은 댓글로 지적해주시면 감사히 받겠습니다 :)