Subroutine
- Form으로 시작하여 END FORM으로 종료되는 구문 스크립트의 모듈화 재사용 구조화르 주목적으로 한다.
ABAP 프로그램에서는 Perform 구문을 이용한 서브루튼으로 유사한 기능을 제공
Perform 구문으로 서브루틴을 호출
Perform Naming Rule 동사 + 목적어 형태로 설정
Subroutine 파라미터
- 파라미터 서브루틴을 호출하는 구문과 호출받는 구문사이에 주고 받는 값을 의미
using과 changing 구문으로 파라미터를 주고 받게된다.
Call by value |
넘겨주는 변수와 받는 변수가 물리적으로 다른 메모리영역 |
Call by Reference |
물리적으로 같은 메모리 여역을 공유하여 넘겨주며 값은 주소 |
Call by Value and Result |
변수의 값을 넘겨주고 받는 구문에서 작업을 성공적으로 수행시 변경된 값을 되돌려준다. |
Call by Value
- 예시
DATA : GV_VAL TYPE C LENGTH 20 VALUE 'TEST'.
Perform call USING GV_VAL.
FORM CALL USING P_VAL
WRITE P_VAL.
ENDFORM.
새로운 메모리에 값을 복사하여 값을 전달받느다.
Call by Reference
- Changing 키워드 사용시 서브루틴에서 전달된 값이 변경이된다.
DATA : gv_val TYPE c LENGTH 30 VALUE ’ Call by reference Test ’ .
WRITE / gv_val. => Call by reference Test
PERFORM call_byvref CHANGING gv_val.
WRITE / gv_val. => Value is changed
FORM call_byvref CHANGING p_val.
p_val = ’ Value is changed ’ .
ENDFORM.
Call by Value and Result
- Changing
DATA : gv_val1 TYPE i VALUE 2.
DATA : gv_va12 TYPE i VALUE 3.
DATA : gv_sum TYPE i.
PERFORM sum_data USING gv_val1 gv_va12
CHANGING gv_sum.
WRITE : / ’ Result is : ’ , GV_SUM.
FORM sum data USING value(p_val1)
value(p_va12)
CHANGING value(p_sum) .
p_sum = p_val1 + p_val2.
ENDFORM.
파라미터와 구조체
DATA : BEGIN OF GS_STR,
COL1 VALUE 'A',
COL2 VALUE 'B',
END OF gs_str.
PERFORM write_data USING gs_str.
FORM write_data USING ps_str STRUCTURE gs_str.
WRITE: ps_str-coll , ps_str-co12.
ENDFORM.
- 구조체를 파라미터로 전달 시 타입을 명시적으로 지정 안할 시 에러 발생
- 필드 심볼로도 가능