Screen 100 PAI
Screen 100의 PAI 전문
MODULE exit_100 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE OK_CODE.
WHEN 'HELLO'.
PERFORM CALL_INSERT_SCREEN.
WHEN 'MODIFY'.
PERFORM CALL_CHANGE_SCREEN.
WHEN 'GOODBYE'.
PERFORM CALL_RET_SCREEN.
WHEN OTHERS.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
MODULE exit_100 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
▪프로그램을 나가고 종료하는 이벤트 수행시킬수 있는 EXIT-COMMAND
▪[CASE문]
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM 혹은 상황에 맞게 LEAVE TO SCREEN 0와 같은 형식으로 선언해주기.
ENDCASE.
OK_CODE를 클리어 해주어야 이후의 수행되는 이벤트에 대해서 영향을 미치지 않는다.
CLEAR OK_CODE.
MODULE user_command_0100 INPUT.
CASE OK_CODE.
WHEN 'HELLO'.
PERFORM CALL_INSERT_SCREEN.
WHEN 'MODIFY'.
PERFORM CALL_CHANGE_SCREEN.
WHEN 'GOODBYE'.
PERFORM CALL_RET_SCREEN.
WHEN OTHERS.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
▪스크린 100번에서 버튼을 눌렀을 때 수행되는 이벤트를 구분지어주는 user_command_100번 부분.
PBO의 STATUS_100번에서 설정한 3개의 아이콘 명을 CASE 구문을 통해서 진행한다.
▪MODULE user_command_0100 INPUT.
->PBO에서 설정한 3개의 아이콘에 대한 설정 부분에 각각의 역할을 집어 넣는 과정.
▪[CASE문]
CASE OK_CODE.
신규 데이터 INSERT 부분
->WHEN 'HELLO'.
PERFORM CALL_INSERT_SCREEN.
기존 데이터 MODIFY 부분
->WHEN 'MODIFY'.
PERFORM CALL_CHANGE_SCREEN.
조직 구성원 퇴직 처리하는 부분
->WHEN 'GOODBYE'.
PERFORM CALL_RET_SCREEN.
->WHEN OTHERS.
ENDCASE.
"OK_CODE를 클리어 해주어야 이후의 수행되는 이벤트에 대해서 영향을 미치지 않음"
CLEAR OK_CODE.
PAI의 각 항목에 대한 PERFORM문
INSERT에 대한 PERFORM문
FORM call_insert_screen .
CLEAR GS_ITAB_0200.
GS_ITAB_0200-STATUS = GC_STATUS_DEFAULT. "'1'".
GS_ITAB_0200-WAERS = GC_WAERS_DEFAULT. "'JPY'".
GS_ITAB_0200-ENTDT = SY-DATUM.
GS_ITAB_0200-MODE = GC_MODE_INSERT.
CALL SCREEN '0200' STARTING AT 5 5.
ENDFORM.
▪신규데이터 작성하는 버튼.
GS_ITAB_0200을 클리어 해주기.
CLEAR GS_ITAB_0200.
▪GS_ITAB_0200을 눌렀을 때 STATUS에 TOP에서 지정한 CONSTANTS를 넣어주기.
->GS_ITAB_0200-STATUS = GC_STATUS_DEFAULT. "'1'".
▪GS_ITAB_0200을 눌렀을 때 WAERS에 TOP에서 지정한 CONSTANTS로 통화를 넣어주기.
->GS_ITAB_0200-WAERS = GC_WAERS_DEFAULT. "'JPY'".
▪GS_ITAB_0200을 눌렀을 때 ENTDT 즉 작성일에 대해서 SY-DATUM 현재 날짜를 넣어주기.
->GS_ITAB_0200-ENTDT = SY-DATUM.
▪GS_ITAB_0200을 눌렀을 때 STATUS에 TOP에서 지정한 CONSTANTS로 INSERT라는 값을 넣어주기.
->GS_ITAB_0200-MODE = GC_MODE_INSERT.
▪200번 스크린 부르기
->CALL SCREEN '0200' STARTING AT 5 5.
MODIFY에 대한 PERFORM문
방법1.
FORM call_change_screen.
CLEAR GS_ITAB_0200.
DATA : LT_ROW TYPE LVC_T_ROID,
LS_ROW TYPE LVC_S_ROID.
CALL METHOD G_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_ROW.
IF LINES( LT_ROW ) = 1.
READ TABLE LT_ROW INTO LS_ROW INDEX 1.
READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.
CLEAR GS_ITAB_0200.
MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.
GS_ITAB_0200-MODE = GC_MODE_UPDATE.
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID.
CALL SCREEN 200 STARTING AT 5 5.
ELSE.
MESSAGE S003.
ENDIF.
ENDFORM call_change_screen.
▪변경하기 위해서는 무엇을 변경할지에 대해서 인식하는 작업이 우선적으로 필요하다.
이를 위해서 GET_SELECTED_ROW라는 메소드를 사용해서 클릭한 그 줄을 가져오는 작업을 진행해야한다.
▪우선적으로 LVC_T_ROID, LVC_S_ROID를 참조하는 데이터 LT_ROW와 LS_ROW를 선언해주어야 한다.
->"GET_SELECTED_ROWS라는 메소드에서 필요한 파라미터는 ET_ROW_NO"이고 이것의 타입 속성은 LVC_T_ROID이다. 이것은 테이블 형식이므로 이를 스트럭쳐 형식으로 구성하려면 LVC_S_ROID를 선언해주어야 한다.
IF LINES( LT_ROW ) = 1. READ TABLE LT_ROW INTO LS_ROW INDEX 1.
▪ 이 구문은 현재 선택한 라인이 한줄이기 때문에 한줄을 선택하면 ROW는 1 / ROW-ID는 선택한 줄의 순서가 반환된다.
예를 들어 3번째 줄을 선택했다면 ROW = 1, ROW-ID는 3이 디버깅되서 나오는 것을 확인할 수 있다.
READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.
▪ LOW정보를 가지고 GT_OUTTAB에 있는 정보를 GS_OUTTAB에 옮김.
▪GS_ITAB에 있는 정보를 다시 200번 스크린의 데이터인 GS_ITAB_0200에서 옮김
MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200. -> "변경화면에 출력할 WA로 데이터 이관"
GS_ITAB_0200-MODE = GC_MODE_UPDATE. "모드에 UPDATE에 해당하는 CONSTANTS 넣어주기"
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID. "INDEX에 ROW-ID 넣어주기"
CALL SCREEN 200 STARTING AT 5 5.
방법2.
FORM call_change_screen.
CLEAR GS_ITAB_0200.
FORM call_change_screen.
CLEAR GS_ITAB_0200.
DATA : LT_ROW TYPE LVC_T_ROID,
LS_ROW TYPE LVC_S_ROID.
CALL METHOD G_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_ROW.
IF LT_ROW IS INITIAL.
MESSAGE S003 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
READ TABLE LT_ROW INTO LS_ROW INDEX 1.
READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.
CLEAR GS_ITAB_0200.
MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.
CALL SCREEN 200 STARTING AT 5 5.
ENDFORM call_change_screen.
▪방법2의 코드를 보면 결과적으로 방법1과 순서의 차이일 뿐 진행하는 업무에서는 크게 차이가 나지 않기 때문에
구문을 확인해보기 바란다.
RETIRE에 대한 PERFORM문
FORM call_ret_screen .
CLEAR GS_ITAB_0200.
DATA : LT_ROW TYPE LVC_T_ROID,
LS_ROW TYPE LVC_S_ROID.
CALL METHOD G_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_ROW.
IF LT_ROW IS INITIAL.
MESSAGE S004 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
READ TABLE LT_ROW INTO LS_ROW INDEX 1.
READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.
CLEAR GS_ITAB_0200.
MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.
GS_ITAB_0200-RETDT = SY-DATUM.
GS_ITAB_0200-STATUS = GC_STATUS_RETIRE.
GS_ITAB_0200-MODE = GC_MODE_RETIRE.
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID.
CALL SCREEN 200 STARTING AT 5 5.
ENDFORM call_ret_screen .
▪기본적인 구조는 UPDATE PERFORM문의 방법 2와 유사하다.
GS_ITAB_0200-RETDT = SY-DATUM. "퇴직일을 현재 날짜로"
GS_ITAB_0200-STATUS = GC_STATUS_RETIRE. "STATUS를 퇴직에 해당하는 CONSTANTS로"
GS_ITAB_0200-MODE = GC_MODE_RETIRE. " MODE에 RETIRE에 해당하는 상수로"
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID. "INDEX에 ROW-ID를 입력해준다"
'SAP ABAP 개발 및 설명 > 인사 마스터만들기' 카테고리의 다른 글
인사마스터 ALV 프로젝트 ver 2 (CLASS문) (0) | 2020.10.02 |
---|---|
인사마스터 ALV 프로젝트 ver 2 (TOP문 , 메인프로그램) (0) | 2020.10.02 |
인사마스터 ALV 프로젝트 ver 1.3 (0) | 2020.09.17 |
인사마스터 ALV 프로젝트 ver 1.1 (0) | 2020.09.12 |
인사마스터 ALV 프로젝트 ver 1. 요구사항 정리 (0) | 2020.08.03 |