쌓고 쌓다

[ABAP] Screen Element Attribute 변경, Screen System Table 본문

SAP/ABAP

[ABAP] Screen Element Attribute 변경, Screen System Table

승민아 2025. 1. 11. 21:45

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'인 경우 필드 값 변경을 해주면 된다.

 

버튼을 눌렀더니 그룹으로 묶은 필드들이 모두 변경 가능한 필드로 변경이 된다.

Comments