본문 바로가기

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

5. ABAP 동적 프로그래밍 : Dynamic Token Specification

다양한 ABAP 구문과 함께, 괄호안에 Data Object를 사용하여 동적으로 Token으로 개별 Operand들을 구체화할 수 있습니다.

Token이란, ABAP 구문의 구성요소들로, 구문을 나눴을 때의 대상입니다. 예를 들어 Operands, Operators, ABAP Words등이 있습니다.

https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abentoken_glosry.htm

 

token - ABAP Keyword Documentation

 

help.sap.com

 

Data Object의 데이터(내용)은 구문의 Operand로서 사용됩니다. 예를 들어, PERFORM (data_object), 에서 data_object는 PERFORM문에서 실행할 구문을 담을 것이므로, data_object이 content는 character type의 Data Object일 것 입니다.

이러한 구문은 런타임 시에만 구문에 에러가 있는지 확인 될 것이고, 에러가 있다면 Runtime Error가 발생할 것입니다. 이러한 이유로, Excepction을 Catch 구문으로 잡는 것은 Dynamic Token을 사용할 때 굉장히 중요한 작업입니다.

Operand의 동적인 할당은 보안 위험을 일으킬 수 있으며, 특히 Operand가 SAP Program 외부에서 전달될 때 더 위험합니다. 이러한 이유로, CL_ABAP_DYN_PRG 클래스는 이 구문 사요요하기 전에 Operand를 체크하는데 사용됩니다. 

동적으로 구체화되는 Operand의 예시는 아래와 같습니다.

1) SUBMIT (data_obejct)
이 구문을 사용하면, 동적으로 프로그램 이름을 전달합니다. 아래 코드는 SUBMIT 구문에 동적인 Token을 사용하는 예시입니다.

DATA lv_progname TYPE progname.

SELECT SINGLE progname
FROM zprogdir
INTO lv_progname
WHERE ...

SUBMIT (lv_progname).
2) WRITE (data_obejct) TO...
이 구문을 통해, 형식 옵션을 동적으로 전달할 수 있습니다. 예를 들어, 아래 코드를 통해, DATE 캐릭터 필드에 SY-DATUM 이라는 시스템의 날짜 필드의 형식을 전달 할 수 있습니다.

WRITE 구문이 실행되고 나면, DATE 필드의 내용(담고 있는 데이터)는 SY-DATUM이 형식을 가지고 있을 것입니다.

DATA format_date TYPE c LENGTH 8 VALUE 'SY-DATUM'.
DATA date TYPE c LENGTH 10.

date = sy-datum.
WRITE (format_date) TO date.
3) CALL FUNCTION
CALL FUNTION 구문은 동적 호출을 지원합니다. Data Object 또는 Literals를 사용하여 Function Module 이름을 전달할 수 있습니다.

DATA form_name TYPE C LENGTH 30 VALUE 'ZDEMO_FM'.

CALL FUNCTION (form_name)
 EXPORTING
  .....
 IMPORTING
  .....
4) CALL TRANSACTION
CALL FUNTION 과 같이, CALL TRANSACTION 구문은 Dynamic CALL 을 지원합니다. Transcation의 이름은 오직 동적으로 전달되는데 CALL FUNCTION과 같이 Data Obejct나 Literals를 사용합니다.

DATA tcode TYPE C LENGTH 30 VALUE 'MM03'.
CALL TRANSACTION (tcode).
5) ASSIGN (daba_object)
필드를 필드 심볼에 동적으로 할당합니다.

DATA field TYPE C LENGTH 30 VALUE 'V_MATNR'.
FIELD-SYMBOLS TYPE ANY.

ASSIGN (field) TO <fs>.
6) READ, MODIFY, DELETE, SORT
테이블 필드를 동적으로 구체화 할 수 있습니다.

DATA field TYPE C LENGTH 30 VALUE 'MATNR'.
SORT itab BY (field).
7) CLASSES
클래스의 속성을 동적으로 접근할 수 있습니다. 인스턴스 속성을 위해서, 동적으로 속성이름을 구체화 합니다.

ASSIGN object_reference ->(attribute_name) TO <fs>.

스태틱 속성을 위해서, 클래스 이름을 동적으로 구체화 할 수도 있습니다.

ASSIGN (class_name)=>(attribute_name) TO <fs>.

operands를 떠나서, OPEN SQL 구문의 WHERE 절은 동적으로 구성될 수 있습니다. WHERE 절과 함께, 완전한 구문은 어떠한 제한없이 동적으로 구성될 수 있습니다. 

반응형