
부제: ABAP 프로그램 구조화, 모듈화하기
역할: 로컬 모듈화. 반복 코드·복잡 로직 분리.
(FORM...ENDFORM)
Subroutine = FORM
네이밍 룰: 동사+목적어 형태 (ex. write_data)
파라미터: 서브루틴을 호출하는 구문과 호출받는 구문 사이에 주고받는 값.
- Call by Value
- Call by Reference
- Call by Value and Result
FORM 구문 내의 Formal 파라미터는 TYPE 과 LIKE 구문을 이용해 모든 ABAP 데이터 타입을 사용할 수 있다.
TYPE d를 파라미터로 FORM 구문에 전달했다면 Formal 파라미터는 다음 3가지 방법으로 타입 정의할 수 있음.
- Generic Type 사용
FORM sub CHANGING p_val.- Actual Parameter와 같은 타입 사용
FORM sub CHANGING p_val TYPE d.- Actual Parameter와 같은 타입 변수 사용
FORM sub CHANGING p_val LIKE gv_val.
구조체를 파라미터로 사용할 때는 TYPE, LIKE, STRUCTURE 구문을 이용해 구조체 타입을 정의할 수 있음.
인터널 테이블을 서브루틴의 파라미터로 사용할 때도 USING, CHANGING 키워드를 사용할 수 있다.
TABLES 구문은 Rel 3.0 이전 버전에서 사용되는 것. USING, CHANGING 구문 대신에 사용할 수 있음. (호환성 문제로 현재에도 많이 사용된다. )
Tables 구문으로 Formal 파라미터를 정의하면 Call by value가 지원되지 않음.
Internal, External 두가지 방법 존재.
PERFORM 구문으로 이름만 지정하면 됨.
[IF FOUND] 구문 사용.
해당 서브루틴이 존재하는지 체크.
외부 프로그램의 서브루틴을 호출할 경우, 이름을 동적으로 지정 가능.
PERFORM idx OF subr1 subr2 ... subrn.
DO ~ ENDDO WHILE ~ ENDWHILELOOP ~ ENDLOOPEND FORM. 구문을 만나면 정상적으로 종료됨.
EXIT, CHECK 구문을 활용하여 수행 중에 종료 가능.
: 메인 메모리에서 동작하는 동적 서브루틴 정의 가능.
GENERATE Subroutine POOL <itab> NAME <prog> .
-> 현재 실행 중인 프로그램의 Main 메모리에 서브루틴 POOL을 생성하게 됨.
서브루틴 풀의 소스코드를 <itab> 인터널 테이블에 삽입. 8자리 Type C의 <prog> 서브루틴 프로그램을 생성하게 됨.
ON COMMIT : COMMIT WORK 구문을 만날 때 서브루틴 구문 호출됨. ROLLBACK: ROLLBACK WORK 구문을 만날 때 서브루틴 구문 호출됨. MACRO…ENDMACRO
프로그램에서 같은 구문을 여러번 사용할 때.
다른 프로그램에서는 호출할 수 없다는 단점 존재.
모든 프로그램에서 사용할 수 있음.
: 서브루틴과 유사하게 기능별로 모듈화하고 재사용이 가능하도록 지원함.
서브루틴이 Local Modularization이라면
Function 모듈은 Global Modularization.
역할: 전역 모듈화.
중앙 라이브러리(R/3 레포지토리)에 저장되는 특별한 Global 서브루틴. 어디서나 호출 가능
스크립트 수 줄일 수 있음.
생성하기 이전에 구현하고자하는 펑션이 존재하는지 확인해야함.
구성 (SE37):
- Import/Export/Changing/Tables 파라미터
- 예외(Exceptions) 정의
(1) Attributes
[Attributes] 탭에서는 그룹, 생성인, 생성일, 패키지 등 일반적인 관리 정보와 프로세싱 타입 정보 조회
(2) Import 파라미터
변숫값을 전달받는 목적으로 사용됨.
(3) Export 파라미터
ABAP 프로그램으로 값을 전달하는 목적으로 사용되는 파라미터.
(4) Changing 파라미터
ABAP 프로그램과 파라미터를 동시에 주고받을 수 있음.
(5) Tables 파라미터
하나의 값이 아닌 복수의 값, 인터널 테이블의 내용을 주고받을 수 있음.
(6) Exceptions
예외 사항 처리
: 함수 모듈 컨테이너. 같은 그룹 내 모듈은 메모리 세션 공유
직접 실행할 수 없음.
펑션 호출했을때, 시스템은 호출한 프로그램의 Internal 세션 안으로 펑션 그룹 전체를 로드한다.
그래서 펑션 그룹 내에 중요한 펑션을 많이 생성하는 것은 검토가 필요함.
펑션 그룹 이름은 26자까지 가능.
메인프로그램의 이름은 'SAPL'이 펑션 그룹 앞에 붙어 구성됨.
SAP 담당자는 RFC 함수를 이용해 데이터를 EXPORT 하고 WEBBMETHODS가 데이터를 받아서 레거시로 전달해준다.
RFC의 정확한 의미는 시스템 간의 커뮤니케이션 프로세스를 담당하는 SAP 인터페이스 프로토콜.
핵심 3가지 ⭐️
서브루틴,Function Module 사용하기.매크로는 신중히 사용하자
한 Function Group에 너무 많은 모듈을 몰아넣지 말고, 도메인별·프로세스별로 쪼개기