函数使用十一:FTP

网上很多FTP说明的文档,也很详细,写这玩意是备份一下:

注:有的系统需要配置FTP地址和端口,有的好像没有。。。

       SM30->SAPFTP_SERVERS_V,默认端口21。

在做之前可以做个小测试:程序:RSFTP002

输入用户名,密码,地址,命令,RFC选择SAPFTPA

这个程序很简单的,可以点进去看看,就是开,运行,关。。。

对于那些目录较深的FTP,可以COPY出来,多加几个COMMAND

 常用的命令就是cd xxx目录切换

                          nlist  显示列表

                          delete xxxxx删除文件

创建/删除文件夹的权限一般不做。

因为是N手了,所以函数有点乱:

1.FTP 连接:

FUNCTION zcrm_ftp_connect.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_FTP_USER) TYPE  ZE_FTP_USER
*"     REFERENCE(IV_HOST) TYPE  ZE_FTP_HOST
*"  EXPORTING
*"     REFERENCE(EV_HANDLE) TYPE  I
*"  CHANGING
*"     REFERENCE(IV_PASSWORD) TYPE  ZE_FTP_PW
*"  EXCEPTIONS
*"      NOT_CONNECTED
*"----------------------------------------------------------------------
  CONSTANTS cons_key TYPE i VALUE 26101957.
  DATA:lv_slenth TYPE i.
* 连接FTP服务器
  lv_slenth = STRLEN( iv_password ).

  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      SOURCE      = iv_password
      sourcelen   = lv_slenth
      key         = cons_key
    IMPORTING
      destination = iv_password.

* Open the ftp server.
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            = iv_ftp_user
      password        = iv_password
      host            = iv_host
      rfc_destination = 'SAPFTPA'
    IMPORTING
      handle          = ev_handle
    EXCEPTIONS
      not_connected   = 1
      OTHERS          = 2.
  IF sy-subrc NE 0.
    MESSAGE e007(zhntcrm01) RAISING not_connected.
  ENDIF.


ENDFUNCTION.

2.文件上传:

FUNCTION zcrm_zsv3_to_ftp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(PROCESS_TYPE) TYPE  CRMT_PROCESS_TYPE
*"     VALUE(XSTRING) TYPE  XSTRING
*"     VALUE(FILETYPE) TYPE  STRING
*"     VALUE(DATE) TYPE  DATUM
*"  EXPORTING
*"     VALUE(MESSAGE) TYPE  STRING
*"----------------------------------------------------------------------
  DATA:lv_xstring TYPE xstring.
  DATA:lv_len TYPE i.
  DATA lv_handle TYPE i.
  DATA lv_fname TYPE char100.
  DATA: lv_user TYPE ze_ftp_user VALUE 'CRM'.
  DATA lv_password TYPE ze_ftp_pw VALUE 'xxxxxxxxxxx'.
  DATA:lv_host TYPE ze_ftp_host VALUE 'xx.xx.x.xx'.
  DATA:gt_tab TYPE TABLE OF blob,
       gw_tab LIKE LINE OF gt_tab.


  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = xstring
    IMPORTING
      output_length = lv_len
    TABLES
      binary_tab    = gt_tab.

  CALL FUNCTION 'ZCRM_FTP_CONNECT'
    EXPORTING
      iv_ftp_user   = lv_user
      iv_host       = lv_host
    IMPORTING
      ev_handle     = lv_handle
    CHANGING
      iv_password   = lv_password
    EXCEPTIONS
      not_connected = 1
      OTHERS        = 2.
  IF sy-subrc <> 0.
    message = 'Connect error'.
    EXIT.
  ENDIF.

  CONCATENATE '/CRM/Dealer Refund/Get Refund Order/'
'C506810'
  date '.' filetype INTO lv_fname.

  CALL FUNCTION 'FTP_R3_TO_SERVER'
    EXPORTING
      handle        = lv_handle
      fname         = lv_fname
      blob_length   = lv_len
    TABLES
      blob          = gt_tab[]
    EXCEPTIONS
      tcpip_error   = 1
      command_error = 2
      data_error    = 3
      OTHERS        = 4.
  IF sy-subrc <> 0.
    message = 'File Upload Fail'.
  ENDIF.

  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = lv_handle.

ENDFUNCTION.

其中目录+文件名+FTP_R3_TO_SERVER  上传文件到FTP目录

其中目录+文件名+FTP_SERVER_TO_R3  下载FTP目录文件

对于那种使用命令的,需要可以直接参考标准程序002代码

对于一些需要看到FTP上传记录的需求,可以新建一个表:文件名,文件类型,日期,时间,用户名。。。这个表在展示和下载删除的时候能够精确的执行下载和删除文件。

原文地址:https://www.cnblogs.com/sapSB/p/7778921.html