1. 매개변수 없이 호출

2. 매개변수 있는 서브루틴

3. CHAING으로 값변경

=> 이때는 에러남! gv_msg 위치가 애매한 것 같다.

 

 

1) 내부 Subroutine 호출

DATA: gv_val  TYPE c LENGTH 10 VALUE 'Enjoy',
      gv_val2 TYPE c LENGTH 10 VALUE 'ABAP',
      gv_val3 TYPE c LENGTH 20.

PERFORM concate_string USING gv_val gv_val2
                       CHANGING gv_val3.

FORM concate_string USING    VALUE(p_val1) VALUE(p_val2)
                    CHANGING VALUE(p_val3).
  CONCATENATE p_val1 p_val2 INTO p_val3 SEPARATED BY space.
  PERFORM write_d USING p_val3.
ENDFORM.

FORM write_d USING VALUE(p_val).
  WRITE: / p_val.
ENDFORM.

=> Enjoy ABAP 출력됨

 

2) 외부 Subroutine 호출

 

방금 구현한 내부 concat_string이라는 함수를 사용하자.

 

=> External CALL이 출력된다..! 대박ㅋㅋ

 

=> 출력 Dynamic CALL

- 외부 프로그램의 서브루틴을 호출할 경우 동적으로 지정할 수도 있다! (내부 프로그램도 같은 형태로 사용가능함)

- 동적구문을 사용할 때는 프로그램 이름과 서브루틴 이름을 반, 드, 시.대문자로 지정해야하며, 예제에서는 translate명령으로 대문자로 변환했다.

 

3) LIST를 이용한 Subroutine 호출

 

=> write가 잘된다.

LIST 를 이용해 subroutine을 출력하는 방식은, 오직 Internal Subroutine에만 가능하다 => 파라미터를 사용할 수 없는 단점이 있음

 

 

 

+ Recent posts