쌓고 쌓다
[ABAP] Subscreen, Tabstrip 본문
Subscreen
Screen Painter에서 위의 아이콘으로 Subscreen Area를 생성할 수 있다.
Layout에 서브스크린 영역을 만들고
Name을 SUB로 작성한다.
이제 Subscreen area에 표시할 스크린을 생성해 주자.
101번 스크린을 표시하고자 만들었다.
Dynpro Type에 Subscreen을 체크해 주자.
100번 스크린 위에 101번 스크린의 확인을 위해 텍스트를 넣어놨다.
이제 PBO에 서브스크린을 표시하는 코드를 작성해야 한다.
subarea : Screen Painter에서 생성한 Subscreen area element의 Name
program_name : 프로그램 ID, 보통 시스템 변수 SY-CPROG를 넣는다.
* SY-CPROG : 현재 프로그램을 호출한 프로그램의 ID
dynpro_number : 표시할 Subscreen 번호
100번과 101번 스크린처럼
같은 프로그램 안에 있는 스크린은 SY-CPROG를 쓰면 된다.
dynpro_number 부분에 sy-dynnr 타입으로 동적으로 화면을 지정할 수도 있다.
100번 스크린의 Flow logic의 PBO에
101번 서브스크린을 호출하는 코드를 작성해 주자.
100번 스크린 위에 101번 스크린 부분이 나온다.
하지만,
PBO만 잘 작성하여 101번 스크린을 표시하면 그만이 아니다.
100번 스크린의 PAI에도 서브스크린을 호출하는 코드를 작성해 주자.
101번 스크린의 PAI는 혼자서 동작할 수 없다.
그래서 100번 스크린에서
CALL SUBSCREEN으로 PAI를 실행해야 한다.
Tabstrip Controls
Element가 많을 때 관련성 있는 Element를 묶어서
각각의 탭 페이지를 구성할 때 사용한다.
Tabstrip을 구현하는 방법으로 2가지가 있다.
Local Scrolling : 탭 페이지 각각마다 Subscreen area를 생성한다.
(탭 페이지를 눌러도 PAI가 실행되지 않는다.)
PAI Scrolling : 탭 페이지 모두가 하나의 Subscreen area를 사용한다.
Local Scrolling
Screen Painter에서 해당 메뉴를 눌러 Tabstrip Control을 추가한다.
Name : TAB_STRIP
TAB TITLE : 생성할 탭 페이지 개수
예시로 TAB_STRIP 이름으로 생성했었다.
Screen Element들은 Include **TOP에 DATA로 선언해 줬으나
TABSTRIP은 CONTROLS로 작성하고 TYPE은 TABSTRIP으로 **TOP에 작성 추가해 주자.
Screen Painter에서 각각의 탭 페이지 버튼을 눌러서
FctCode를 작성하고, FctType을 P로 설정한다.
첫 번째 탭 FctCode는 L_TAB1
두 번째 탭 FctCode는 L_TAB2로 설정했다.
모두 FctType을 P로 해주자.
Screen Painter에서 Subscreen Area를 누른다.
각각의 탭 페이지에 표시할 Subscreen을 생성해 주는 과정이다.
우선, 첫 번째 탭에서 드래그하여 Subscreen을 생성한다.
Name : L_SUB1로 설정한다.
첫번째 탭 페이지 버튼을 더블클릭하면
Dict 탭 페이지에 Ref. Field에 L_SUB1이 들어감을 확인할 수 있다.
마찬가지로 두 번째 탭 페이지에서 Subscreen을 생성한다.
Name : L_SUB2
이제 Subscreen Area에서 보여줄 스크린을 생성할 차례이다.
101번, 102번 스크린을 생성한다.
Dnypro Type에 Subscreen으로 설정해줌을 유의하자.
서브 스크린을 호출하는 구문이다.
100번 스크린 PBO에
100번 스크린에서 Local Scrolling을 위해
101번, 102번 스크린을 호출하는 코드를 작성하자.
물론 PAI에도 서브 스크린의 PAI 처리를 위해 CALL SUBSCREEN을 넣어주자.
PAI Scrolling
Screen Painter에서 Tabstrip Control을 Name : TAB_STRIP2로 생성
Include ***TOP에 CONTROLS로 타입 TABSTRIP을 선언한다.
첫 번째 탭 페이지 버튼을 더블클릭하여
FctCode에 PAI_TAB1을 입력하고 FctType은 None 아무것도 누르지 않는다.
두 번째 탭 페이지 버튼도 마찬가지로 FctCode를 PAI_TAB2로 입력한다.
이번엔 첫 번째 탭 페이지에만 Subscreen area를 생성한다.
Subscreen Area의 Name을 PAI_SUB로 설정한다.
첫번째 탭 페이지 버튼을 더블클릭하여 보면
Ref. Field로 PAI_SUB가 들어가 있지만
두 번째 탭 버튼을 더블클릭해서 보면
Ref. Field가 들어가 있지 않다.
여기에 Subscreen Area Name인
PAI_SUB를 넣어주자.
이전에 각각의 탭 페이지 버튼의 FctCode로
PAI_TAB1, PAI_TAB2를 입력했었다.
이 버튼을 누르면 FctCode가 OK_CODE로 들어가게 된다.
Include - ***TOP에 OK_CODE를 추가해 주고
DATA: OK_CODE TYPE SY-UCOMM,
100번 스크린 PAI의 USER_COMMAND_0100에 위의 코드를 추가해 주자.
탭 페이지 버튼을 누를 때마다 Tabstrip Control의 ACTIVETAB을
해당 탭 페이지 FucCode로 설정한다.
이제 PBO에 ACTIVETAB 값에 따른 화면 출력을 해주자.
첫 번째 탭 페이지에서 103번 Screen을
두 번째 탭 페이지에서 104번 Screen을 보여줄 것이기에
스크린을 생성해 주자.
Dynpro Type을 Subscreen으로 해주자.
Include - ***TOP에 타입 SY-DYNNR로 현재 서브 스크린 번호를 저장할
변수 DYNNR을 선언하자.
PBO에 ACTIVETAB에 따른 변수 DYNNR에 값을 설정하는
"SET_SUBSCREEN" 모듈을 만들어 구현하고
"CALL SUBSCREEN"으로 화면을 보여주자.
TAB_STRIP2의 ACTIVETAB 값에 맞춰
보여줄 스크린 번호를 DYNNR에 넣어주자.
WHEN OTHERS는 초기 탭 페이지 보여줄 설정을 위함이다.
처음에 TAB_STRIP2의 ACTIVETAB에는 아무 값도 없기에
WHEN OTHERS를 통해 초기 설정이 필요하다.
없다면 Next dynpro Error Dump가 발생한다.
'SAP > ABAP' 카테고리의 다른 글
[ABAP] Selection Screen Block, Comment, Line, Tabbed Block (0) | 2025.01.21 |
---|---|
[ABAP] WRITE 기본 문법, SELECTION-OPTIONS (0) | 2025.01.21 |
[ABAP] SELECT-OPTIONS (0) | 2025.01.18 |
[ABAP] WITH HEADER LINE (0) | 2025.01.16 |
[ABAP] SELECT, INTO CORRESPONDING FIELDS OF (0) | 2025.01.15 |