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表的当前请求号与将来需要合并的目标系统请求号一直,防止传输过去后,请求文件内容被覆盖。