REPORT ZZZZ.
DATA: USER(30) TYPE C VALUE 'sap' ,
PWD(30) TYPE C VALUE 'sapftp1234a',
HOST(64) TYPE C VALUE '10.12.38.45',
FTP_PWD(30) TYPE C,
DEST LIKE RFCDES-RFCDEST VALUE 'SAPFTPA',
KEY TYPE I VALUE 26101957,
SLEN TYPE I,
HDL TYPE I,
LINE TYPE I,
CC_ASCII(5) VALUE 'ascii',
SAP_DIR TYPE STRING,
FTP_DIR TYPE STRING,
FTPCOMMAND(100) TYPE C. "
DATA: BEGIN OF RESULT OCCURS 0,
LINE(100) TYPE C,
END OF RESULT.
DATA:BEGIN OF FILE OCCURS 0,
NAME(30) TYPE C,
END OF FILE.
SLEN = STRLEN( PWD ).
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = PWD
SOURCELEN = SLEN
KEY = KEY
IMPORTING
DESTINATION = FTP_PWD.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = USER
PASSWORD = FTP_PWD
HOST = HOST
RFC_DESTINATION = DEST
IMPORTING
HANDLE = HDL.
IF SY-SUBRC NE 0.
STOP .
ENDIF.
******get ftp file list
CONCATENATE 'dir' 'plm' INTO FTPCOMMAND SEPARATED BY SPACE.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
HANDLE = HDL
COMMAND = FTPCOMMAND
TABLES
DATA = RESULT
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.
IF SY-SUBRC = 0.
DO 3 TIMES.
DELETE RESULT INDEX 1.
ENDDO.
DESCRIBE TABLE RESULT LINES LINE.
DELETE RESULT INDEX LINE.
REFRESH FILE.
CLEAR FILE.
LOOP AT RESULT.
FILE-NAME = RESULT-LINE+39.
APPEND FILE.
CLEAR FILE.
ENDLOOP.
ELSE.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
STOP.
ENDIF.
IF FILE[] IS NOT INITIAL.
DATA: ST_COMM(250),
TB_COMM LIKE TABLE OF ST_COMM.
REFRESH: TB_COMM.
CLEAR: ST_COMM.
ST_COMM = CC_ASCII.
APPEND ST_COMM TO TB_COMM.
CLEAR ST_COMM.
LOOP AT FILE.
CONCATENATE 'plm/' FILE-NAME INTO FTP_DIR.
CONCATENATE 'e:\ftp\plm\' FILE-NAME INTO SAP_DIR.
CONCATENATE 'get' FTP_DIR SAP_DIR INTO ST_COMM SEPARATED BY SPACE.
APPEND ST_COMM TO TB_COMM.
CLEAR: ST_COMM.
ENDLOOP.
*-------get ftp file to sap server
DATA:ST_RSLT(100) TYPE C,
TB_RSLT LIKE TABLE OF ST_RSLT.
CALL FUNCTION 'FTP_COMMAND_LIST'
EXPORTING
HANDLE = HDL
TABLES
DATA = TB_RSLT
COMMANDS = TB_COMM
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.
CASE SY-SUBRC.
WHEN '1'.
RESULT = 'N'.
WRITE :/(10) SY-SUBRC,
(10) 'Command Error'.
WHEN '2'.
RESULT = 'N'.
WRITE :/(10) SY-SUBRC,
(10) 'Tcpip Error'.
WHEN OTHERS.
RESULT = 'Y'.
ENDCASE.
WRITE :/(20) 'TB Result'.
LOOP AT TB_RSLT INTO ST_RSLT.
WRITE :/(100) ST_RSLT.
ENDLOOP.
WRITE :/(20) 'TB Command'.
LOOP AT TB_COMM INTO ST_COMM.
WRITE :/(100) ST_COMM.
ENDLOOP.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
DESTINATION = DEST
EXCEPTIONS
OTHERS = 1.
ELSE.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
STOP.
ENDIF.
FTP的相关操作:http://www.cnblogs.com/eric0701/archive/2012/01/06/2314218.html
在使用标准 functions前,确保已经安装SAPFTP.EXE。请先使用程序:RSFTP005 进行SAPFTP 检查。
RSFTP001 - SAPFTP 版本检查
RSFTP002 - 执行 FTP 命令
RSFTP003 - 测试
RSFTP004 - FTP 复制
RSFTP005 - SAPFTP 检查
RSFTP006 - FTP 命令清单
RSFTP007 - Test FB:FTP_SERVER_TO_R3 / FTP_R3_TO_SERVER 读取FTP数据到R3 / R3数据写入FTP。
RSFTP008 - Test FB:FTP_CLIENT_TO_R3 / FTP_R3_TO_CLIENT 读取FTP数据到客户端 / 客户端数据写入FTP。
相关的 SAP function module: FTP*。
HTTP_SCRAMBLE 密码加密
FTP_CONNECT 连接到FTP。
FTP_COMMAND 执行 FTP 命令。
FTP_DISCONNECT 断开FTP连接
FTP_R3_TO_SERVER 将内表数据写入FTP文件中。
FTP_SERVER_TO_R3 从FTP将文件读取到内表。
FTP程序大致流程为:HTTP_SCRAMBLE , FTP_CONNECT ,FTP_COMMAND ,FTP_DISCONNECT。
FTP_COMMAND 中输入标准的FTP命令。如:更改 FTP 目录 "cd dir", 更改本地目录 "lcd localdir",上传文件"put file"。