ABAP 언어에 대한 개념을 정리하는 포스팅입니다.
작성자는 ABAP에 대한 전문가가 아니며, 작성된 정보가 부정확할 수 있으니 게시글은 참고 목적으로만 봐주시면 감사하겠습니다.
1. Subroutine
서브루틴은 주로 스크립트의 모듈화, 재사용, 구조화하는데 사용됩니다.
서브루틴은 FORM~END FORM 구문을 이용하여 선언이 가능합니다.
선언한 서브루틴을 호출하기 위해선 PERFORM 구문을 사용합니다.
서브루틴의 기본 구조는 다음과 같습니다.
FORM subroutine_name [EXPORTING parameter1 TYPE data_type1
parameter2 TYPE data_type2
... ].
" 서브루틴 내에서 수행될 코드
ENDFORM.
구조에 대해 좀 더 상세하게 알아보겠습니다.
<subroutine_name>: 서브루틴의 이름을 나타냅니다.
EXPORTING: 서브루틴에 전달되는 매개변수를 정의하는 키워드입니다.
<parameter1, parameter2, ...>: 서브루틴에 전달되는 매개변수(파라미터)의 이름을 나타냅니다. 파라미터의 이름은 'PA_'로 시작해야합니다.
<TYPE data_type1, TYPE data_type2, ...>: 파라미터의 데이터 타입을 정의합니다.
서브루틴 예시 코드는 다음과 같습니다.
FORM calc_percentage USING pv_act TYPE i
pv_max TYPE i
CHANGING cv_result TYPE tv_result.
IF pv_max = 0.
WRITE:/ 'Error of division by zero'.
ELSE.
cv_result = pv_act / pv_max * 100.
ENDIF.
ENDFORM.
서브루틴은 파라미터를 사용해야 합니다.
파라미터는 서브루틴을 호출하는 구문과 호출받는 구문 사이에 주고 받는 값을 의미합니다.
서브루틴 내에서 파라미터는 데이터 구문으로 정의하는 일반적인 로컬 변수와 같습니다.
서브루틴을 호출하는 파라미터를 Actual Parameter, 서브루틴에서 사용되는 파라미터를 Formal Parameter라고 합니다.
파라미터는 PERFORM의 USING, CHANGING 구문을 사용하여 선언합니다. 또한, 서브루틴과 그 순서를 같게 지정해야합니다.
파라미터는 ABAP의 모든 기본 데이터 타입, 필드 심볼, 인터널 테이블 등을 사용할 수 있습니다.
서브루틴은 USING, CHANGING 구문으로 파라미터를 주고 받으며, 3가지 유형을 가지고 있습니다.
1. Call by Value: 서브루틴을 호출할 때, Actual Parameter의 값이 Formal Parameter에 복사됩니다, 하지만 Formal Parameter의 값이 변경되더라도 Actual Parameter에는 영향을 미치지 않습니다.
2. Call by Reference: Formal Parameter는 서브루틴이 호출되는 동안 Actual Parameter의 주솟값을 가지고 있습니다. 즉, 서브루틴을 호출한 프로그램에서 작업합니다.
3. Call by Value and Result: 서브루틴에서 전달된 값을 변경하면 메인 프로그램에서도 값이 변경됩니다.
2. Function (Group, Module)
Function(함수)은 서브루틴과 유사하게 기능별로 모듈화하고 재사용이 가능하도록 지원합니다.
서브루틴이 Local Modularization이라 한다면 함수는 Global Modularization이라고 합니다.
1. Function Module
Function Module은 중앙 라이브러리(R/3 Repository)에 저장되는 특별한 글로벌 서브루틴입니다.
Function Module을 이용하면 재사용을 제공하고 스크립트 수를 줄일 수 있습니다.
R/3 Repository에는 ABAP에서 사용할 수 있는 다양한 Function Module이 저장되어 있습니다. Function Module은 직접 생성할 수도 있습니다.
Function Module의 인터페이스는 Import Parameters, Export Parameters , Changing Parameters , Tables, Exceptions 등을 포함합니다.
인터페이스의 특징은 다음과 같습니다.
Import Parameters: Function Module에 전달하는 값이며, 선택 사항이다.
Export Parameters: Function Module로부터 ABAP 프로그램에 전달받는 값이며, 선택 사항이다.
Changing Parameters: Function Module에 값을 넘기고, 그 값을 바꿀 수 있다.
Tables: 인터널 테이블을 Function Module에 전달하고 받을 수 있다.
Exceptions: 에러에 대한 정보 제공
2. Function Group
Function Group은 Function Module을 모아 놓은 컨테이너입니다.
Function Group은 직접 실행할 수 없습니다.
Function Group의 이름은 26자까지 허용합니다.
함수 그룹 생성 과정은 다음과 같습니다.
Function Group 우클릭 -> Create -> Function Group 이름 입력 -> 설명 입력 후 저장
함수 모듈 생성 과정은 다음과 같습니다.
1. 생성한 함수 그룹 우클릭 -> Create -> Function Module 선택 -> Function Module 생성
2. Import, Export, Exception 값 입력
Import 파라미터의 이름은 iv_로 시작해야 합니다.
Export 파라미터의 이름은 ev_로 시작해야 합니다.
3. 함수 모듈에서 사용할 소스코드 입력
4. 생성한 함수 모듈은 Pattern을 통해 호출할 수 있습니다.
3. BAPI (Business Application Programming Interfaces)
BAPI(Business Application Programming Interfaces)는 시스템과 시스템 간 데이터를 주고 받을 수 있는 인터페이스입니다.
BAPI는 SAP 시스템 내의 비즈니스 데이터와 프로세스에 대한 접근을 제공하며, 외부 시스템이나 응용 프로그램이 SAP 시스템의 데이터를 읽거나 변경할 수 있게 합니다.
BAPI Explorer를 접속할 때 사용하는 t-code는 bapi입니다.
BAPI는 BOR(Business Object Repository)안에서 사용됩니다. BOR(Business Object Repository)은 비즈니스 오브젝트를 모아둔 곳으로 비즈니스 오브젝트 안에 메소드가 존재하고 해당 메소드 안에 BAPI가 존재합니다.
BAPI를 통해 데이터를 생성, 수정, 삭제할 수 있습니다. 또한, BAPI는 아밥 프로그램 뿐만 아니라 다른 프로그램에서도 사용이 가능합니다.
BAPI도 함수 모듈이며, BAPI 생성시 이름은 “BAPI_”로 시작해야 합니다.
함수 모듈은 스크린을 가질 수 있지만, BAPI 함수 모듈 그룹은 스크린을 가질 수 없습니다.
BAPI 함수 모듈은 Exceptions 을 가질 수 없습니다. 에러 처리는 엑스포트 파라미터의 Return이란 파라미터로 진행합니다.
BAPI의 데이터 타입은 전부 BAPI로 시작합니다, BAPI 함수 모듈도 “BAPI_”로 시작해야 합니다.
인터페이스로 사용되어져 시스템 주소와 메모리 주소가 다르기 때문에 BAPI 정의 시 정의되어 있는 파라미터에 pass by value 체크 박스에 체크해주어야 합니다.
BAPI는 일반적으로 비즈니스 오브젝트 유형의 다음 함수를 위해 존재합니다, 함수 종류는 다음과 같습니다.
- 오브젝트 생성
- 오브젝트 특성 검색
- 오브젝트 특성 변경
- 오브젝트 리스트 확인
BAPI는 다음과 같은 곳에서 사용합니다.
- 분산 시나리오(ALE)
- 다른 컴퓨터 프로그래밍 언어(Java, Visual Basic)
- SAP 시스템 내 다양한 컴포넌트
- 인터넷/인트라넷
- 비즈니스 워크플로우
BAPI 사용 방법은 다음과 같습니다.
- GetList: 지정된 선택 기준을 충족하는, 사용 가능한 오브젝트 리스트를 리턴합니다.
- GetDetail: 오브젝트의 세부 정보(특성)를 리턴(완전키 지정해야 함)합니다.
- Create, Change, Delete, Cancel: 오브젝트를 생성, 변경 및 삭제할 수 있습니다.
- AddItem, RemoveItem: 하위 오브젝트를 추가 또는 제거합니다.
BAPI 호출 코드는 다음과 같습니다.
CALL FUNCTION ‘BAPI’ ~ IMPORT ~ EXPORT ~
모듈에 따라 BAPI 사용 여부가 결정된다.