-
[Modularization] FunctionSAP/Abap 2022. 1. 18. 17:03
[Function: Overview]
Subroutine과 유사하게 기능별 모듈화, 재사용을 위해 구성된 구문이다.
Subroutine은 local modularization, Function은 global modularization이라고 할 수 있다.- Function과 Subroutine의 차이점
- Function은 function group이라고 하는 일종의 pool에 포함되어야 한다.
- Function은 예외처리 기능을 제공하여, 에러 발생시 해당 에러를 호출한 프로그램에 전달할 수 있다.
- Function은 호출 프로그램에 상관없이 stand-alone 테스트가 가능하다.
- Function은 호출시 parameter를 input으로 제공하고, 수행 결과를 output parameter로 반환한다.
- Function group: 유사한 기능의 function을 모아놓은 container.
1) Function module.
- R/3 repository(중앙 라이브러리)에 저장되는 global subroutine. => Global Modulatization
- 구성요소
- Import parameters: Function module에 전달되는 값
- Export parameters: Function module에서 반환되는 값
- Changing parameters: Function module에 전달되어 value가 바뀔수 있는 값.
- Tables: Function module에 전달되고 반환되는 인터널 테이블
- Exceptions: 에러에 대한 정보
2) Function group
Function group 내의 특정 function이 호출되면 호출한 프로그램의 internal session에 호출된 function이 포함된 function group내의 모든 function들이 load된다.
- 다수의 function module이 저장된 container.
- 특정 function 호출 시 해당 function group내의 모든 function이 load되므로 해당 function group내의 모든 function들은 데이터와 프로세스를 공유한다.
- 따라서 이러한 특징은 하나의 function에 의해 다른 function들이 영향을 받을 수 있음을 의미한다.
- Function group이 생성되면 시스템은 자동으로 main program과 include program을 생성한다.
- Main program의 이름: SAPL<fgrp> => SAPL + function group의 이름
- Main program이 포함하는 include program
- L<fgrp>TOP: function pool구문을 포함하고, function group에서 사용가능한 global(전역)변수가 선언된다..
- L<fgrp>UXX: 실제 function module을 포함하는 프로그램으로 XX는 01, 02 등 숫자로 기술된다.
[Function group 생성]
1. [T-code: SE37]
2. Function group 이름 지정
- Z + 모듈명 + 순번
3. Package 지정
4. 생성된 function group
- LZFGT01TOP: ZFGT01 group내의 모든 전역변수가 선언됨
- LZFGT01UXX: ZFGT01 group내 function module 생성시 스크립트가 자동 추가됨
[Function module]
1) Function module 리스트 검색
- Information system이용: 빈칸상태에서 [F4] 입력
- 검색어(STRING_SP)로 시작하는 funciton module 검색: 'STRING_SP*'입력 후 [F4]키 입력
- 검색에 쓰이는 와일드카드(Wild card)
* 임의의 문자열(길이제한 X) + 임의의 문자(길이1) - STRING_SPLIT: 폐기된 함수(Obsolete)임을 의미
- 검색에 쓰이는 와일드카드(Wild card)
2) Function module의 세부내용 확인
- STRING_SPLIT_AT_POSITION 클릭 후 [display] 버튼 클릭
- Attributes 탭
- 해당 function module이 소속된 group, 작성자, 생성일, 패키지 등의 일반 관리정보 조회
- Processing type
-
Regular Function Module 일반적으로 사용되는 module Remote-Enabled Module 동일 시스템 내 비동기 호출(병렬처리), RFC(Remote Function Call)를 위한 module Update Module Database update를 위해 추가 function을 포함하는 module. => SAP Bundling
-
- General data
-
Edit Lock 해당 module을 작성한 개발자 외에 변경을 금지하는 옵션 Global 옵션 선택시 해당 module내의 변수를 function group의 global data로 선언
-
- 그 외 탭
- Import parameter: Function module을 호출한 프로그램에서 전달받는 값
- Export parameter: Function module을 호출한 프로그램으로 전달할 값
- Changing parameter: Function module과 해당 module을 호출한 프로그램 사이 동시에 주고받는 값
- Tables parameter: Function module과 해당 module을 호출한 프로그램 사이 동시에 주고받는 다수의 값(인터널 테이블)
-
Type parameter의 type 지정 키워드 [TYPE | LIKE | TYPE REF TO] Associated Type data type 또는 참조할 특정 필드 Default Value parameter의 초기값 Optional parameter를 선택사항으로 설정 Passing Value parameter 전달 시 메모리를 신규할당한 후 값 복사 - Exceptions: Function module이 실행되는 동안 발생하는 예외
3) Function module 생성
- [T-code: SE37]
import / export parameter, exception 정의 - 생성된 스크립트
- 스크립트 작성 및 활성화([F3])
4) Function module 테스트
- Function module 실행([F8]) 후 import parameter 입력
- Function module 테스트(실행)
5) Function module 호출
- 프로그램 생성 및 Tool bar의 Pattern 클릭, 호출할 함수명 입력
- 입력된 함수의 스크립트가 자동으로 생성된다.
- 해당 함수의 import param은 프로그램에서 exporting에 위치하고, export param은 importing에 위치한다.
- 작성된 스크립트
- IF sy-subrc = 1. => fuction 호출시 i_num2값이 0으로 전달되면 예외처리가 되어 sy-subrc 시스템 변수에 1이 전달된다.
REPORT ZA04_18. DATA gv_result TYPE i. CALL FUNCTION 'ZFM_01' EXPORTING i_num1 = 10 i_num2 = 2 IMPORTING E_RESULT = gv_result EXCEPTIONS DIV_ZERO = 1 OTHERS = 2 . IF sy-subrc = 1. * Implement suitable error handling here WRITE :/ 'You cannot divide by 0'. EXIT. ENDIF. WRITE :/ 'Result: ', gv_result.
[RFC: Remote Function Cal]
Legacy(레거시) 시스템과 SAP R/3 시스템 간의 interfacing(인터페이싱)을 위해서는 R/3 시스템의 function은 RFC여야 한다.
- Legacy의 데이터를 SAP에 전달하거나, SAP의 데이터를 Legacy에 전달하기 위해서는 RFC를 사용한다.
- RFC만으로는 문제해결이 어렵기에 WEBMETHODS를 구현하여 같이 사용한다.
- WEBMETHODS: Legacy와 SAP시스템 간의 인터페이스 역할을 하는 프로그램
- Function의 정의된 Attributes중 processing type 속성값을 Remote-enabled module로 선택하면 해당 function을 RFC로 정의할 수 있다.
- 이후 CALL FUNCTION구문에 DESTINATION을 추가해 연결할 서버를 지정해야한다.
'SAP > Abap' 카테고리의 다른 글
[Internal Table] Internal table (0) 2022.01.19 [Internal Table] Internal table 개념 (0) 2022.01.19 [Modularization] Subroutine (0) 2022.01.17 [Open SQL & Native SQL] Native SQL (0) 2022.01.14 [Open SQL & Native SQL] SQL else (0) 2022.01.14 - Function과 Subroutine의 차이점