ABAP code 实现CR下载及传输

这两段代码分别提供了SAP系统中运输请求的下载和上传功能。`YRS_DOWNLOAD_TRANSPORT_REQUEST`报告用于从客户端PC下载二进制文件到指定目录,并检查权限。`YRS_UPLOAD_TRANSPORT_REQUEST`报告则实现了将客户端的文件上传到SAP系统,添加到导入队列并执行导入操作,同时进行权限检查。
摘要由CSDN通过智能技术生成

1.cr下载

Report YRS_DOWNLOAD_TRANSPORT_REQUEST
*======================================================================*
* Initial idea and first release by Igor Yaskevitch (IBS), 2003 *
* Enhancements by Sergey Korolev, 2005 (Added F4 value *
* requests, authority checks, TMS function usage) *
*----------------------------------------------------------------------*
* Function : This is a utility tool for downloading binary *
* files of transport request to a Client PC *
*======================================================================*
REPORT yrs_download_transport_request.
PARAMETERS:
p_reqest TYPE trkorr OBLIGATORY,
p_folder(255) TYPE c LOWER CASE, p_sepr OBLIGATORY.

DATA:
folder TYPE string,
retval LIKE TABLE OF ddshretval WITH HEADER LINE,
fldvalue LIKE help_info-fldvalue,
transdir TYPE text255,
filename(255),
trfile(20) TYPE c,
datatab TYPE TABLE OF text8192 WITH HEADER LINE,
len TYPE i,
flen TYPE i.

TYPE-POOLS: sabc, stms, trwbo.

INITIALIZATION.
CONCATENATE sy-sysid 'K*' INTO p_reqest.

IF sy-opsys = 'Windows NT'.
p_sepr = ''.
ELSE.
p_sepr = '/'.
ENDIF.

* 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.'(011).
* ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_reqest.
DATA:
tt_system TYPE TABLE OF tmscsys WITH HEADER LINE,
es_selected_request TYPE trwbo_request_header,
es_selected_task TYPE trwbo_request_header,
iv_organizer_type TYPE trwbo_calling_organizer,
is_selection TYPE trwbo_selection.

iv_organizer_type = 'W'. is_selection-reqstatus = 'R'.
CALL FUNCTION 'TR_PRESENT_REQUESTS_SEL_POPUP'
EXPORTING
iv_organizer_type = iv_organizer_type
is_selection = is_selection
IMPORTING
es_selected_request = es_selected_request
es_selected_task = es_selected_task.
p_reqest = es_selected_request-trkorr.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.
DATA: title TYPE string.

title = 'Select target folder'(005).
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = title
CHANGING
selected_folder = folder
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.

CALL FUNCTION 'CONTROL_FLUSH'
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.

p_folder = folder.

AT SELECTION-SCREEN ON p_reqest.
DATA: request_info TYPE stms_wbo_request,
request_infos TYPE stms_wbo_requests.

REFRESH request_infos.
CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_REQUEST'
EXPORTING
iv_request = p_reqest
iv_header_only = 'X'
IMPORTING
et_request_infos = request_infos
EXCEPTIONS
read_config_failed = 1
table_of_requests_is_empty = 2
system_not_available = 3
OTHERS = 4.

IF sy-subrc 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR request_info.
READ TABLE request_infos INTO request_info INDEX 1.
IF sy-subrc NE 0
OR request_info-e070-trkorr IS INITIAL.
MESSAGE e398(00) WITH 'Request'(006) p_reqest 'not found'(007).
ELSEIF request_info-e070-trstatus NE 'R'.
MESSAGE e398(00)
WITH 'You must release request'(008)
request_info-e070-trkorr
'before downloading'(009).
ENDIF.

START-OF-SELECTION.
folder = p_folder.
CONCATENATE p_reqest+3(7) '.' p_reqest(3) INTO trfile.

CALL FUNCTION 'RSPO_R_SAPGPARAM'
EXPORTING
name = 'DIR_TRANS'
IMPORTING
value = transdir
EXCEPTIONS
error = 0
OTHERS = 0.

PERFORM copy_file USING 'cofiles' trfile.
trfile(1) = 'R'.
PERFORM copy_file USING 'data' trfile.
trfile(1) = 'D'.
PERFORM copy_file USING 'data' trfile.
*---------------------------------------------------------------------*
* FORM copy_file *
*---------------------------------------------------------------------*
* --> SUBDIR * * --> FNAME *
*---------------------------------------------------------------------*
FORM copy_file USING subdir fname.
DATA:
auth_filename TYPE authb-filename,
gui_filename TYPE string.

CONCATENATE transdir subdir fname
INTO filename
SEPARATED BY p_sepr.

REFRESH datatab.
CLEAR flen.

auth_filename = filename.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
activity = sabc_act_read
filename = auth_filename
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.

IF sy-subrc 0.
FORMAT COLOR COL_NEGATIVE.
WRITE: / 'Read access denied. File'(001),
filename.
FORMAT COLOR OFF. EXIT.
ENDIF.

OPEN DATASET filename FOR INPUT IN BINARY MODE.

IF sy-subrc NE 0.
FORMAT COLOR COL_TOTAL.
WRITE: / 'File open error'(010), filename.
FORMAT COLOR OFF. EXIT.
ENDIF.

DO.
CLEAR len.
READ DATASET filename INTO datatab LENGTH len.
flen = flen + len.
IF len > 0. APPEND datatab. ENDIF.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET filename.
CONCATENATE p_folder '' fname INTO gui_filename.

CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = flen
filename = gui_filename
filetype = 'BIN'
CHANGING
data_tab = datatab[]
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
OTHERS = 24.

IF sy-subrc = 0.
WRITE: / 'File'(002), filename, 'downloaded. Length'(003), flen.
ELSE.
FORMAT COLOR COL_NEGATIVE.
WRITE: / 'File download error. Filename:'(004), filename.
FORMAT COLOR OFF.
ENDIF.
ENDFORM. "copy_file

2.CR导入上传

Report YRS_UPLOAD_TRANSPORT_REQUEST

*======================================================================*
* Initial idea and first release by Igor Yaskevitch (IBS), 2003 *
* Enhancements by Sergei Korolev, 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 yrs_upload_transport_request.

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).
IF sy-opsys = 'Windows NT'.
p_sepr = ''.
ELSE.
p_sepr = '/'.
ENDIF.
** 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 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 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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值