Search
🤔

11. ABAP EXCEL 프로그램 디버깅3

ABAP EXCEL 프로그램3

P_FILE 도움말 만드는 쪽에 디버깅을 걸어서 본다.

객체 생성 및 메서드 호출

CREATE OBJECT OBJFILE.: 객체 OBJFILE 생성.
OBJFILE->GET_TEMP_DIRECTORY: 객체의 메서드를 호출하여 임시 디렉토리 경로를 가져온다.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG: CL_GUI_FRONTEND_SERVICES 클래스의 메서드를 사용하여 파일 열기 대화 상자를 호출한다.
CHANGING 파라미터
FILE_TABLE: 선택된 파일 경로를 저장.
RC: 읽어온 파일 개수를 반환.

이벤트 처리: START-OF-SELECTION과 END-OF-SELECTION

1.
START-OF-SELECTION
프로그램 시작 시 실행.
데이터 취합 로직 배치.
조건에 따라 다음과 같이 분기:
r1: 파일 업로드 및 데이터 처리 로직.
r2: 데이터 조회.
r3: 데이터 삭제.
IF r1 = 'X'. PERFORM CHECK_BEFORE_PROCESS. PERFORM UPLOAD_FROM_EXCEL. PERFORM GET_DATA. ELSEIF r2 = 'X'. PERFORM GET_NEEDED_DATA. ELSEIF r3 = 'X'. PERFORM DEL_DATA. ENDIF.
ABAP
복사
2.
END-OF-SELECTION
선택 종료 후 출력 로직 실행.
데이터 출력 스크린 호출 (CALL SCREEN).
데이터 존재 여부에 따라 메시지 출력 가능.

스크린 플로우 로직 및 이벤트 처리

PBO (Process Before Output):
화면 출력 전에 실행.
모듈 호출 예제
MODULE STATUS_0100. MODULE SET_ALV_0100.
ABAP
복사
PAI (Process After Input)
사용자 입력 후 실행.
버튼 이벤트 처리
MODULE USER_COMMAND_0100. MODULE SAVE_DATA. MODULE EDIT_DATA.
ABAP
복사

ALV (ABAP List Viewer) 설정

1.
필드 카탈로그 정의
DEFINE _FCAT 매크로를 사용하여 필드 정의.
_FCAT: 'ZSTATUS' '상태' 'X' '' '3' '', 'MANDT' '클라이언트' 'X' '' '5' '', 'CARRID' '아이디' 'X' '' '5' ''.
ABAP
복사
2.
레이아웃 설정
GS_LAYOUT를 통해 행 강조, 최적화, 선택 모드 정의.
GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-CWIDTH_OPT = 'A'. GS_LAYOUT-SEL_MODE = 'D'.
ABAP
복사
3.
ALV 출력 메서드 호출
SET_TABLE_FOR_FIRST_DISPLAY를 사용하여 데이터 및 필드 카탈로그 출력.
CALL METHOD GO_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = GS_LAYOUT CHANGING IT_OUTTAB = GT_ZSC IT_FIELDCATALOG = GT_FCAT.
ABAP
복사

더블 클릭 이벤트 처리

SET HANDLER를 사용하여 더블 클릭 이벤트 핸들링.
CREATE OBJECT g_event_receiver. SET HANDLER g_event_receiver->handle_double_click FOR GO_GRID.
ABAP
복사

1. 파일 업로드 및 변환 처리

1.
GUI_UPLOAD
데이터를 SAP 시스템으로 업로드하기 위해 사용.
EXPORTING 파라미터
filename: 업로드할 파일 경로 (예: lv_filename).
filetype: 파일 타입 지정 ('BIN' 또는 'ASC').
IMPORTING 파라미터
filelength: 파일 크기(문자 개수).
header: 엑셀 구조와 관련.
TABLES 파라미터
data_tab: 업로드된 데이터를 담을 테이블 (예: lt_records).
2.
SCMS_BINARY_TO_XSTRING
바이너리 데이터를 XSTRING 형태로 변환.
주요 파라미터
input_length: 변환할 데이터 길이.
buffer: 변환된 결과 (XSTRING 데이터).

2. 엑셀 데이터 핸들링

cl_fdt_xl_spreadsheet 클래스 사용
NEW 키워드를 통해 엑셀 파일 로드
lo_excel_ref = NEW cl_fdt_xl_spreadsheet( document_name = lv_filename xdocument = lv_headerxstring ).
ABAP
복사
메서드 호출:
get_worksheet_names: 시트 이름 목록 반환.
get_itab_from_worksheet: 특정 시트 데이터를 내부 테이블로 변환.
필드 심볼로 데이터 참조
필드 심볼 선언
FIELD-SYMBOLS: <gt_data> TYPE STANDARD TABLE.
ABAP
복사
동적 데이터 참조
ASSIGN lo_data_ref->* TO <gt_data>.
ABAP
복사

3. 데이터 검증 및 처리

MOVE-CORRESPONDING
동일한 구조의 데이터를 쉽게 이동.
사용 예
MOVE-CORRESPONDING gs_excel TO gs_zsc.
ABAP
복사
중복 데이터 검증
READ TABLEBINARY SEARCH를 활용
이진 검색은 테이블이 정렬되어 있어야 함.
중복된 데이터에 대해 에러 처리
IF sy-subrc = 0. gs_zsc-zstatus = ICON_LED_RED. gs_zsc-zresult = '[중복된 데이터]'. ENDIF.
ABAP
복사

4. ALSM_EXCEL_TO_INTERNAL_TABLE

구 버전의 엑셀 업로드 기능으로 ALSM_EXCEL_TO_INTERNAL_TABLE 추천.
예제 참고 링크: 네이버 블로그.

5. 스크린 프로그래밍 (디버깅 및 라디오 버튼 처리)

PERFORM 호출 구조
IF r1 = 'X'. PERFORM upload_from_excel. ELSEIF r2 = 'X'. PERFORM get_needed_data. ENDIF.
ABAP
복사
라디오 버튼은 동일 그룹 내 단일 선택만 가능.

6. 아이콘 및 메시지

상태 표시용 아이콘
gs_zsc-zstatus = ICON_LED_GREEN. " 성공 아이콘
ABAP
복사
누적 메시지:
gs_zsc-zresult = gs_zsc-zresult && '[오류 메시지]'.
ABAP
복사

7. 디버깅 및 필드 체크

디버깅 시 주요 변수 추적
gs_zsc 데이터 구조 확인.