13916729435 发表于 2015-5-27 06:22:40

SAP FTP Function

本文示例如何使用SAP FTP Function将文件从应用服务器传输到另外一个FTP服务器上。

DATA: BEGIN OF ig_ftp_result OCCURS 0,
      line(100),
      END OF ig_ftp_result.

DATA: l_path(128)       TYPE c."文件路径,必须以/结尾
DATA: l_filename(128)   TYPE c."文件名
DATA: l_ftpcommand(100) TYPE c."FTP命令
DATA: l_handle          TYPE i.               "HAND
"源路径,必须以/结尾
DATA: cons_source(128) TYPE c . " VALUE '/usr/sap/SY-SYSID/SYS/src/'.
DATA:cons_dens LIKE zftpt-zpath.                      "目标路径

CONSTANTS cons_key TYPE iVALUE 26101957.

*// INITIALIZATION
INITIALIZATION.
*服务器上下载文件的路径
CONCATENATE '/usr/sap/' sy-sysid '/SYS/src/' INTO cons_source.

*// START OF SELECTION
START-OF-SELECTION.
PERFORM frm_ftp_file.


FORM frm_ftp_file .
DATA:
    l_dstlen          TYPE i,               "DESTINATION LEN
    l_pw(64)          TYPE c.               "密码

* 连接FTP服务器
l_pw = 'password'.

*-- FTP_CONNECT requires an encrypted password to work
*   CREATE THE NEW PW BASE ON LOGIN FTP PASS WORD.
CALL 'AB_RFC_X_SCRAMBLE_STRING'         "PASS WORD BUILD FUNCTION
    ID 'SOURCE'      FIELD l_pw         "PASS WORD
    ID 'KEY'         FIELD cons_key      "THE KEY TO CREATE NEW PW
    ID 'SCR'         FIELD 'X'
    ID 'DESTINATION' FIELD l_pw         "PASS WORD
    ID 'DSTLEN'      FIELD l_dstlen.      "NEW PASS WORD LEN

DO 3 TIMES.
*   OPEN THE FTP SERVER.
    CALL FUNCTION 'FTP_CONNECT'
      EXPORTING
      user            = 'username'   "USER
      password      = l_pw             "PASS WORD
      host            = '192.168.1.10'   
      rfc_destination = 'SAPFTPA'      "DEFAULT
      IMPORTING
      handle          = l_handle
      EXCEPTIONS
      not_connected   = 1
      OTHERS          = 2.

    IF sy-subrc = 0.
      EXIT.
    ENDIF.

ENDDO.

IF sy-subrc0.
    WRITE :/ sy-datum, sy-uzeit, sy-uname,'CONNECT FTP FAILED!'.            "MESSAGEG
    STOP.
ENDIF.


* Change local directory
CLEAR l_ftpcommand.
CONCATENATE 'lcd' cons_source INTO l_ftpcommand SEPARATED BY space.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
IF pr_return = '1'.
    WRITE:/ sy-datum, sy-uzeit, sy-uname,'FTP改变本地路径错误!'.
    STOP.
ENDIF.

* Change ftp directory
IF cons_dens''.
    CLEAR l_ftpcommand.
    CONCATENATE 'cd' cons_dens INTO l_ftpcommand SEPARATED BY space.
    PERFORM frm_ftp_command USING l_ftpcommand pr_return.
    IF pr_return = '1'.
      WRITE:/ sy-datum, sy-uzeit, sy-uname,'改变FTP路径出现错误!'.
      STOP.
    ENDIF.
ENDIF.

* Change TRANSFER MODE
CLEAR l_ftpcommand.
*l_ftpcommand = 'binary'.
l_ftpcommand = 'ascii'.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
IF pr_return = '1'.
    WRITE:/ sy-datum, sy-uzeit, sy-uname,'改变FTP传输模式出现错误!'.
    STOP.
ENDIF.

* Put File into FTP SERVER
CLEAR l_ftpcommand.
CONCATENATE 'put'l_filename INTO l_ftpcommand SEPARATED BY space.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
IF pr_return = '1'.
    WRITE:/ sy-datum, sy-uzeit, sy-uname,'文件传输中出现错误!'.
    STOP.
ENDIF.

*断开FTP服务器
CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = l_handle.

WRITE:/ sy-datum, sy-uzeit, sy-uname,'文件传输成功!'.

ENDFORM.                  " FRM_FTP_FILE

************************************************************************
*& FORM FRM_FTP_COMMAND                                                *
************************************************************************
*& FTP Command                                                         *
************************************************************************
FORM frm_ftp_command USING pr_command pr_ret.
CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle                = l_handle
      command               = pr_command
*   COMPRESS            =
*   RFC_DESTINATION       =
*   VERIFY                =
*   IMPORTING
*   FILESIZE            =
*   FILEDATE            =
*   FILETIME            =
    TABLES
      data                  = ig_ftp_result
   EXCEPTIONS
   tcpip_error         = 1
   command_error         = 2
   data_error            = 3
   OTHERS                = 4
            .

* Disconnect
IF sy-subrc0.
    pr_ret = '1'.
    CALL FUNCTION 'FTP_DISCONNECT'
      EXPORTING
      handle = l_handle.
    EXIT.
ENDIF.

ENDFORM.                  "FRM_FTP_COMMAND
页: [1]
查看完整版本: SAP FTP Function