최초 작성일: 2024-08-18
최종 작성일: 2024-08-18
목표: 엑셀업로드프로그램 이해하기
#1. CALL FUNCTION GUI_UPLOAD 디버깅
FORM upload_from_excel .
DATA : lv_filename TYPE string,
lt_records TYPE solix_tab,
lv_headerxstring TYPE xstring,
lv_filelength TYPE i.
lv_filename = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
IMPORTING
filelength = lv_filelength
header = lv_headerxstring
TABLES
data_tab = lt_records
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.
"convert binary data to xstring
"if you are using cl_fdt_xl_spreadsheet in odata then skips this step
"as excel file will already be in xstring
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_filelength
IMPORTING
buffer = lv_headerxstring
TABLES
binary_tab = lt_records
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
"Implement suitable error handling here
ENDIF.
DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .
TRY .
lo_excel_ref = NEW cl_fdt_xl_spreadsheet(
document_name = lv_filename
xdocument = lv_headerxstring ) .
CATCH cx_fdt_excel_core.
"Implement suitable error handling here
ENDTRY .
"Get List of Worksheets
lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
IMPORTING
worksheet_names = DATA(lt_worksheets) ).
IF NOT lt_worksheets IS INITIAL.
READ TABLE lt_worksheets INTO DATA(lv_woksheetname) INDEX 1.
DATA(lo_data_ref) = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
lv_woksheetname ).
"now you have excel work sheet data in dyanmic internal table
ASSIGN lo_data_ref->* TO <gt_data>.
ENDIF. .
DATA : lv_numberofcolumns TYPE i,
lv_date_string TYPE string,
lv_target_date_field TYPE datum.
FIELD-SYMBOLS : <ls_data> TYPE any,
<lv_field> TYPE any.
"you could find out number of columns dynamically from table <gt_data>
lv_numberofcolumns = 5 .
LOOP AT <gt_data> ASSIGNING <ls_data> FROM 2 .
* "processing columns
DO lv_numberofcolumns TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data> TO <lv_field> .
IF sy-subrc = 0 .
CASE sy-index .
when 1 .
gs_EXCEL-MANDT = <lv_field>.
when 2 .
gs_EXCEL-CARRID = <lv_field>.
when 3 .
gs_EXCEL-CARRNAME = <lv_field>.
when 4 .
gs_EXCEL-CURRCODE = <lv_field>.
when 5 .
gs_EXCEL-URL = <lv_field>.
* WHEN 10 .
* lv_date_string = <lv_field> .
* PERFORM date_convert USING lv_date_string CHANGING lv_target_date_field .
* WRITE lv_target_date_field .
WHEN OTHERS.
* WRITE : <lv_field> .
ENDCASE .
ENDIF.
ENDDO .
APPEND gs_EXCEL TO gt_EXCEL.
CLEAR gs_EXCEL.
* NEW-LINE .
ENDLOOP .
** TAB으로 구분된 내용을 잘라서 ITAB에 APPEND 한다.
* LOOP AT lt_intern.
* SPLIT lt_intern
* AT cl_abap_char_utilities=>horizontal_tab
* INTO gs_EXCEL-CARRID gs_EXCEL-CARRNAME gs_EXCEL-CURRCODE gs_EXCEL-URL.
* gs_EXCEL-MANDT = '001'.
* APPEND gs_EXCEL TO gt_EXCEL.
* CLEAR gs_EXCEL.
* ENDLOOP.
*
**HEADER LINE 삭제
* IF gt_excel IS NOT INITIAL.
* DELETE gt_excel INDEX 1. "상단에 적힌 필드명을 삭제시켜줌
* ELSE.
* MESSAGE '데이터가 존재하지 않습니다' TYPE 'E'.
* ENDIF.
ENDFORM.
1-1 디버깅
EXPORTING
Function으로 값을 보낸다
- lv_filename : 파일업로드 경로
- filetype: 업로드한 파일 타입
IMPORTING
Function에서 값을 구해 넣는다
- lv_filelength : 업로드 파일 문자 길이=4465
- lv_headerxstring : 업로드한 파일을 숫자 형태로 전환(숫자로 전환하는 사유는 해당 function에서 파일에 대해 숫자 값을 입력해야 작동 가능함) -> 이펑션에서는 빈값이 됨.
TABLE
Function에 값을 넣거나 값을 보낼 수있음 ( 현재 해당 테이블에 값이 없어 IMPORTING)
- it_record : 숫자, 영어로 구성된암호화 된 데이터 18행 값
#2. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 디버깅
파일 길이와 바이너리 타입으로 암호돠된 업로드 데이터를가져다가 한 줄로 합쳐서
lv_headerxsting에 값을 넣는 함수
코드
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_filelength
IMPORTING
buffer = lv_headerxstring
TABLES
binary_tab = lt_records
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
"Implement suitable error handling here
ENDIF.
EXPORTING
Function으로 값을 보낸다
- input_length = lv_fieldlength = 업로드한 파일 문자길이 =4465
TABLES
Function에 값을 넣거나 값을 내보낼 수 있음 ( 이경우에는 It_records에 값이 있으므로 내보냄-exporting)
- binary_tab = lt_record (숫자로 암호화한데이터를 한행으로 만든 것을 18행으로 나누어서 만든 테이블)
IMPORTING
Function에서 값을 구해 넣는다.
- lv_headerxstring : 한 줄 긴 문자열이 들어가며, IT_RECORD 테이블에 있던 여러 열의 값이 한 행으로 만들어짐
(각 열로 나눠진 값을 한 행으로 만드는 이유는 관련 펑션 실행을 위해서임)
'SAP > ABAP' 카테고리의 다른 글
SAP GUI 단축키 (0) | 2024.09.10 |
---|---|
/WIP/[엑셀 업로드 프로그램 이해하기]PERFORM UPLOAD_FROM_EXCEL 디버깅(2/2) (0) | 2024.08.20 |
[엑셀 업로드 프로그램 이해하기-3/N ]PBO,PAI (0) | 2024.08.18 |
[WIP]Excel_Upload프로그램_프로그램 작동 로직(3/3) (0) | 2024.06.27 |
[WIP]Excel_Upload프로그램_프로그램 작동 로직(2/3) (0) | 2024.06.25 |