Subscreen 구현 방법은 3가지 절차로 이루어져있습니다.
1. Subscreen 생성하기
1-1) 코딩으로 생성
1-2) 직접 생성
2. Subscreen 출력할곳 그리기
3. Subscreen 호출하기
★★ 참조 3개
1. Subscreen 생성하기
1-1) 코딩으로 생성 ( Selection-Screen을 이용)
SELECTION-SCREEN BEGIN OF SCREEN 1004 AS SUBSCREEN.
SELECTION-SCREEN COMMENT 1(15) text-t01 FOR FIELD p_matnr. (text-t01 = '자재')
PARAMETER: p_matnr LIKE mara-matnr.
SELECTION-SCREEN END OF SCREEN 1004.
1-2) 직접 생성 ( Screen생성을 한후 [SubScreen]으로 사용하는 방법.)
1. SE80에서 왼쪽 Object 에서 화면 클릭 후 create 후 subscreen 체크

2. 서브스크린 레이아웃에서 변수를 생성한다.

3. TOP 부분에 화면과 동일한 이름의 변수를 선언한다.
DATA: gv_matnr LIKE mara-matnr.
** 1004스크린과 다르게 여기서 변수를 선언하지 않으면
화면에서 입력한값을 변수로 받아 사용할수가 없다.
** 1-1, 1-2 로 생성하면 아래와 같이 서브스크린이 생성된다.

2. Subscreen 출력할곳 그리기
메인 screen에서 subscreen 사용할곳을 레이아웃에서 그려준다.
: 서브화면 영역 클릭 -> 이름 'SUB01'

3. Subscreen 호출하기
메인 스크린 PBO, PAI 에서 호출
PROCESS BEFORE OUTPUT.
MODULE init_alv.
CALL SUBSCREEN sub01 INCLUDING sy-repid '1004' 또는 '0110'.
=> 서브스크린의 PBO로 넘어간다.
PROCESS AFTER INPUT.
MODULE user_command_0100.
CALL SCREEN sub01. => 서브스크린의 PAI로 넘어간다.
★★1. 화면 커서
1번에서 1-1로 서브스크린을 생성했을 경우(SCREEN 1004)
화면 커서가 자동으로 마지막 커서에 위치해 있다.
왜냐하면 Selection-Screen에 parameter, select-option등을 사용해서 만든 스크린에서는
변수간의 커서 위치를 처리해 주는 코드도 자동으로 만들어지기 때문이다.
반면 1번에서 1-2로 서브스크린을 생성했을 경우(SCREEN 110) 화면 커서를 인식하지못한다.
그래서 메인 화면(100)과 서브스크린에(100) GET. SET CURSOR 부분을 직접 추가해주어야한다.
100번 화면
PROCESS BEFORE OUTPUT.
MODULE set_cursor.
MODULE init_alv.
CALL SUBSCREEN sub01 INCLUDING sy-repid '0110'.
PROCESS AFTER INPUT.
MODULE get_cursor.
MODULE user_command_0100.
CALL SCREEN sub01.
110번 화면
PROCESS BEFORE OUTPUT.
MODULE set_cursor.
PROCESS AFTER INPUT.
MODULE get_cursor.
MODULE set_cursor OUTPUT.
IF gv_fname IS NOT INITIAL.
SET CURSOR FIELD gv_fname.
ENDIF.
ENDMODULE.
MODULE get_cursor INPUT.
IF gv_fname IS INITIAL.
GET CURSOR FIELD gv_fname.
ENDIF.
ENDMODULE.
==> 100,110 스크린의 PBO, PAI 흐름 순서는 직접 디버깅해보면서 확인해보길 바란다.
★★2. 서브스크린 동적 호출
한개의 서브스크린 영역에 여러개의 서브스크린을 동적으로 사용할때가 있다.
DATA: gv_dynnr TYPE sydynnr.
IF ra01 = 'X'.
gv_dynnr = '1004'.
ELSE.
gv_dynnr = '0110'.
ENDIF.
메인화면에서 서브스크린 호출하는 부분
CALL SUBSCREEN sub01 INCLUDING sy-repid gv_dynnr.
**gv_dynnr 이 빈값이면 덤프남.
★★3. 서브스크린 field(p_matnr)에 대한 Validiation 처리
PAI에서 아래에서 선택하여 Validation을 처리할수 있다.
1. FIELD gv_matnr MODULE check_matnr.
: 빈값/동일한 값에서 엔터치더라도 무조건 check_matnr을 타게된다.
2. FIELD gv_matnr MODULE check_matnr ON REQUEST .
: 데이터가 변경됐을경우 적용된다
예를 들어, gv_matnr = 'aaa' 였다가 지워서 빈값으로 엔터쳤을때는 타지만
빈값에서 또 엔터를 쳤을경우에는 타지않는다.
3. FIELD gv_matnr MODULE check_matnr ON INPUT.
: 공백일때는 적용되지않고 값이 있는 경우에만 적용된다. (동일한 값이어도 적용)
'SCREEN' 카테고리의 다른 글
SelectionScreen 에 function key 추가 (0) | 2022.01.13 |
---|---|
Selection screen에 아이콘/글자 추가 (0) | 2022.01.12 |
조회화면 Possible Entry, Search Help (0) | 2021.07.12 |