"첨부파일 스크린400
DATA : BEGIN OF gs_disp2,
icon TYPE icon-id, "상태
bukrs TYPE zjjy_attach-bukrs, "회사코드
belnr TYPE zjjy_attach-belnr, "전표번호
gjahr TYPE zjjy_attach-gjahr, "회계연도
filename TYPE zjjy_attach-filename, "파일명
zfile TYPE zjjy_attach-zfile, "파일업로드
erdat TYPE zjjy_attach-erdat, "생성일
ernam TYPE zjjy_attach-ernam, "생성자
erzet TYPE zjjy_attach-erzet, "생성시간
mark TYPE c, "삭제플래그
END OF gs_disp2.
DATA : gt_disp2 LIKE TABLE OF gs_disp2.
DATA : gt_disp2_old LIKE TABLE OF gs_disp2.
***************************************************************
첨부파일 업로드 로직
DATA : files TYPE filetable. "파일업로드시- 파일경로
DATA : filename TYPE LINE OF filetable. "파일경로 - 라인타입
DATA : rc TYPE i. "리턴코드 - 파일수량
DATA : filename2 TYPE string. "파일경로 - 다른펑션호출을위한 타입이동
DATA : g_len TYPE i. "파일길이
TYPES : text_data(4096) TYPE c. "4096 캐릭터타입 변수선언
DATA : l_raw_data TYPE TABLE OF text_data. "4096캐릭타입 테이블
DATA : xstr_content TYPE xstring. "업로드데이터 2진형식변환
DATA : f_name TYPE rlgrap-filename. "파일명
DATA : lv_extension TYPE c LENGTH 30. "파일명-파일명
***************************************************************
CLEAR : gs_disp2.
CLEAR : files, filename.
* 파일업로드 선택창 팝업
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '파일 업로드' "선택창 이름
default_filename = '' "파일 기본이름
file_filter = '' "파일 확장필터
CHANGING
file_table = files "선택한 파일의 위치
rc = rc. "리턴코드
"취소눌러서 파일없을때 나가기
CHECK files IS NOT INITIAL.
READ TABLE files INTO filename INDEX 1.
filename2 = filename. "타입이동 (filetable -> string)
* 파일경로주고 파일명 얻기.
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = filename2 "파일경로
IMPORTING
stripped_name = f_name "파일명
EXCEPTIONS
x_error = 1
OTHERS = 2.
* 파일명/확장자 분할
CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
EXPORTING
filename = f_name
* UPPERCASE = 'X'
IMPORTING
extension = lv_extension.
"확장자 구버전엑셀이면 안받는다.
IF lv_extension = 'XLS'.
MESSAGE s000 WITH text-m14 DISPLAY LIKE 'E'. "업로드 불가-구버전엑셀
EXIT.
ENDIF.
* 동일자료 존재여부 확인
READ TABLE gt_disp2 INTO gs_disp2 WITH KEY filename = f_name.
"중복 안받는다.
IF sy-subrc = 0.
MESSAGE s000 WITH text-m10 DISPLAY LIKE 'E'. "업로드불가-중복
EXIT.
ENDIF.
* 업로드파일 데이터 테이블에 담기
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = filename2
filetype = 'BIN'
IMPORTING
filelength = g_len
TABLES
data_tab = l_raw_data
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
* MESSAGE '파일을 업로드할 수 없습니다.' TYPE 'E'.
MESSAGE s000 WITH text-m18 DISPLAY LIKE 'E'. "파일을 업로드할 수 없습니다
EXIT.
ENDIF.
* 업로드데이터 -> 2진데이터 변환
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = g_len
IMPORTING
buffer = xstr_content
TABLES
binary_tab = l_raw_data
EXCEPTIONS
failed = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE 'Unable to convert binary to xstring' TYPE 'E'.
ENDIF.
***************************************************************
"유효성검사완료 "데이터 넣기
gs_disp2-filename = f_name. "파일명
gs_disp2-zfile = xstr_content. "파일데이터
gs_disp2-erdat = sy-datum. "생성일
gs_disp2-ernam = sy-uname. "생성자
gs_disp2-erzet = sy-uzeit. "생성시간
"파일확장자에 따른 아이콘처리
"엑셀일때
IF lv_extension = 'XLSX'.
gs_disp2-icon = icon_xls.
"PDF일때
ELSEIF lv_extension = 'PDF'.
gs_disp2-icon = icon_pdf.
"JPG일때
ELSEIF lv_extension = 'JPG'.
gs_disp2-icon = icon_jpg.
"GIF일때
ELSEIF lv_extension = 'GIF'.
gs_disp2-icon = icon_gif.
"PPT일때
ELSEIF lv_extension = 'PPTX'.
gs_disp2-icon = icon_ppt.
"DOC일때
ELSEIF lv_extension = 'DOC' OR lv_extension = 'DOCX'.
gs_disp2-icon = icon_doc.
"그 외
ELSE.
gs_disp2-icon = icon_public_files.
ENDIF.
APPEND gs_disp2 TO gt_disp2.
***************************************************************
첨부파일 다운로드 로직
DATA : filename TYPE string. "파일경로
DATA : down_filename TYPE string. "다운파일이름
DATA : lv_filename TYPE string, "파일명-확장자
lv_extension TYPE string. "파일명-파일명
TYPES : text_data(4096) TYPE c. "4096 캐릭터타입 변수선언
DATA : l_raw_data TYPE TABLE OF text_data. "4096캐릭타입 테이블
* DATA: l_raw_data TYPE truxs_t_text_data WITH HEADER LINE.
DATA : lv_path TYPE string, "경로
lv_fullpath TYPE string. "전체경로
*************************************************************
CLEAR : l_raw_data, filename. "캐릭터타입테이블/파일경로 초기화
* 2진데이터 -> 업로드데이터 변환
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = gs_disp2-zfile
TABLES
binary_tab = l_raw_data. "업로드데이터
filename = gs_disp2-filename. "파일명
* 파일명/확장자 분할
SPLIT filename AT '.' INTO lv_filename lv_extension.
down_filename = 'DOWN_' && lv_filename.
* 파일다운로드 선택창 팝업
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = lv_extension "기본확장자
default_file_name = down_filename "파일명
CHANGING
filename = filename "다운받을이름
path = lv_path "경로
fullpath = lv_fullpath. "전체경로
* 업로드데이터와 경로줘서 다운받기
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_fullpath
filetype = 'BIN'
TABLES
data_tab = l_raw_data.
.
* 다운받은 파일 바로 실행
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
document = lv_fullpath "파일경로
operation = 'OPEN' "실행
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10
.
'SAP > ABAP 코드' 카테고리의 다른 글
(ABAP 코드) ALV 3분할 (0) | 2022.02.11 |
---|---|
(ABAP 코드) 동적 필드카탈로그 수정 ★★★★★★ (0) | 2022.02.11 |
(ABAP 코드) 엑셀 업로드 - CLASS 사용 (라인무한) (0) | 2022.02.08 |
(ABAP 코드) Excel 관련 변수 타입 (0) | 2022.02.08 |
(ABAP 코드) Selected Cells & Rows (0) | 2022.02.08 |