ABAP TIP :
FILE management with CBO program
Let’s make a program that can upload and download file.
User can select file and upload.
Generally, we use the ‘ASC’ mode when calling function
‘GUI_UPLOAD/GUI_DOWNLOAD’.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING filename = gv_fname filetype = 'ASC' |
This program aims to upload/donwload file, so we must use the ‘BIN’ mode
when calling function.
If we save the file as a BIN mode, it’s possible to download as a origin
file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING filename = gv_fname filetype = 'BIN' |
Fisrt of all, let’s create 2 table for saving header and
contents of file.
And, Let’s write program and activate.
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 command = gv_cmd. |
Select test image file and execute.
After uploading, press the button ‘display file’ and you can see the file
uploaded.
No comments:
Post a Comment