쌓고 쌓다
[ABAP] Module Pool, Screen Program 본문
ABAP Program의 종류가 여러가지가 있는데 일부로
Executable Program(Type 1)과 Module Pool(Type M)이 있다.
Executable Program (Type 1)
이제껏 사용한 1000번 스크린(SELECTION SCREEN)을 사용한 프로그램은
모두 "레포트 프로그래밍"이였다.
SELECTION SCREEN에 입력된 데이터를 가지고
DB Table에 읽어와서 결과 리스트로 데이터를 출력하는 것이다.
이는 데이터베이스에서 조회한 데이터를 뿌려주는 목적의 프로그램이다.
수정 삭제 삽입등은 안된다.
Module Pool (Type M)
스크린 프로그램이다. 위의 Executable Program (Type 1)인 Report Program의 READ뿐만 아니라
생성, 수정, 삭제 기능을 가지는 프로그램이다.
이때 PBO(Process Before Output), PAI(Process After Input) 개념이 있다.
PBO, PAI
PBO Module : 출력을 보내기전에 처리하는 과정의 모듈
PAI : Input을 받은 이후 처리하는 과정의 모듈
처음 프로그램이 실행되면 100번 스크린의 모든 모듈들이 순차적으로 실행된다.
다 끝나면 100번 스크린이 디스플레이 된다.
이벤트와 PBO, PAI
100번 Screen의 Flow Logic을 보면
PROCESS BEFORE OUTPUT : 출력하기전 실행하는 모듈
PROCESS AFTER INPUT : 인풋을 받은 후 처리하는 모듈
위 두가지 처리 프로세스의 모듈을 등록할 수 있다.
100번 디스플레이에 엔더 등의 버튼을 누르는 이벤트가 발생하면
100번 스크린에 AFTER INPUT에 있는 모듈들을 순차적으로 실행하고
다 끝났다면
BEFORE OUTPUT에 있는 모듈들을 순차적으로 실행한다.
이벤트 -> PAI -> PBO 순서로 동작하는 것이다.
이벤트가 발생하면
입력을 받은것을 처리하고
그 결과를 출력하기위한 과정을 거치는 것이다.
Module Pool 생성
레포트 프로그램과 같이 프로그램을 만들때 Z와 Y가 포함되긴하나
SAPM를 붙여 네이밍을 해주어야 한다.
레포트 프로그래밍과 다르게 Create with TOP Include를 체크해줘야한다.
앞에서 작성한 프로그램명에서 SAP를 제외한 부분과 TOP을 붙여 네이밍한다.
일반적으로 첫 스크린 번호는 100이 온다.
Next Dynpro는 Next Screen이다.
해당 스크린에서 어디로 이동할지를 뜻한다.
레포트 프로그램은 바로 실행이 가능했지만
스크린 프로그램은 트랜잭션을 생성해야지 프로그램이 실행된다.
트랜잭션명은 Z나 Y로 시작해야한다.
Start object 부분에
Program and dynpro는 스크린 프로그램에 대해 눌러야하는 옵션이고
Program and selection screen는 레포트 프로그램에 대해 눌러야하는 옵션이다.
Program 부분에 스크린명(프로그램명)이 와야한다.
Screen number는 첫번째 스크린 넘버를 100으로 만들었으므로 100을 입력한다.
스크린 폴더에 100번 스크린을 누르면 Layout 버튼이 있다.
Layout을 설정할 수 있다.
ABAP Dictionary를 이용해서 Input/Ouput 필드를 생성해 사용해보자.
상단에 해당 버튼을 누른다.
sdyn_conn 이름의 Structure를 필드로 사용하고자 한다.
Structure명을 입력하고 Get from Dictionary 클릭.
Input/Output 필드로 사용할 필드를 선택하고 체크 확인을 누르면 된다.
Layout에 해당 Input/Output 필드가 나온다.
현재 화면에서 클라이언트에게 보이는 Airline, Flight Number과 같은
라벨명은 직접 수정이 가능하지만
다음과 같이 이전의 페이지에서 빠르게 변경할 수 있다.
Text의 길이 Short, Medium, Long, Header에 맞춰 변경할 수 있다.
길이에 따른 라벨명은 Data Dictionary에서 조회가 가능하다.
100번 스크린을 더블 클릭하여 Element List 탭에서도 변경이 가능하다.
Input/Output 필드 설정
Input/Output 필드를 더블클릭하여 필드 설정이 가능하다.
SAP memory에 입력 값을 저장하고 가져올 수 있다.
Dict 탭의
Parameter ID는 SAP 메모리에 SET GET에 사용할 ID이다.
SET Parameter는 메모리에 값을 저장할지, GET Parameter는 메모리에서 값을 가져올지이다.
Program 탭에는 입력과 출력을 허용할지를 설정할 수 있으며
required는 값을 필수로 입력해야한다.
Module Pool 예제
메인 모듈인을 더블 클릭하고
INCLUDE의 PBO-Modules, PAI-Modules를 주석 해제하고
각각 더블클릭하여 모듈 폴더를 생성해주자.
Includes에 I01(Input)과 O01(Output)이 생성된다
I01에 인풋을 실행할 모듈 코드를 작성하고
O01에 아웃풋 전에 실행할 모듈 코드를 작성한다.
TOP에는 글로벌 변수를 작성한다.
ABAP Dictionary를 이용하였을때 TABLES로 정의해주고
DATA는 직접 정의할때 사용한다.
TABLE로 정의하면
Dictionary Structures 폴더에 생성된다.
100번 스크린을 더블클릭하여 Flow logic 탭에서
AFTER INPUT에 입력을 처리할
MODULE GET_DATA.를 입력하고 더블클릭하여
GET_DATA 이름으로 모듈을 생성할 수 있다.
GET_DATA는 PAI 모듈이므로 MZSCREEN_F18에 I01에 모듈을 넣어줘야한다.
다른 모듈 폴더에 넣어도 동작하기는하긴 한다.
위의 PAI Modules에서 GET_DATA에 모듈 코드를 작성할 수 있다.
위의 SELECT 구문에서
sdyn_conn-carrid는 input/output 필드의 Name이다.
connid도 마찬가지이다.
Dictionary를 통해 만든 sdyn_conn 의 값이
데이터베이스 spfli의 테이블 컬럼 carrid, connid와 일치하는 값을
wa_spfli에 가져오는 코드이다.
wa_는 work area의 약어이다.
이제 가져온 값들을 wa_spfli에 담았으니
그 값들을 출력해보자.
PBO에 출력하는 모듈 코드를 작성한다.
wa_spfli에 담긴 값을 dictinary를 통해 가져온 sdyn_conn에 넣는 과정이다.
Structure wa_spfli의 값을 sdyn_conn 할당하는 과정은
동일한 이름에 넣으며 Identical names라고 한다.
위의 PBO 모듈을 거쳐 화면에 보여지는 Input/Output 필드에
값들이 넣어짐을 볼 수 있다.
'SAP > ABAP' 카테고리의 다른 글
[ABAP] Internal Table (INSERT, READ, MODIFY, DELETE, LOOP AT) (0) | 2025.01.08 |
---|---|
[ABAP] Local Table Type, Internal Table 선언과 정의 (0) | 2025.01.08 |
[ABAP] Local Structure 선언, ABAP Dictionary (0) | 2025.01.07 |
[ABAP] Global Class, Local Class, Class Builder (0) | 2025.01.06 |