7. 동적 ABAP 프로그래밍: 동적 프로그램 생성

1~6번 항목에서 이미 논의한 ABAP 프로그램의 동적 프로그래밍 개념에 따르면 ABAP 프로그램도 동적으로 실행될 수 있습니다. 동적 프로그램 작성은 다른 동적 프로그래밍 기술이 요구 사항을 충족하지 않는 경우 최후의 수단으로 사용해야 합니다.

숙련된 개발자를 대상으로 하는 동적 프로그램 생성은 수행하는 작업을 완전히 이해하지 못하는 경우 심각한 문제가 발생할 수 있다는 경고와 함께 사용됩니다. 동적으로 생성된 프로그램의 단점은 일반 프로그램처럼 테스트할 수 없고 심각한 보안 위험을 포함할 수 있다는 것입니다.

동시에 생성되는 두 가지 유형의 프로그램이 있습니다.

1. 전환 프로그램
임시 프로그램은 내부 세션 저장소에 임시로 상주하며 현재 내부 세션에서만 호출할 수 있습니다. GENEREATE SUBROUTINE POOL itab NAME prog 구문은 임시 서브루틴 풀 프로그램을 만드는 데 사용됩니다. 내부 테이블 itab은 문자 유형이어야 하며 프로그램의 소스 코드를 포함해야 합니다. 변수 prog에는 액세스할 프로그램의 이름이 포함되어야 합니다.

생성된 서브루틴 풀 프로그램에는 프로그램 외부에서 액세스할 수 있는 로컬 클래스 및 서브루틴이 포함될 수 있습니다. 프로그램의 소스 코드에 구문 오류가 있으면 프로그램이 빌드되지 않습니다.

DATA: it_source TYPE TABLE OF string,
      program TYPE string ,
	  mesg TYPE string.

APPEND 'PROGRAM.' TO it_source.
APPEND 'FORM subr.' TO it_source.
APPEND 'WRITE / ''This is dynamic subroutine''.' TO it_source.
APPEND 'ENDFORM.' TO it_source.

GENERATE SUBROUTINE POOL it_source NAME program MESSAGE mesg.
 
 IF sy-subrc = 0.
  PERFORM subr IN PROGRAM (PROGRAM).
 ENDIF.

위의 예제를 보면 임시 서브루틴 풀 프로그램을 생성한 소스 코드를 볼 수 있습니다. 내부 테이블 IT_SOURCE는 서브루틴 풀 프로그램의 소스 코드로 생성되었으며 프로그램은 GENERATE SUBROUTINE POOL 문으로 실행되었습니다.

2. 영구 프로그램

영구 프로그램은 저장소에 영구적으로 존재하며 일반적으로 생성된 다른 프로그램처럼 호출할 수 있습니다. 구문 INSERT REPORT prog FROM itab은 영구 프로그램을 생성합니다. itab은 프로그램의 소스 코드를 포함하고 변수 prog는 프로그램의 이름을 포함합니다.

동일한 이름을 가진 기존 프로그램이 경고 없이 덮어쓰여지므로 이 구문은 주의해서 사용해야 합니다. 기존 프로그램을 덮어쓰지 않으려면 프로그램 이름이 이미 존재하는지 TRDIR 테이블을 확인하는 것이 좋습니다.

DATA: it_source TYPE TABLE OF rssource-line.

APPEND 'REPORT ZDYN_EXAMPLE.' TO it_source.
APPEND 'WRITE / ''This program is generated dynamically''.' TO it_source.

INSERT REPORT 'ZDYN_EXAMPLE' FROM it_source.

위의 예를 보면 프로그램을 동적으로 실행한 예입니다. IT_SOURCE라는 내부 테이블을 한 줄씩 소스 코드로 채우고 INSERT REPORT 키워드로 프로그램을 실행했습니다.

프로그램을 동적으로 생성하려면 정적으로 프로그램을 생성하고 이 프로그램을 템플릿으로 사용하여 새로운 프로그램을 생성하는 것이 좋습니다.

READ REPORT INTO itab 구문을 사용하여 시스템에서 프로그램의 소스 코드를 읽을 수 있습니다.

광고 클릭과 기사에 대한 댓글은 큰 관심을 받고 있으며 더 많은 도움이 됩니다. 감사해요