您的位置:首页 > Web前端

如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)

2007-01-25 11:31 816 查看
在sap里有GUI_DOWNLOAD 函数将sap的数据下载到客户端机器(presentation server),而Dataset则是将数据传输到应用服务器(Application server)。然而在有些时候需要将数据传输到第三方其他系统(3rd Party System),这是我们就可以使用FTP命令来完成数据传输。

1、相关函数
HTTP_SCRAMBLE
FTP_CONNECT
FTP_R3_TO_SERVER
FTP_DISCONNECT
RFC_CONNECTION_CLOSE

2、函数说明
HTTP_SCRAMBLE: 将密码转化为SAP的格式
样例代码
l_pwd = p_pwd.
l_slen = STRLEN( l_pwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
exporting
source = l_pwd
sourcelen = l_slen
key = c_key
importing
destination = l_pwd.

FTP_CONNECT : 连接其他系统
* To Connect to the Server using FTP
样例代码
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = p_user
password = l_pwd
host = p_host
rfc_destination = c_dest
IMPORTING
handle = w_hdl
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

FTP_R3_TO_SERVER: 将SAP的内表数据按字符方式传输到其他系统.
样例代码
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
handle = w_hdl
fname = <file path of destination system>
character_mode = 'X'
TABLES
text = <internal table data>
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 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
RAISING invalid_output_file.
ENDIF.

FTP_DISCONNECT: 关闭SAP与其他系统的连接.
样例代码
* To disconnect the FTP
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = w_hdl.

RFC_CONNECTION_CLOSE:关闭SAP与其他系统的RFC连接.
样例代码
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = c_dest
EXCEPTIONS
OTHERS = 1.

3、SAP的样例代码
report rsftp004.

parameters: suser(30) type c lower case,
spwd(30) type c lower case,
shost(64) type c lower case,
duser(30) type c lower case,
dpwd(30) type c lower case,
dhost(64) type c lower case,
lines type i default 1000,
pasv.
selection-screen skip 1.
parameters: dest like rfcdes-rfcdest default 'SAPFTP'.

types: begin of text,
line(120) type c,
end of text.

types: begin of blob,
line(80) type x,
end of blob.

data: shdl type i,
dhdl type i,
key type i value 26101957,
slen type i,
bline(80) type x,
sdocid like sysuuid-c,
ddocid like sysuuid-c,
blob_length type i,
cmd(120),
error.

data: result type table of text with header line,
bindata type table of blob with header line.

* Create data

set extended check off.
error = 0.
bline = '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
'0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
'0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
'0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F'.

do lines times.
bindata-line = bline.
append bindata.
enddo.

call function 'SYSTEM_UUID_C_CREATE'
importing
uuid = sdocid.

call function 'SYSTEM_UUID_C_CREATE'
importing
uuid = ddocid.

* connect to ftp server - source

slen = strlen( spwd ).

call function 'HTTP_SCRAMBLE'
exporting
source = spwd
sourcelen = slen
key = key
importing
destination = spwd.

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Connect to FTP Server - Source'.

call function 'FTP_CONNECT'
exporting
user = suser
password = spwd
host = shost
rfc_destination = dest
importing
handle = shdl.

* connect to ftp server - destination

slen = strlen( dpwd ).

call function 'HTTP_SCRAMBLE'
exporting
source = dpwd
sourcelen = slen
key = key
importing
destination = dpwd.

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Connect to FTP Server - Destination'.

call function 'FTP_CONNECT'
exporting
user = duser
password = dpwd
host = dhost
rfc_destination = dest
importing
handle = dhdl.

if not pasv is initial.
refresh result.

call function 'FTP_COMMAND'
exporting
handle = shdl
command = 'set passive on'
tables
data = result
exceptions
tcpip_error = 1
command_error = 2
data_error = 3.

if sy-subrc eq 0.
write: / 'Set passive mode - Source'.
endif.

refresh result.

call function 'FTP_COMMAND'
exporting
handle = dhdl
command = 'set passive on'
tables
data = result
exceptions
tcpip_error = 1
command_error = 2
data_error = 3.

if sy-subrc eq 0.
write: / 'Set passive mode - Destination'.
endif.
skip 1.

endif.

* Create file on Source

blob_length = lines * 80.

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Create File on Source'.

call function 'FTP_R3_TO_SERVER'
exporting
handle = shdl
fname = sdocid
blob_length = blob_length
tables
blob = bindata.

* Copy Files

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Copy File to Destination'.

refresh result.

call function 'FTP_COPY'
exporting
handle_source = shdl
handle_destination = dhdl
file_source = sdocid
file_destination = ddocid
tables
data = result
exceptions
tcpip_error = 1
command_error = 2
data_error = 3
others = 4.

if sy-subrc ne 0. error = 1. endif.

loop at result.
write / result-line.
endloop.

* compare content

if error eq 0.

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Compare Content'.

skip 1.
refresh bindata.

call function 'FTP_SERVER_TO_R3'
exporting
handle = shdl
fname = sdocid
importing
blob_length = blob_length
tables
blob = bindata.

slen = lines * 80.

if slen ne blob_length.
error = 1.
write: / 'Length error - expected',slen,'received',blob_length.
else.
loop at bindata.
if bindata-line ne bline.
slen = sy-tabix * 80.
write: / 'Content error at',slen,bindata-line.
error = 1.
exit.
endif.
endloop.
endif.

refresh bindata.

call function 'FTP_SERVER_TO_R3'
exporting
handle = dhdl
fname = ddocid
importing
blob_length = blob_length
tables
blob = bindata.

slen = lines * 80.

if slen ne blob_length.
error = 1.
write: / 'Length error - expected',slen,'received',blob_length.
else.
loop at bindata.
if bindata-line ne bline.
slen = sy-tabix * 80.
write: / 'Content error at',slen,bindata-line.
error = 1.
exit.
endif.
endloop.
endif.

if error eq 0.
write: / 'Content compare OK'.
else.
write: / 'Content compare error'.
endif.
skip 1.

endif.

* Delete

concatenate 'del' sdocid into cmd separated by ' '.
refresh result.

call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Delete Files'.

call function 'FTP_COMMAND'
exporting
handle = shdl
command = cmd
tables
data = result
exceptions
tcpip_error = 1
command_error = 2
data_error = 3.

loop at result.
write / result-line.
endloop.

concatenate 'del' ddocid into cmd separated by ' '.
refresh result.

call function 'FTP_COMMAND'
exporting
handle = dhdl
command = cmd
tables
data = result
exceptions
tcpip_error = 1
command_error = 2
data_error = 3.

loop at result.
write / result-line.
endloop.

* Disconnect
call function 'FTP_DISCONNECT'
exporting
handle = shdl.
call function 'FTP_DISCONNECT'
exporting
handle = dhdl.

call function 'RFC_CONNECTION_CLOSE'
exporting
destination = dest
exceptions
others = 1.

if error ne 0.
format color col_negative.
write: / 'Error im Test'.
else.
format color col_positive.
write: / ' Test OK'.
endif.

* password not visible

at selection-screen output.

loop at screen.
if screen-name = 'SPWD' or screen-name = 'DPWD'.
screen-invisible = '1'.
modify screen.
endif.
endloop.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐