文件传输程序
来源:互联网 发布:局域网同步软件 编辑:程序博客网 时间:2024/05/15 03:07
*&---------------------------------------------------------------------*
*& Report Z_TRANSFER_FILE
*&---------------------------------------------------------------------*
*&*** "本地文件上传至服务器,从服务器下载文件到本地 ***
*&*** Author: Edward Kang Date: 20100125 ***
*&---------------------------------------------------------------------*
REPORT z_transfer_file . "MESSAGE-ID 00
*&---------------------------------------------------------------------*
*& INTERNAL TABLES
*&---------------------------------------------------------------------*
* "文件内表
DATA: BEGIN OF itab_asc OCCURS 0,
asc TYPE char2000,
END OF itab_asc.
DATA: l_tab_rc TYPE cms_tab_msg_col_message.
TYPES: l_itab_asc LIKE itab_asc OCCURS 0.
*&---------------------------------------------------------------------*
*& SELECT-OPTIONS
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001. "Model Option
SELECTION-SCREEN: SKIP 1.
PARAMETERS: r_ltos RADIOBUTTON GROUP rad1 "Local to Server " 上传本地文件至服务器
DEFAULT 'X',
r_stol RADIOBUTTON GROUP rad1. "Server to Local " 从服务器下载文件到本地
SELECTION-SCREEN: SKIP 1.
PARAMETERS: p_lfile TYPE text128 "Local File Path
DEFAULT 'C:/xxx.txt',
p_sfile TYPE text128 "Server File Path
DEFAULT '/usr/sap/tmp/xxx.txt'.
SELECTION-SCREEN: SKIP 1.
SELECTION-SCREEN END OF BLOCK bk1.
*&---------------------------------------------------------------------*
*& AT LINE-SELECTION
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lfile.
PERFORM lfile_open_dialog CHANGING p_lfile.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_sfile.
PERFORM sfile_open_dialog CHANGING p_sfile.
*&---------------------------------------------------------------------*
*& MAIN PROCESS
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM show_progress_text USING 'Processing...'.
IF r_ltos EQ 'X'.
PERFORM upload_localfile_to_server.
ELSEIF r_stol EQ 'X'.
PERFORM download_serverfile_to_local.
ENDIF.
*----------------------------------------------------------------------*
********** *********
********** SUBROUTIN *********
********** *********
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& FORM SHOW_PROGRESS_TEXT
*&---------------------------------------------------------------------*
* 显示处理进程
*----------------------------------------------------------------------*
FORM show_progress_text USING p_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 0
text = p_text
EXCEPTIONS
OTHERS = 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM DOWNLOAD_SERVERFILE_TO_LOCAL
*&---------------------------------------------------------------------*
* TRANSFER A SAP APPLICATION SERVER FILE TO LOCAL
*----------------------------------------------------------------------*
FORM download_serverfile_to_local.
DATA: user_answer(1) TYPE c.
DATA: prc_result TYPE c.
DATA: l_text TYPE string.
DATA: l_filename TYPE string.
CLEAR: l_text.
REFRESH itab_asc.
OPEN DATASET p_sfile FOR INPUT IN TEXT MODE ENCODING UTF-8. "判断服务器文件是否存在
IF sy-subrc <> 0.
IF sy-subrc = 8.
l_text = |File { p_sfile } doesn't exist!|.
ELSE.
l_text = |File { p_sfile } open error!|.
ENDIF.
MESSAGE e208(00) WITH l_text.
CLOSE DATASET p_sfile.
EXIT.
ENDIF.
DO.
READ DATASET p_sfile INTO itab_asc.
IF sy-subrc <> 0.
EXIT.
ENDIF.
APPEND itab_asc TO itab_asc.
CLEAR itab_asc.
ENDDO.
CLOSE DATASET p_sfile.
l_filename = p_lfile.
prc_result = cl_gui_frontend_services=>file_exist( l_filename ). "判断本地文件是否存在
IF prc_result IS NOT INITIAL.
l_text = |File { p_lfile } already exists, overwrite it?|.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = l_text
titel = 'Confirm'
start_column = 40
start_row = 10
cancel_display = 'X'
IMPORTING
answer = user_answer
EXCEPTIONS
OTHERS = 1.
IF user_answer EQ 'A' OR user_answer EQ 'N' .
CLOSE DATASET p_sfile.
STOP.
ENDIF.
ENDIF.
PERFORM download_itab_2_localfile
USING p_lfile
CHANGING itab_asc[]
l_tab_rc.
IF sy-subrc EQ 0.
MESSAGE s208(00) WITH 'SUCCEED TO TRANSFER FILE!'.
ELSE.
MESSAGE e208(00) WITH 'FAIL TO TRANSFER FILE!'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM UPLOAD_LOCALFILE_TO_SERVER
*&---------------------------------------------------------------------*
* TRANSFER A LOCAL FILE TO SAP APPLICATION SERVER
*----------------------------------------------------------------------*
FORM upload_localfile_to_server.
DATA: user_answer(1) TYPE c.
DATA: l_text TYPE string.
DATA: l_filename TYPE string.
DATA: prc_result TYPE c.
CLEAR: l_text.
l_filename = p_lfile.
prc_result = cl_gui_frontend_services=>file_exist( l_filename ). "判断本地文件是否存在
IF prc_result IS INITIAL.
l_text = |File { p_lfile } doesn't exist!|.
MESSAGE e208(00) WITH l_text.
ENDIF.
OPEN DATASET p_sfile FOR INPUT IN TEXT MODE ENCODING UTF-8. "判断服务器是否存在
IF sy-subrc EQ 0.
l_text = |File { p_sfile } already exists, overwrite it?|.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = l_text
titel = 'Confirm'
start_column = 40
start_row = 10
cancel_display = 'X'
IMPORTING
answer = user_answer
EXCEPTIONS
OTHERS = 1.
IF user_answer EQ 'A' OR user_answer EQ 'N' .
CLOSE DATASET p_sfile.
STOP.
ENDIF.
ENDIF.
CLOSE DATASET p_sfile.
REFRESH itab_asc.
PERFORM upload_localfile_2_itab
USING p_lfile
CHANGING itab_asc[]
l_tab_rc.
OPEN DATASET p_sfile FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc EQ 0.
LOOP AT itab_asc.
TRANSFER itab_asc TO p_sfile.
ENDLOOP.
ENDIF.
CLOSE DATASET p_sfile.
IF sy-subrc EQ 0.
MESSAGE s208(00) WITH 'SUCCEED TO TRANSFER FILE!'.
ELSE.
MESSAGE e208(00) WITH 'FAIL TO TRANSFER FILE!'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILE_OPEN_DIALOG
*&---------------------------------------------------------------------*
FORM lfile_open_dialog CHANGING c_lfile.
DATA: l_initial_directory TYPE string.
DATA: lt_file_table TYPE filetable.
DATA: l_rc TYPE i.
l_initial_directory = c_lfile.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
* WINDOW_TITLE =
default_extension = '.TXT'
* DEFAULT_FILENAME =
* FILE_FILTER =
* WITH_ENCODING =
initial_directory = l_initial_directory
* MULTISELECTION =
CHANGING
file_table = lt_file_table
rc = l_rc
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lt_file_table IS NOT INITIAL.
READ TABLE lt_file_table INTO c_lfile INDEX 1.
ENDIF.
ENDIF.
ENDFORM. " FILE_OPEN_DIALOG
*&---------------------------------------------------------------------*
*& Form UPLOAD_LOCALFILE_2_ITAB
*&---------------------------------------------------------------------*
FORM upload_localfile_2_itab USING u_lfile TYPE text128
CHANGING c_itab_asc TYPE l_itab_asc
c_tab_rc TYPE cms_tab_msg_col_message.
DATA: l_str_rc TYPE cms_str_msg_col_message.
DATA: l_file TYPE string.
REFRESH:
c_itab_asc.
l_file = u_lfile.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_file
filetype = 'ASC'
* HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = SPACE
* CODEPAGE = SPACE
codepage = '4110'
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = space
* VIRUS_SCAN_PROFILE =
* IMPORTING
* FILELENGTH =
* HEADER =
CHANGING
data_tab = c_itab_asc
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
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc <> 0.
DATA: l_load_error TYPE text30.
PERFORM get_load_error
USING sy-subrc
'CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD'
CHANGING l_load_error.
l_str_rc-msg_class = '00'.
l_str_rc-msg_type = 'E'.
l_str_rc-msg_number = 208.
l_str_rc-param1 = l_load_error.
APPEND l_str_rc TO c_tab_rc.
MESSAGE s208(00) WITH l_load_error.
ENDIF.
ENDFORM. " UPLOAD_LOCALFILE_2_ITAB
*&---------------------------------------------------------------------*
*& Form GET_LOAD_ERROR
*&---------------------------------------------------------------------*
FORM get_load_error USING u_err_code TYPE sy-subrc
u_prog_name TYPE string
CHANGING c_load_error TYPE text30.
CLEAR c_load_error.
CASE u_err_code.
WHEN 1. c_load_error = 'FILE_OPEN_ERROR'.
WHEN 2. c_load_error = 'FILE_READ_ERROR'.
WHEN 3. c_load_error = 'NO_BATCH'.
WHEN 4. c_load_error = 'GUI_REFUSE_FILETRANSFER'.
WHEN 5. c_load_error = 'INVALID_TYPE'.
WHEN 6. c_load_error = 'NO_AUTHORITY'.
WHEN 7. c_load_error = 'UNKNOWN_ERROR'.
WHEN 8. c_load_error = 'BAD_DATA_FORMAT'.
WHEN 9. c_load_error = 'HEADER_NOT_ALLOWED'.
WHEN 10. c_load_error = 'SEPARATOR_NOT_ALLOWED'.
WHEN 11. c_load_error = 'HEADER_TOO_LONG'.
WHEN 12. c_load_error = 'UNKNOWN_DP_ERROR'.
WHEN 13. c_load_error = 'ACCESS_DENIED'.
WHEN 14. c_load_error = 'DP_OUT_OF_MEMORY'.
WHEN 15. c_load_error = 'DISK_FULL'.
WHEN 16. c_load_error = 'DP_TIMEOUT'.
WHEN 17. c_load_error = 'NOT_SUPPORTED_BY_GUI'.
WHEN 18. c_load_error = 'RROR_NO_GUI'.
WHEN 19. c_load_error = 'others'.
ENDCASE.
IF c_load_error IS INITIAL.
c_load_error = u_err_code.
ELSE.
c_load_error = |ERROR { c_load_error } CALL OF { u_prog_name }|.
ENDIF.
ENDFORM. " GET_LOAD_ERROR
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_SEVERFILE_2_ITAB
*&---------------------------------------------------------------------*
FORM download_itab_2_localfile USING u_lfile TYPE text128
CHANGING c_itab_asc TYPE l_itab_asc
c_tab_rc TYPE cms_tab_msg_col_message.
DATA: l_str_rc TYPE cms_str_msg_col_message.
DATA: l_file TYPE string.
REFRESH:
c_tab_rc.
l_file = u_lfile.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
* bin_filesize =
filename = l_file
filetype = 'ASC'
* append = 'X'
* write_field_separator = space
* header = '00'
* trunc_trailing_blanks = SPACE
* write_lf = 'X'
* col_select = SPACE
* col_select_mask = SPACE
* dat_mode = SPACE
* confirm_overwrite = SPACE
* no_auth_check = SPACE
codepage = '4110'
* ignore_cerr = ABAP_TRUE
* replacement = '#'
* write_bom = SPACE
* trunc_trailing_blanks_eol = 'X'
* wk1_n_format = SPACE
* wk1_n_size = SPACE
* wk1_t_format = SPACE
* wk1_t_size = SPACE
* show_transfer_status = 'X'
* IMPORTING
* filelength =
CHANGING
data_tab = c_itab_asc
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24
.
IF sy-subrc <> 0.
DATA: l_load_error TYPE text30.
PERFORM get_load_error2
USING sy-subrc
'CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD'
CHANGING l_load_error.
l_str_rc-msg_class = '00'.
l_str_rc-msg_type = 'E'.
l_str_rc-msg_number = 208.
l_str_rc-param1 = l_load_error.
APPEND l_str_rc TO c_tab_rc.
MESSAGE s208(00) WITH l_load_error.
ENDIF.
ENDFORM. " DOWNLOAD_SEVERFILE_2_ITAB
*&---------------------------------------------------------------------*
*& Form GET_LOAD_ERROR2
*&---------------------------------------------------------------------*
FORM get_load_error2 USING u_err_code TYPE sy-subrc
u_prog_name TYPE string
CHANGING c_load_error TYPE text30.
CLEAR c_load_error.
CASE u_err_code.
WHEN 1. c_load_error = 'FILE_WRITE_ERROR'.
WHEN 2. c_load_error = 'NO_BATCH'.
WHEN 3. c_load_error = 'GUI_REFUSE_FILETRANSFER'.
WHEN 4. c_load_error = 'INVALID_TYPE'.
WHEN 5. c_load_error = 'NO_AUTHORITY'.
WHEN 6. c_load_error = 'UNKNOWN_ERROR'.
WHEN 7. c_load_error = 'HEADER_NOT_ALLOWED'.
WHEN 8. c_load_error = 'SEPARATOR_NOT_ALLOWED'.
WHEN 9. c_load_error = 'FILESIZE_NOT_ALLOWED'.
WHEN 10. c_load_error = 'HEADER_TOO_LONG'.
WHEN 11. c_load_error = 'DP_ERROR_CREATE'.
WHEN 12. c_load_error = 'DP_ERROR_SEND'.
WHEN 13. c_load_error = 'DP_ERROR_WRITE'.
WHEN 14. c_load_error = 'UNKNOWN_DP_ERROR'.
WHEN 15. c_load_error = 'ACCESS_DENIED'.
WHEN 16. c_load_error = 'DP_OUT_OF_MEMORY'.
WHEN 17. c_load_error = 'DISK_FULL'.
WHEN 18. c_load_error = 'DP_TIMEOUT'.
WHEN 19. c_load_error = 'FILE_NOT_FOUND'.
WHEN 20. c_load_error = 'DATAPROVIDER_EXCEPTION'.
WHEN 21. c_load_error = 'CONTROL_FLUSH_ERROR'.
WHEN 22. c_load_error = 'NOT_SUPPORTED_BY_GUI'.
WHEN 23. c_load_error = 'ERROR_NO_GUI'.
WHEN 24. c_load_error = 'OTHERS '.
ENDCASE.
IF c_load_error IS INITIAL.
c_load_error = u_err_code.
ELSE.
c_load_error = |ERROR { c_load_error } CALL OF { u_prog_name }|.
ENDIF.
ENDFORM. " GET_LOAD_ERROR2
*&---------------------------------------------------------------------*
*& Form SFILE_OPEN_DIALOG
*&---------------------------------------------------------------------*
FORM sfile_open_dialog CHANGING c_sfile.
DATA: l_directory TYPE string VALUE '/'.
DATA: l_filemask TYPE char1.
DATA: l_serverfile TYPE string.
IF c_sfile IS NOT INITIAL.
l_directory = c_sfile.
ENDIF.
CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
EXPORTING
directory = l_directory
IMPORTING
serverfile = l_serverfile
EXCEPTIONS
canceled_by_user = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
c_sfile = l_serverfile.
ENDIF.
ENDFORM. " SFILE_OPEN_DIALOG
- 文件传输程序
- UDP文件传输程序
- linux socket 文件传输程序
- python 文件传输客户端程序
- linux下文件传输程序
- JAVA文件传输程序
- JAVA文件传输程序
- 简单文件传输程序的实现
- 文件传输程序个人小问题
- 聊天程序文件传输调试总结
- 文件传输
- 文件传输
- 文件传输
- 文件传输
- 文件传输
- 文件传输
- 文件传输
- 文件传输
- 整合jBPM-4与Spring
- 基础
- DFHIR3780 WUI01 Unable to start interregion communication. Return code=X'000000
- AAA
- d018: 三数排序
- 文件传输程序
- 概论1
- Counting Objects in C++
- 什么是GPRS,CMWAP,CMNET-移动网络介绍
- 关键词: 蟾鹄之恋
- 没有证据表明中国四川大地震是美国的地球物理武器的作
- 时间戳标准时间 (UTC时间本地时间)
- awk 用法小记
- d019: 计算1+2+3+4......+n之和