ABAP上传/下载请求
1 *&---------------------------------------------------------------------* 2 *& Report Z3426HANDLEREQUEST 3 *&---------------------------------------------------------------------* 4 *& 5 *&---------------------------------------------------------------------* 6 REPORT z3426handlerequest. 7 DATA:BEGIN OF gt_file OCCURS 0, 8 local_filename TYPE string, 9 remote_filename TYPE string, 10 xcontent TYPE xstring, 11 END OF gt_file. 12 13 PARAMETERS:p_path TYPE string DEFAULT 'C:\Users\XXXX\Desktop\Tr'. 14 PARAMETERS:p_trkorr TYPE e070-trkorr. 15 PARAMETERS:p1 TYPE c RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND u1, 16 p2 TYPE c RADIOBUTTON GROUP g2. 17 18 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. 19 PERFORM frm_file_search CHANGING p_path. 20 21 INITIALIZATION. 22 %_p_path_%_app_%-text = '本地路径'. 23 %_p_trkorr_%_app_%-text = '请求号'. 24 %_p1_%_app_%-text = '下载请求'. 25 %_p2_%_app_%-text = '上载请求'. 26 27 START-OF-SELECTION. 28 CASE abap_true. 29 WHEN p1. 30 PERFORM frm_download_tr. 31 WHEN p2. 32 PERFORM frm_upload_tr. 33 WHEN OTHERS. 34 ENDCASE. 35 36 FORM frm_file_search CHANGING p_path. 37 CALL METHOD cl_gui_frontend_services=>directory_browse 38 EXPORTING 39 window_title = '请选择文件打开目录' 40 initial_folder = 'C' 41 CHANGING 42 selected_folder = p_path. 43 44 CALL METHOD cl_gui_cfw=>flush. 45 ENDFORM. 46 47 FORM frm_download_tr. 48 DATA:lv_xstr TYPE xstring, 49 lv_count TYPE i, 50 lt_data TYPE STANDARD TABLE OF raw255. 51 52 IF sy-opsys = 'Windows NT'. 53 gt_file-local_filename = |{ p_path }\\K{ p_trkorr+4 }.{ sy-sysid }|. 54 gt_file-remote_filename = |/usr/sap/trans/cofiles/K{ p_trkorr+4 }.{ sy-sysid }|. 55 APPEND gt_file. 56 gt_file-local_filename = |{ p_path }\\R{ p_trkorr+4 }.{ sy-sysid }|. 57 gt_file-remote_filename = |/usr/sap/trans/data/R{ p_trkorr+4 }.{ sy-sysid }|. 58 APPEND gt_file. 59 ELSE. 60 gt_file-local_filename = |{ p_path }/K{ p_trkorr+4 }.{ sy-sysid }|. 61 gt_file-remote_filename = |/usr/sap/trans/cofiles/K{ p_trkorr+4 }.{ sy-sysid }|. 62 APPEND gt_file. 63 gt_file-local_filename = |{ p_path }/R{ p_trkorr+4 }.{ sy-sysid }|. 64 gt_file-remote_filename = |/usr/sap/trans/data/R{ p_trkorr+4 }.{ sy-sysid }|. 65 APPEND gt_file. 66 ENDIF. 67 68 LOOP AT gt_file. 69 OPEN DATASET gt_file-remote_filename FOR INPUT IN BINARY MODE. 70 READ DATASET gt_file-remote_filename INTO lv_xstr. 71 IF sy-subrc <> 0. 72 EXIT. 73 ELSE. 74 gt_file-xcontent = gt_file-xcontent && lv_xstr. 75 ENDIF. 76 CLOSE DATASET gt_file-remote_filename. 77 MODIFY gt_file TRANSPORTING xcontent. 78 CLEAR:gt_file. 79 ENDLOOP. 80 81 LOOP AT gt_file. 82 CLEAR:lv_count,lt_data,lt_data[]. 83 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 84 EXPORTING 85 buffer = gt_file-xcontent 86 IMPORTING 87 output_length = lv_count 88 TABLES 89 binary_tab = lt_data. 90 91 CALL METHOD cl_gui_frontend_services=>gui_download 92 EXPORTING 93 bin_filesize = lv_count 94 filename = gt_file-local_filename 95 filetype = 'BIN' 96 CHANGING 97 data_tab = lt_data. 98 ENDLOOP. 99 ENDFORM. 100 101 FORM frm_upload_tr. 102 DATA:lv_xstr TYPE xstring, 103 lv_count TYPE i, 104 lt_data TYPE STANDARD TABLE OF raw255. 105 DATA:lv_filename TYPE string, 106 lv_filter TYPE string, 107 lt_file TYPE line OCCURS 0 WITH HEADER LINE. 108 lv_filter = `*.*`. 109 CALL METHOD cl_gui_frontend_services=>directory_list_files 110 EXPORTING 111 directory = p_path 112 filter = lv_filter 113 files_only = abap_true 114 CHANGING 115 file_table = lt_file[] 116 count = lv_count 117 EXCEPTIONS 118 cntl_error = 1 119 directory_list_files_failed = 2 120 wrong_parameter = 3 121 error_no_gui = 4 122 not_supported_by_gui = 5 123 OTHERS = 6. 124 125 LOOP AT lt_file INTO DATA(ls_file). 126 CLEAR:lt_data. 127 lv_filename = p_path && '\' && ls_file-line. 128 CALL METHOD cl_gui_frontend_services=>gui_upload 129 EXPORTING 130 filename = lv_filename 131 filetype = 'BIN' 132 IMPORTING 133 filelength = lv_count 134 CHANGING 135 data_tab = lt_data. 136 137 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 138 EXPORTING 139 input_length = lv_count 140 IMPORTING 141 buffer = lv_xstr 142 TABLES 143 binary_tab = lt_data. 144 145 IF ls_file-line+0(1) = 'R'. 146 data(lv_file) = |/usr/sap/trans/data/{ ls_file-line }|. 147 ELSEIF ls_file-line+0(1) = 'K' . 148 lv_file = |/usr/sap/trans/cofiles/{ ls_file-line }|. 149 ENDIF. 150 151 OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE. 152 IF sy-subrc = 0. 153 TRANSFER lv_xstr TO lv_file. 154 CLOSE DATASET lv_file. 155 ENDIF. 156 157 ENDLOOP. 158 159 ENDFORM.
下载请求很简单,上载请求时,在目标系统使用事务码:STMS
在目标框中输入AL11上载的请求文件:
如果想把此请求传输到其它系统,需要SE09/SE10再新建一个请求,将该请求包在里面传输即可。
如果外包项目需要多方协调开发任务时,需要在各自的沙箱系统中修改E070L表的当前请求号与将来需要合并的目标系统请求号一直,防止传输过去后,请求文件内容被覆盖。