FTP

FTP(File transfer protocol)是一种标准的网络协议,用于在互联网上传递文件。SAP标准函数组是SFTP
在这里插入图片描述
SAP提供的FTP demo程序
RSFTP001 SAPFTP 版本
RSFTP002 执行 FTP 命令
RSFTP003 FTP 放置/获取测试
RSFTP004 FTP 复制
RSFTP005 SAPFTP 检查
RSFTP006 FTP 命令列表
RSFTP007 测试函数模块:FTP_SERVER_TO_R3/FTP_R3_TO_SE
RSFTP008 测试函数模块:FTP_CLIENT_TO_R3/FTP_R3_TO_CL
RSFTP009 通过验证测试 FTP 放置
RSFTP011 FTP 复制
RSFTP012 拆分 SAPFTP_SERVERS 中的主机名和端口号
相关函数
‘HTTP_SCRAMBLE’ "获取加密密码
‘FTP_CONNECT’ "连接ftp服务器
‘FTP_COMMAND’ "执行FTP命令
‘FTP_SERVER_TO_R3’ "拷贝ftp服务器文件到r3
‘FTP_COPY’ "拷贝文件到指定位置
‘FTP_DISCONNECT’ "断开FTP连接
‘RFC_CONNECTION_CLOSE’ "断开RFC链接

在这里插入图片描述

连接设置SM59创建,选择TCP/IP连接,也可以通过执行SAP的标准程序RSFTP005,自动创建两个名为SAPFTP何SAPFTPA的TCP/IP的RFC连接。
在这里插入图片描述
在这里插入图片描述

****FTP服务器上传文件
REPORT zftp3.

DATA: hdl      TYPE i,
      key      TYPE i VALUE 26101957,
      slen     TYPE i,
      cmd(100) TYPE c.


DATA: BEGIN OF result OCCURS 0,
        line(100) TYPE c,
      END OF result.

DATA lv_message TYPE char200.

PARAMETERS: p_host    TYPE char64 DEFAULT 'ftpserver',
            p_uname   TYPE char30 DEFAULT 'usname' LOWER CASE,
            p_pwd(60) TYPE c DEFAULT 'password' LOWER CASE,  "密码长度一定要够否则出错
            p_file    TYPE char255 DEFAULT 'test.txt',
            p_folder  TYPE char255 DEFAULT '/testjobs/' LOWER CASE.  "文件路径,必须以/结尾

PARAMETERS: rfcdest  LIKE rfcdes-rfcdest DEFAULT 'SAPFTP',
            compress TYPE c DEFAULT 'N'.


SET EXTENDED CHECK OFF.
*统计长度
slen = strlen( p_pwd ).


*权限检查
AUTHORITY-CHECK OBJECT 'S_ADMI_FCD'
         ID 'S_ADMI_FCD'
         FIELD 'SFTP'.
IF sy-subrc <> 0.
  MESSAGE 'no ftp authorization' TYPE 'I'.
  EXIT.
ENDIF.

*获取密码
CALL FUNCTION 'HTTP_SCRAMBLE'
  EXPORTING
    source      = p_pwd
    sourcelen   = slen
    key         = key
  IMPORTING
    destination = p_pwd.



*该函数可以定义有网关时账户密码,一般公司内部访问时无此设置
DO 6 TIMES.  "多连接几次 一次可能不成功
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            = p_uname
      password        = p_pwd
      host            = p_host
      rfc_destination = rfcdest
    IMPORTING
      handle          = hdl.
ENDDO.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    INTO  lv_message
                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4  .


  CONCATENATE 'CONNECT FTP FAILED!;' lv_message INTO lv_message.

  MESSAGE lv_message TYPE 'E'.
ENDIF.


*执行FTP命令  打开目标ftp的文件夹
CONCATENATE 'cd' p_folder INTO cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
  EXPORTING
    handle        = hdl
    command       = cmd
    compress      = compress
  TABLES
    data          = result
  EXCEPTIONS
    command_error = 1
    tcpip_error   = 2.
IF sy-subrc <> 0." 调用中出错立即断开连接
  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = hdl.
  EXIT.
ENDIF.

LOOP AT result.
  WRITE AT / result-line.
ENDLOOP.
REFRESH result.


* 打开本地ftp文件夹
CONCATENATE 'lcd' 'C:\TEMP\' INTO cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
  EXPORTING
    handle        = hdl
    command       = cmd
    compress      = compress
  TABLES
    data          = result
  EXCEPTIONS
    command_error = 1
    tcpip_error   = 2.
IF sy-subrc <> 0." 调用中出错立即断开连接
  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = hdl.
  EXIT.
ENDIF.

LOOP AT result.
  WRITE AT / result-line.
ENDLOOP.

REFRESH result.

* 将本地文件放到目标ftp文件夹中
CONCATENATE 'put ' p_file INTO cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
  EXPORTING
    handle        = hdl
    command       = cmd
    compress      = compress
  TABLES
    data          = result
  EXCEPTIONS
    command_error = 1
    tcpip_error   = 2.
IF sy-subrc <> 0." 调用中出错立即断开连接
  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = hdl.
  EXIT.
ENDIF.
LOOP AT result.
  WRITE AT / result-line.
ENDLOOP.
REFRESH result.

* 断开FTP连接
CALL FUNCTION 'FTP_DISCONNECT'
  EXPORTING
    handle = hdl.


* 断开RFC链接
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
  EXPORTING
    destination = rfcdest
  EXCEPTIONS
    OTHERS      = 1.

CONCATENATE sy-datum sy-uzeit sy-uname  '文件传输成功!'  INTO lv_message.
MESSAGE lv_message TYPE 'S'.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值