그리드에서 수정가능한 필드들을 어떻게 처리할 것인가.
방법1. 필드 카탈로그에서 수정
FORM set_fieldcatalog.
"T-CODE에 따라서 열고닫기 위해 사용하는 구문."
DATA : LT_CODE TYPE C.
IF SY-TCODE = 'ZR08_0010_D'.
LT_CODE = ''.
ELSE.
LT_CODE = 'X'.
ENDIF.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'STAT'.
GS_FIELDCAT-COLTEXT = '상태'.
GS_FIELDCAT-KEY = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'EMPNO'.
GS_FIELDCAT-COLTEXT = '사원번호'.
GS_FIELDCAT-KEY = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'NAME'.
GS_FIELDCAT-COLTEXT = '이름'.
GS_FIELDCAT-EDIT = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨."
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'DEPT'.
GS_FIELDCAT-COLTEXT = '부서'.
GS_FIELDCAT-REF_TABLE = 'ZT00_0010'.
GS_FIELDCAT-EDIT = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨."
APPEND GS_FIELDCAT TO GT_FIELDCAT.
이런식으로 기존 필드카탈로그에서 EDIT = 'X'설정을 EDIT = LT_CODE로 변화시켜서 코딩하면 알아서 EDIT을 T-CODE에 따라서 변화시켜준다.
FORM set_fieldcatalog.
"T-CODE에 따라서 열고닫기 위해 사용하는 구문."
DATA : LT_CODE TYPE C.
IF SY-TCODE = 'ZR08_0010_D'.
LT_CODE = ''.
ELSE.
LT_CODE = 'X'.
ENDIF.
"T-CODE가 '_D'라면 LT_CODE를 ''(빈칸으로) /
"T-CODE가 그렇지 않은 경우에는 'X'로 제시한다. -> 수정이 가능한게 'X'
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'STAT'.
GS_FIELDCAT-COLTEXT = '상태'.
GS_FIELDCAT-KEY = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'EMPNO'.
GS_FIELDCAT-COLTEXT = '사원번호'.
GS_FIELDCAT-KEY = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'NAME'.
GS_FIELDCAT-COLTEXT = '이름'.
GS_FIELDCAT-EDIT = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'DEPT'.
GS_FIELDCAT-COLTEXT = '부서'.
GS_FIELDCAT-REF_TABLE = 'ZT00_0010'.
GS_FIELDCAT-EDIT = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
이런식으로 기존 필드카탈로그에서 EDIT = 'X'설정을 EDIT = LT_CODE로 변화시켜서 코딩하면 알아서 EDIT을 T-CODE에 따라서 변화시켜준다.
방법2. PBO의 SETTING ALV에서 수정
FORM setting_alv_100 .
IF G_GRID IS INITIAL.
*인스턴스 생성
PERFORM CREATE_OBJECT.
*출력필드 생성
PERFORM SET_FIELDCATALOG.
*레이아웃 세팅
PERFORM SET_LAYOUT.
*이벤트 등록
PERFORM SET_EVENT.
*ALV 호출
PERFORM DISPLAY_ALV.
ELSE.
*G_GRID가 초기값이 아닐 경우에는 REFRESH를 해주어라"
PERFORM REFRESH_DATA.
ENDIF.
*-------------------필드 카탈로그에서 제어될수도 있고 아래 구문처럼 수행해주어도됨----------------------------"
DATA : LV_INPUT TYPE INT4. "-> TOP에 선언해주기 또는 서브루틴 최상단에 선언해주기"
IF SY-TCODE = 'ZR08_0010_D'.
LV_INPUT = 0. "닫기"
ELSE.
LV_INPUT = 1. "열기"
ENDIF.
CALL METHOD G_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = LV_INPUT. "티코드에 따라서 열고닫기를 제어하는 METHOD를 실행하기.
FORM setting_alv_100 .
IF G_GRID IS INITIAL.
*인스턴스 생성
PERFORM CREATE_OBJECT.
*출력필드 생성
PERFORM SET_FIELDCATALOG.
*레이아웃 세팅
PERFORM SET_LAYOUT.
*이벤트 등록
PERFORM SET_EVENT.
*ALV 호출
PERFORM DISPLAY_ALV.
ELSE.
*G_GRID가 초기값이 아닐 경우에는 REFRESH를 해주어라"
PERFORM REFRESH_DATA.
ENDIF.
*-------------------필드 카탈로그에서 제어될수도 있고 아래 구문처럼 수행해주어도됨----------------------------"
DATA : LV_INPUT TYPE INT4. "-> TOP에 선언해주기 또는 서브루틴 최상단에 선언해주기"
IF SY-TCODE = 'ZR08_0010_D'.
LV_INPUT = 0. "닫기"
ELSE.
LV_INPUT = 1. "열기"
ENDIF.
CALL METHOD G_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = LV_INPUT. "티코드에 따라서 열고닫기를 제어하는 METHOD를 실행하기.
PBO 설정
<T-CODE 생성 이전 구문>
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
<T-CODE 생성 이후 구문>
MODULE status_0100 OUTPUT.
"만약 조회모드이면 저장버튼 보이지 않게(T-CODE : ZR08_0010_D) -> 이것은 시스템 변수에 들어있음.
IF SY-TCODE = 'ZR08_0010_D'.
APPEND 'SAVE' TO GT_EXCLUDE.
ENDIF.
SET PF-STATUS '0100' EXCLUDING GT_EXCLUDE.
"EXCLUDING 인터널 테이블을 하면 그것이 사라짐. : TOP문에서 선언해줄것.
SET TITLEBAR '0100'.
ENDMODULE.
<T-CODE 생성 이전 구문>
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
<T-CODE 생성 이후 구문>
MODULE status_0100 OUTPUT.
"만약 조회모드이면 저장버튼 보이지 않게(T-CODE : ZR08_0010_D) -> 이것은 시스템 변수에 들어있음.
IF SY-TCODE = 'ZR08_0010_D'.
APPEND 'SAVE' TO GT_EXCLUDE.
ENDIF.
SET PF-STATUS '0100' EXCLUDING GT_EXCLUDE.
"EXCLUDING 인터널 테이블을 하면 그것이 사라짐. : TOP문에서 선언해줄것.
SET TITLEBAR '0100'.
ENDMODULE.
'SAP ABAP 개발 및 설명 > 인사 마스터만들기' 카테고리의 다른 글
인사마스터 ALV 프로젝트 ver 2 (PAI) (0) | 2020.10.10 |
---|---|
인사마스터 ALV 프로젝트 ver 2 (PBO) (0) | 2020.10.09 |
인사마스터 ALV 프로젝트 ver 2 (CLASS문) (0) | 2020.10.02 |
인사마스터 ALV 프로젝트 ver 2 (TOP문 , 메인프로그램) (0) | 2020.10.02 |
인사마스터 ALV 프로젝트 ver 1.3 (0) | 2020.09.17 |