zoukankan      html  css  js  c++  java
  • 函数使用十一: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上传记录的需求,可以新建一个表:文件名,文件类型,日期,时间,用户名。。。这个表在展示和下载删除的时候能够精确的执行下载和删除文件。

  • 相关阅读:
    java程序员究竟应该掌握点什么
    Java程序员集合框架面试题
    数组名和数组名取地址的区别
    二维、三维数组转一维数组
    函数指针 行指针 指针数组
    转:如何成为一个优秀的程序员
    转:最小堆的数组实现
    for_each使用方法详解[转]
    c++虚函数的作用是什么?
    转:C语言 可变参数
  • 原文地址:https://www.cnblogs.com/sapSB/p/7778921.html
Copyright © 2011-2022 走看看