쌓고 쌓다
[ABAP] Screen Element Attribute 변경, Screen System Table 본문
Screen Element들의 static attribute는
PBO 이벤트전에 스크린 시스템 테이블에 복사된다.
Screen System Table은 다음과 같은 형태이다.
NAME | GROUP1 | GROUP2 | GROUP2 | GROUP | LENGTH | INPUT | OUTPUT | REQUIRED | ... |
FIELD1 | SEL | 20 | 1 | 1 | 0 |
Screen Table의 Line Type은 SCREEN이다.
Element Name이 FIELD1인 요소의 속성들의 정보들을 저장하고 있다.
그래서 우리는 PBO 모듈에서
Screen Elemen의 Attribute를 동적으로 변경할 수 있다.
위의 Line Type에 보이듯 INPUT, OUTPUT 필드를 이용하는것이다.
SCREEN-INPUT = 0 과 같이 변경한다.
PBO에서 위의 구문으로 스크린 요소의 값을 변경할 수 있다.
MODIFY SCREEN을 루프 안에 넣어 시스템 테이블의 값을 변경할 수 있다.
테이블이지만 READ TABLE SCREEN은 지원하지 않는다.
Screen Element를 찾기위해서 다음과 같이 NAME과 GROUP을 사용할 수 있다.
SCREEN-NAME, SCREEN-GROUP1 to SCREEN-GROUP4
그룹명으로 최대 3개의 Character를 넣어줄 수 있다.
단일 스크린 요소 변경
현재 라벨명으로 Total 필드가 수정이 불가능한 상태이다.
DISPLAY/CHANGE 버튼을 누르면
이 필드의 수정이 가능하게 변경해주는 기능을 만들어 보자.
Layout에서 버튼을 생성하고 FctCode 부분에 평션명 "CHG"를 입력한다.
이제 이 펑션 코드를 읽어올 변수 설정이 필요하다.
100번 스크린에 해당 펑션코드를 등록했고 이 스크린에서 동작하길 원한다.
100번 스크린의 Element list에 OK_CODE를 추가해준다.
Includes에 Global 변수를 선언하는 TOP 파일에
OK_CODE를 SY-UCOMM 타입으로 선언한다.
OK_CODE는 펑션 코드를 위한 변수이며
SY-UCOMM은 시스템 변수로 선택된 ICON의 FUNCTION CODE를 할당해준다.
우리가 만든 버튼에 CHG 펑션 코드를 입력해줬기에
버튼을 누르면 OK_CODE에 CHG 값이 들어가는 것이다.
GV_MODE는 현재 모드 DISPLAY인지 CHANGE인지를 저장하기위한 변수이다.
PBO에서 이 값을 읽어 상태를 변경할 것 이다.
PAI의 USER_COMMAND_0100에 OK_CODE로 CASE문을 작성해주자.
OK_CODE에 할당된 펑션명이 CHG이면 WHEN 'CHG'를 탄다.
현재 모드의 상태 변수인 GV_MODE 값이 초기값이라면
기본 DISPLAY 모드에서 CHANGE 모드로 변경을 누른것이므로
GV_MODE 모드를 C로 한다.
초기값이 아니라면 CHANGE 모드인 상태에서 DISPLAY 모드로 변경이므로
CLEAR로 값을 초기값으로 날려준다.
이제 GV_MODE 값으로 PBO에서 화면에 뿌려줄 상태를 변경해보자.
PBO에서 스크린 값의 변경을 할 수 있다고 했다.
PBO에 화면 변환을 위한 MODULE을 추가하자.
GV_MODE의 값이 C라면
LOOP AT SCREEN으로 스크린을 돌며
Total 필드의 NAME을 찾고 해당 INPUT 필드를 1로 입력이 가능하게 해주자.
그리고 LOOP AT SCREEN 반복문 안에 MODIFY SCREEN.을 꼭 넣어서
스크린 테이블의 값을 변경해주자.
DISPLAY/CHANGE 버튼이 잘 동작한다.
그룹으로 스크린 값 변경
스크린에서 Layout을 눌러 Screen Painter에서
Element를 더블클릭하고 설정에서 Groups 부분에 그룹명을 지정해주자.
그룹 칸 순서대로 GROUP1 GROUP2 ... GROUP4이다.
GROUP1 ... GROUP4는 이전에 스크린 시스템 테이블에 존재하던 컬럼(필드)와 동일하다.
이 그룹명을 통해 스크린 테이블에서 그룹이 일치하면 값을 변경할 것이다.
PBO 모듈에 Screen 변경을 위한 모듈에
SCREEN-GROUP1의 이름이 'AIR'인 경우 필드 값 변경을 해주면 된다.
버튼을 눌렀더니 그룹으로 묶은 필드들이 모두 변경 가능한 필드로 변경이 된다.
'SAP > ABAP' 카테고리의 다른 글
[ABAP] GUI TITLE, GUI STATUS (0) | 2025.01.12 |
---|---|
[ABAP] Screen 이동 (SET SCREEN, CALL SCREEN) (0) | 2025.01.12 |
[ABAP] Module Pool, Screen Program (0) | 2025.01.09 |
[ABAP] Internal Table (INSERT, READ, MODIFY, DELETE, LOOP AT) (0) | 2025.01.08 |
[ABAP] Local Table Type, Internal Table 선언과 정의 (0) | 2025.01.08 |