본문 바로가기

ABAP 프로그래밍 개념/ABAP Dynamic Programming(동적 프로그래밍)

6. ABAP 동적 프로그래밍 : Dynamic Procedure Calls

Procedures 은 Dynamic Token을 사용하여 동적으로 호출될 수 있습니다. 예를 들어, 만약 런타임 시에 호출될 필요성이 있는 서브루틴을 결정할 수 있다면, 서브루틴의 이름을 Dynamic Token을 통해 전달할 수 있습니다. 외부의 서브루틴을 호출할 때는, 외부의 프로그램의 이름을 동적으로 전달 할 수 있습니다.

PERFORM (subroutine_name) IN PROGRAM (program_name) IF FOUND.

서브루틴을 동적으로 호출할 때, 만약 서브루틴과 프로그램이 발견되지 않는다면, 런타임 에러가 발생할 것입니다. 런타임 에러를 피하기 위하여 IF FOUND라는 addition을 사용하는 것이 좋습니다.

메소드들은 클래스 이름과 메소드 이름을 Dynamic Token을 전달하여 호출될 수 있습니다. 사실, 메소드의 파라미터들은 PARAMETER-TABLE이라는 addition을 사용하여 제공될 수 있습니다.

CALL METHOD class_name=>method_name PARAMETER-TABLE parameter_table.

예시처럼, 개발과정에서 Method의 파라미터들은 PARAMETER-TABLE이라는 addition을 사용하여 동적으로 전달할 수 있습니다. 여기서, ABAP_PARMBIND_TAB 유형의 인터널 테이블이 사용되어야 합니다. ABAP_PARMBIND_TABL의 Line Type은 세가지 필드 : NAME, KIND, VALUE로 구성되어 있습니다.

NAME 필드는 파라미터 이름을 포함해야 합니다.
KIND 필드는 호출하는 사람의 관점에서의 Exporting, Importing, Returning과 같은 파라미터 유형을 담아야 됩니다.
VALUE 필드는 실페 파라미터의 Reference를 포함해야합니다.

CL_ABAP_OBEJCTDESCR의 상수(Constants)를 사용하여 KIND 필드를 채울 수 있스빈다. PARAMETER_TABLE과 함께, nonclass-based exception(클래스의 Exception으로 다뤄지지 않는 Exception들)들은 EXCEPTION_TABLE이라는 addition을 사용하여 다룰 수 있습니다.

메소드처럼, Function Module를 위한 파라미터들도 PARAMETER-TABLE을 사용하여 동적으로 호출 될 수도 있습니다.  Funtion Module에서 사용될 때의 PARAMETER-TABLE의 차이점은 사용되는 유형이 CLASS 때와 달리 ABAP_FUNC_PARMBIND_TAB을 사용한다는 것입니다.

아래 예시는, Parameter Table을 사용해서 Parameter를 동적으로 전달하는 예시입니다.

DATA: fm_name TYPE STRING,
	  filename TYPE STRING,
	  filetype TYPE C LENGTH 80,
	  text_tab LIKE STANDARD TABLE OF LINE,
	  fleng TYPE I,
	  ptab TYPE abap_func_parmbind_tab,
	  ptab_line LIKE LINE OF ptab,
	  etab TYPE abap_func_excpbind_tab,
	  etab_line LIKE LINE OF etab.

fm_name = 'GUI_DOWNLOAD'.
filename = 'C:\text.txt'.
filetype = 'ASC'.

ptab_line-NAME = 'FILENAME'.
ptab_line-KIND = abap_func_exporting.
GET REFERENCE OF filename INTO ptab_line-VALUE.
INSERT ptab_line INTO TABLE ptab.

ptab_line-NAME = 'FILETYPE'.
ptab_line-KIND = abap_func_exporting.
GET REFERENCE OF filetype INTO ptab_line-VALUE.
INSERT ptab_line INTO TABLE ptab.

ptab_line-NAME = 'DATA_TAB'.
ptab_line-KIND = abap_func_tables.
GET REFERENCE OF text_tab INTO ptab_line-VALUE.
INSERT ptab_line INTO TABLE ptab.

ptab_line-NAME = 'FILELENGTH'.
ptab_line-KIND = abap_func_importing.
GET REFERENCE OF fleng INTO ptab_line-VALUE.
INSERT ptab_line INTO TABLE ptab.

...

etab_line-NAME = 'OTHERS'.
etab_line-VALUE = 10.

INSERT etab_line INTO TABLE etab.

CALL FUNCTION fm_name
 PARAMETER-TABLE
  ptab
 EXCEPTION-TABLE
  etab.

위 에시를 보면, ABAP_FUNC_PARMBIND_TAB유형의 Parameter Table인 PTAB을 정의하였습니다. 이후에 GUI_DOWNLOAD라는 Function Module의 파라미터들을 PTAB이라는 인터널 테이블에 담았습니다.

Function Module은 동적으로 호출되고, Parameter Table은 PARAMETER-TABLE이라는 addtion을 사용하여 전달되었습니다. 또한 ABAP_FUNC_EXCPBIND_TAB 유형으로 정의된 Exception Table인 ETAB을 사용하여 전달하였스빈다.

이 장을 통해서 Procedure를 동적으로 호출하는 과정을 봤습니다. 

반응형