SAP/Abap

[Modularization] Function

i009727 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)임을 의미

 

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을 추가해 연결할 서버를 지정해야한다.