안녕하세요,
ABAP 테이블 데이터에 각각의 파일 업로드 하는 방법이 궁금해서 글 씁니다.
각각의 데이터에 맞는 출고지시서(excel) 파일을 업로드하고 다른 프로그램에서 그 db table의 특정 데이터를 select 해서 조회를 했을 때
다운로드 가능하게 만들고 싶습니다..
일단은 제가 원하는 것이 구현 가능한지 궁금해서 여쭤봅니다.
안녕하세요,
ABAP 테이블 데이터에 각각의 파일 업로드 하는 방법이 궁금해서 글 씁니다.
각각의 데이터에 맞는 출고지시서(excel) 파일을 업로드하고 다른 프로그램에서 그 db table의 특정 데이터를 select 해서 조회를 했을 때
다운로드 가능하게 만들고 싶습니다..
일단은 제가 원하는 것이 구현 가능한지 궁금해서 여쭤봅니다.
다음 내용 참고하세요
REPORT zfile.
TABLES : zfilehead, zfiledata, sscrfields.
DATA : gs_fhead LIKE zfilehead,
gt_fdata LIKE zfiledata OCCURS 0 WITH HEADER LINE.
*attache file
DATA : BEGIN OF gt_uptab OCCURS 0,
content(255) TYPE x,
END OF gt_uptab.
DATA : gv_length TYPE int4,
gv_fname TYPE string,
gv_fname2 TYPE string,
gv_ftype TYPE zfilehead-filetype,
gv_temp(120).
DATA: gv_work_dir TYPE string,
gv_cmd(128).
PARAMETERS : p_carrid TYPE s_carr_id OBLIGATORY,
p_fname TYPE zfilehead-filename.
SELECTION-SCREEN FUNCTION KEY 1.
INITIALIZATION.
sscrfields-functxt_01 = 'Display file'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
DATA: l_rc TYPE i VALUE 1,
l_window_title TYPE string,
lt_file_table TYPE filetable,
ls_file TYPE file_table.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Select file'
file_filter = '*.*'
multiselection = space
CHANGING
file_table = lt_file_table
rc = l_rc.
IF sy-subrc EQ 0.
READ TABLE lt_file_table INDEX 1 INTO ls_file.
p_fname = ls_file-filename.
ENDIF.
CLEAR: gt_uptab, gt_uptab[].
gv_fname = p_fname.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = gv_fname
filetype = 'BIN'
IMPORTING
filelength = gv_length
TABLES
data_tab = gt_uptab.
START-OF-SELECTION.
*& file name
CLEAR gv_temp.
DO.
SPLIT gv_fname AT '' INTO gv_temp gv_fname.
IF gv_fname EQ space.
gv_fname = gv_temp.
EXIT.
ENDIF.
IF sy-index > 100. EXIT. ENDIF.
ENDDO.
*& file type
CLEAR gv_temp.
gv_fname2 = gv_fname.
DO.
SPLIT gv_fname2 AT '.' INTO gv_temp gv_fname2.
IF gv_fname2 EQ space.
gv_fname2 = gv_temp.
EXIT.
ENDIF.
IF sy-index > 100. EXIT. ENDIF.
ENDDO.
gv_ftype = gv_fname2+0(3).
TRANSLATE gv_ftype TO UPPER CASE.
*& Header
gs_fhead-carrid = p_carrid.
gs_fhead-filename = gv_fname.
gs_fhead-filetype = gv_ftype.
gs_fhead-length = gv_length.
MODIFY zfilehead FROM gs_fhead.
*& Data.
LOOP AT gt_uptab.
gt_fdata-carrid = p_carrid.
gt_fdata-content = gt_uptab-content.
gt_fdata-seq = sy-tabix.
APPEND gt_fdata.
ENDLOOP.
MODIFY zfiledata FROM TABLE gt_fdata.
IF sy-subrc EQ 0.
MESSAGE 'SUCCESS' TYPE 'S'.
ELSE.
MESSAGE 'ERROR' TYPE 'E'.
ENDIF.
AT SELECTION-SCREEN.
CHECK sscrfields-ucomm = 'FC01'.
CLEAR : gs_fhead, gt_fdata, gt_fdata[].
*& Header
SELECT SINGLE * INTO gs_fhead FROM zfilehead
WHERE carrid = p_carrid.
IF sy-subrc NE 0.
MESSAGE 'There is no file' TYPE 'E'.
ENDIF.
*& detail
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_fdata
FROM zfiledata
WHERE carrid = p_carrid.
CLEAR: gt_uptab, gt_uptab[].
SORT gt_fdata BY seq.
LOOP AT gt_fdata.
gt_uptab-content = gt_fdata-content.
APPEND gt_uptab.
ENDLOOP.
* Get SAP Working Directory.
CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
CHANGING
sapworkdir = gv_work_dir.
*& file name
CONCATENATE gv_work_dir '' gs_fhead-filename INTO gv_fname.
*& Download
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = gs_fhead-length
filename = gv_fname
filetype = 'BIN'
TABLES
data_tab = gt_uptab.
*& file run
gv_cmd = gv_fname.
CALL FUNCTION 'GUI_RUN'
EXPORTING