ABAP FTP文件处理

一、基础知识

1.操作FTP,需要用户具有权限,如下图:

2. SAPFTP_SERVERS维护FTP服务器地址

3.SAP连接FTP标准示例程序:

RSFTP001                       SAPFTP 版本

RSFTP002                       执行 FTP 命令

RSFTP003                       FTP 放置/获取测试

RSFTP004                       FTP 复制

RSFTP005                       SAPFTP 检查

注意:RSFTP005可自动创建两个名为SAPFTP和SAPFTPA的TCP/IP的RFC链接

RSFTP006                       FTP 命令列表

RSFTP007                       测试 FB:FTP_SERVER_TO_R3 / FTP_R3_TO_SERVER

RSFTP008                       测试 FB:FTP_CLIENT_TO_R3 / FTP_R3_TO_CLIENT

RSFTP009                       通过验证测试 FTP 放置

RSFTP011                       FTP 复制

RSFTP012                       拆分 SAPFTP_SERVERS 中的主机名和端

4.常用的函数(Function Module)

FTP_CONNECT                链接FTP

注意:FTP_CONNECT的Destination的两个参数区别

SAPFTP    用于SAP客户端前端执行(把FTP服务器的文件下载到本地电脑路径,或者上传本地文件)

SAPFTPA  用于SAP服务器端执行(把FTP服务器的文件放到SAP服务器路径)

FTP_COMMAND                 执行FTP命令

FTP_DISCONNECT             断开FTP

FTP_R3_TO_SERVER        将R3数据写入FTP

FTP_SERVER_TO_R3        读取FTP数据到R3(*.txt,*.dat,*.csv)

注意:中文乱码问题

把内表数据用函数SCMS_TEXT_TO_BINARY转换成2进制

把读取FTP数据用函数SCMS_BINARY_TO_TEXT转换

这两种情况需要FTP_SERVER_TO_R3/FTP_R3_TO_SERVER使用BLOB和BLOB_LENGTH

FTP_R3_TO_CLIENT         客户端数据写入FTP

FTP_CLIENT_TO_R3         读取FTP数据到客户端

二、案例程序(自己搭建的一个本地FTP进行的测试,不会搭建自行百度)

选择屏:

功能:

1、上传文件

1).获取上传文件

2).查看上传结果

3).代码

"获取文件夹路径,文件名,文件全路径
      PERFORM frm_get_uppath CHANGING ls_up_path ls_up_file ls_up_fname.
      "指定本地文件路径
      CONCATENATE 'lcd' ls_up_path INTO gt_ftp_com SEPARATED BY space.
      APPEND gt_ftp_com.
      "指定本地文件文件名
      CONCATENATE 'put' ls_up_fname INTO gt_ftp_com SEPARATED BY space.
      APPEND gt_ftp_com.
      "执行FTP指令
      PERFORM frm_execute_handle TABLES gt_ftp_com.
*&---------------------------------------------------------------------*
*& Form frm_get_uppath
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_UP_PATH
*&---------------------------------------------------------------------*
FORM frm_get_uppath  CHANGING ps_up_path
                              ps_up_file
                              ps_up_fname.
  DATA: abap_encoding TYPE abap_encoding VALUE 'UTF-8'.
  DATA: ls_up_path  TYPE string,
        ls_up_file  TYPE string,
        ls_up_fname TYPE string.
  DATA:lv_ucomm TYPE sy-ucomm.
  CLEAR: lv_ucomm,ls_up_path,ls_up_file,ls_up_fname.

  "获取文件全路径,文件名,文件夹路径
  CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'
    EXPORTING
      window_title  = '打开文件'
      with_encoding = abap_true
    IMPORTING
      path          = ls_up_path        "文件夹路径
      filename      = ls_up_fname       "文件名
      fullpath      = ls_up_file        "文件全路径
      file_encoding = abap_encoding.

  lv_ucomm = sy-ucomm.
  IF lv_ucomm EQ 'LOAD'.
    ps_up_file  = ls_up_file.
    ps_up_fname = ls_up_fname.
    ps_up_path  = ls_up_path.
  ELSE.
    "断开FTP,RFC链接
    PERFORM frm_ftp_disconnect.
    MESSAGE e001(00) WITH '取消获取文件操作'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_execute_uploda
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_execute_handle TABLES pt_ftp_path STRUCTURE gt_ftp_com.

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

  CLEAR:lt_rs_data.
  FREE:lt_rs_data.
  LOOP AT pt_ftp_path FROM 1.
    "执行FTP指令
    CALL FUNCTION 'FTP_COMMAND'
      EXPORTING
        handle        = gv_handle
        command       = pt_ftp_path-cmd
        compress      = gc_compress
      TABLES
        data          = lt_rs_data
      EXCEPTIONS
        tcpip_error   = 1
        command_error = 2
        data_error    = 3
        OTHERS        = 4.
    IF sy-subrc <> 0.
      PERFORM frm_ftp_disconnect.
      MESSAGE e001(00) WITH '操作执行失败!'.
      EXIT.
    ELSE.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage = 100               "进度
          text       = '操作执行成功!'. "显示文本
      MESSAGE s001(00) WITH '操作执行成功!'.
    ENDIF.
  ENDLOOP.

ENDFORM.

2、下载文件:

1).获取下载地址

2).获取FTP文件目录,进行选择下载

3).文件是否存在校验

4).下载结果查看

5.代码

"获取下载路径
      PERFORM frm_get_dwpath CHANGING ls_dw_path.
      "获取FTP文件名
      PERFORM frm_get_fname CHANGING ls_dw_fname.
      "检查文件是否存在
      PERFORM frm_check_dw USING ls_dw_path ls_dw_fname.
      "指定本地文件路径
      CONCATENATE 'lcd' ls_dw_path INTO gt_ftp_com SEPARATED BY space.
      APPEND gt_ftp_com.
      "指定获取文件名
      CONCATENATE 'get' ls_dw_fname INTO gt_ftp_com SEPARATED BY space.
      APPEND gt_ftp_com.
      "执行FTP指令
      PERFORM frm_execute_handle TABLES gt_ftp_com.
*&---------------------------------------------------------------------*
*& Form frm_get_dwpath
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_DW_PATH
*&---------------------------------------------------------------------*
FORM frm_get_dwpath  CHANGING ps_dw_path.
  DATA: ls_dw_path  TYPE string.
  CLEAR:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ABAP小码奴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值