다양한 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
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 절과 함께, 완전한 구문은 어떠한 제한없이 동적으로 구성될 수 있습니다.
'ABAP 프로그래밍 개념 > ABAP Dynamic Programming(동적 프로그래밍)' 카테고리의 다른 글
7. ABAP 동적 프로그래밍 : Dynamic Program Generation (0) | 2023.03.19 |
---|---|
6. ABAP 동적 프로그래밍 : Dynamic Procedure Calls (0) | 2023.03.19 |
4. ABAP 동적 프로그래밍 : Runtime Type Services(런타임 유형 서비스) (2) | 2023.03.16 |
3.ABAP 동적 프로그래밍 : Data References (0) | 2023.03.15 |
2.ABAP 동적 프로그래밍 : 필드 심볼(Field Symbol) 2 (1) | 2023.03.10 |