-
Notifications
You must be signed in to change notification settings - Fork 0
/
yrs_upload_tr.abap
374 lines (374 loc) · 9.27 KB
/
yrs_upload_tr.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
*======================================================================*
* Initial idea and first release by Igor Yaskevitch (IBS), 2003 *
* Enhancements by Sergei Korolev (IBS), 2005 (added import queue *
* manipulations, authority checking, minor interface improvements) *
*----------------------------------------------------------------------*
* Function : This is a utility tool for uploading binary *
* files of a transport request from a Client PC, *
* adding to an import queue and importing into the *
* system. *
*======================================================================*
REPORT zrs_upload_tr.
TYPE-POOLS:
abap,
sabc,
stms.
CONSTANTS:
gc_tp_fillclient LIKE stpa-command VALUE 'FILLCLIENT'.
DATA: lt_request TYPE stms_tr_requests,
lt_tp_maintain TYPE stms_tp_maintains.
DATA: sl TYPE i,
l_datafile(255) TYPE c,
datafiles TYPE i,
ret TYPE i,
ans TYPE c.
DATA:
et_request_infos TYPE stms_wbo_requests,
request_info TYPE stms_wbo_request,
system TYPE tmscsys-sysnam,
request LIKE e070-trkorr.
DATA: folder TYPE string,
retval LIKE TABLE OF ddshretval WITH HEADER LINE,
fldvalue LIKE help_info-fldvalue,
transdir TYPE text255,
filename LIKE authb-filename,
trfile(20) TYPE c.
DATA:
BEGIN OF datatab OCCURS 0,
buf(8192) TYPE c,
END OF datatab.
DATA: len TYPE i,
flen TYPE i.
SELECTION-SCREEN COMMENT /1(79) comm_sel.
PARAMETERS:
p_cofile(255) TYPE c LOWER CASE OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE bl_title.
PARAMETERS:
p_addque AS CHECKBOX DEFAULT 'X',
p_tarcli LIKE tmsbuffer-tarcli
DEFAULT sy-mandt
MATCHCODE OBJECT h_t000,
p_sepr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.
INITIALIZATION.
bl_title = 'Import queue parameters'(b01).
comm_sel = 'Select co-file. Filename must start with ''K''.'(001).
CALL FUNCTION 'WSAF_BUILD_SEPARATOR'
IMPORTING
separator = p_sepr
EXCEPTIONS
separator_not_maintained = 1
wrong_call = 2
wsaf_config_not_maintained = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE s001(00) WITH 'Unable to find out the separator symbol for the system.'(008).
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cofile.
DATA:
file TYPE file_table,
rc TYPE i,
title TYPE string,
file_table TYPE filetable,
file_filter TYPE string VALUE 'CO-files (K*.*)|K*.*||'.
title = 'Select CO-file'(006).
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = title
file_filter = file_filter
CHANGING
file_table = file_table
rc = rc
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.
ENDIF.
READ TABLE file_table INTO file INDEX 1.
p_cofile = file.
AT SELECTION-SCREEN.
DATA:
file TYPE string.
sl = STRLEN( p_cofile ).
IF sl < 11.
MESSAGE e001(00)
WITH 'Invalid co-file name format. File name format must be KNNNNNNN.SSS'(009).
ENDIF.
sl = sl - 11.
IF p_cofile+sl(1) NE 'K'.
MESSAGE e001(00)
WITH 'Invalid co-file name format. File name format must be KNNNNNNN.SSS'(009).
ENDIF.
sl = sl + 1.
IF NOT p_cofile+sl(6) CO '0123456789'.
MESSAGE e001(00)
WITH 'Invalid co-file name format. File name format must be KNNNNNNN.SSS'(009).
ENDIF.
sl = sl + 6.
IF p_cofile+sl(1) NE '.'.
MESSAGE e001(00)
WITH 'Invalid co-file name format. File name format must be KNNNNNNN.SSS'(009).
ENDIF.
sl = sl - 7.
CLEAR datafiles.
l_datafile = p_cofile.
l_datafile+sl(1) = 'R'.
file = l_datafile.
IF cl_gui_frontend_services=>file_exist( file = file ) = 'X'.
ADD 1 TO datafiles.
ENDIF.
l_datafile+sl(1) = 'D'.
file = l_datafile.
IF cl_gui_frontend_services=>file_exist( file = file ) = 'X'.
ADD 1 TO datafiles.
ENDIF.
sl = sl + 8.
request = p_cofile+sl(3).
sl = sl - 8.
CONCATENATE request p_cofile+sl(7) INTO request.
TRANSLATE request TO UPPER CASE.
IF datafiles = 0.
MESSAGE e398(00)
WITH 'Corresponding data-files of transport request'(010)
request
'not found.'(011).
ELSE.
MESSAGE s398(00)
WITH datafiles
'data-files have been found for transport request'(012)
request.
ENDIF.
START-OF-SELECTION.
DATA:
parameter TYPE spar,
parameters TYPE TABLE OF spar.
CALL FUNCTION 'RSPO_R_SAPGPARAM'
EXPORTING
name = 'DIR_TRANS'
IMPORTING
value = transdir
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
filename = p_cofile+sl(11).
TRANSLATE filename TO UPPER CASE.
CONCATENATE transdir 'cofiles' filename
INTO filename
SEPARATED BY p_sepr.
OPEN DATASET filename FOR INPUT IN BINARY MODE.
ret = sy-subrc.
CLOSE DATASET filename.
IF NOT ret = 0.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Copy all files?'(a03)
IMPORTING
answer = ans
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
ELSE.
parameter-param = 'FILE'.
parameter-value = filename.
APPEND parameter TO parameters.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'File ''&FILE&'' already exists. Rewrite?'(a04)
IMPORTING
answer = ans
TABLES
parameter = parameters
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
ENDIF.
CHECK ans = '1'.
trfile = p_cofile+sl(11).
TRANSLATE trfile TO UPPER CASE.
PERFORM copy_file USING 'cofiles' trfile p_cofile.
trfile(1) = 'R'.
l_datafile+sl(1) = 'R'.
PERFORM copy_file USING 'data' trfile l_datafile.
IF datafiles > 1.
trfile(1) = 'D'.
l_datafile+sl(1) = 'D'.
PERFORM copy_file USING 'data' trfile l_datafile.
ENDIF.
IF p_addque = 'X'.
system = sy-sysid.
DO 1 TIMES.
* Check authority to add request to the import queue
CALL FUNCTION 'TR_AUTHORITY_CHECK_ADMIN'
EXPORTING
iv_adminfunction = 'TADD'
EXCEPTIONS
e_no_authority = 1
e_invalid_user = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CALL FUNCTION 'TMS_UI_APPEND_TR_REQUEST'
EXPORTING
iv_system = system
iv_request = request
iv_expert_mode = 'X'
iv_ctc_active = 'X'
EXCEPTIONS
cancelled_by_user = 1
append_request_failed = 2
OTHERS = 3.
CHECK sy-subrc = 0.
CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_REQUEST'
EXPORTING
iv_request = request
iv_target_system = system
IMPORTING
et_request_infos = et_request_infos
EXCEPTIONS
read_config_failed = 1
table_of_requests_is_empty = 2
system_not_available = 3
OTHERS = 4.
CLEAR request_info.
READ TABLE et_request_infos INTO request_info INDEX 1.
IF request_info-e070-korrdev = 'CUST'
AND NOT p_tarcli IS INITIAL.
CALL FUNCTION 'TMS_MGR_MAINTAIN_TR_QUEUE'
EXPORTING
iv_command = gc_tp_fillclient
iv_system = system
iv_request = request
iv_tarcli = p_tarcli
iv_monitor = 'X'
iv_verbose = 'X'
IMPORTING
et_tp_maintains = lt_tp_maintain
EXCEPTIONS
read_config_failed = 1
table_of_requests_is_empty = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
ENDIF.
* Check authority to start request import
CALL FUNCTION 'TR_AUTHORITY_CHECK_ADMIN'
EXPORTING
iv_adminfunction = 'IMPS'
EXCEPTIONS
e_no_authority = 1
e_invalid_user = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CALL FUNCTION 'TMS_UI_IMPORT_TR_REQUEST'
EXPORTING
iv_system = system
iv_request = request
iv_tarcli = p_tarcli
iv_some_active = space
EXCEPTIONS
cancelled_by_user = 1
import_request_denied = 2
import_request_failed = 3
OTHERS = 4.
ENDDO.
ENDIF.
*&--------------------------------------------------------------------*
*& Form copy_file
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->SUBDIR text
* -->FNAME text
* -->SOURCE_FILEtext
*---------------------------------------------------------------------*
FORM copy_file USING subdir fname source_file.
DATA: l_filename TYPE string.
l_filename = source_file.
CONCATENATE transdir subdir fname
INTO filename
SEPARATED BY p_sepr.
REFRESH datatab.
CLEAR flen.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
filetype = 'BIN'
IMPORTING
filelength = flen
CHANGING
data_tab = datatab[]
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 NE 0.
WRITE: / 'Error uploading file'(003), l_filename.
EXIT.
ENDIF.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
activity = sabc_act_write
filename = filename
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
IF sy-subrc <> 0.
FORMAT COLOR COL_NEGATIVE.
WRITE: / 'Write access denied. File'(013), filename.
FORMAT COLOR OFF.
EXIT.
ENDIF.
OPEN DATASET filename FOR OUTPUT IN BINARY MODE.
IF sy-subrc NE 0.
WRITE: / 'File open error'(004), trfile.
EXIT.
ENDIF.
LOOP AT datatab.
IF flen < 8192.
len = flen.
ELSE.
len = 8192.
ENDIF.
TRANSFER datatab-buf TO filename LENGTH len.
flen = flen - len.
ENDLOOP.
CLOSE DATASET filename.
WRITE: / 'File'(005), trfile, 'uploaded'(007).
ENDFORM. "copy_file