SAP 通过FTP把txt文件数据获取到内表

2023-10-13 16:15:05 浏览数 (2)

什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。

该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明 和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。

在TCP/IP协议中, 需要两个端口,一个是数据端口,一个是控制端口。

控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

ABAP怎么通过FTP把txt文件数据获取到内表

代码语言:javascript复制
*******  如果无法链接FTP,可能需要往表SAPFTP_SERVERS加入IP地址和端口(21)即可

DATA:p_host   TYPE char64  VALUE 'IP', "IP
     p_uname  TYPE char30  VALUE 'username' ,    "用户名称
     p_pwd    TYPE char30  VALUE 'password' .   "用户密码

DATA:dest     LIKE rfcdes-rfcdest VALUE 'SAPFTP',
     compress TYPE c  VALUE 'N'.

DATA:hdl     TYPE i,
     key     TYPE i VALUE 26101957,
     slen    TYPE i,
     cmd(80) TYPE c VALUE  'cd /文件夹/',     "ftp的操作  具体可以百度
     blen TYPE i.

DATA:lv_file(40).   "存放文件名

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

DATA:BEGIN OF ls_line,
        line(2000),
     END OF ls_line,
     lt_line LIKE TABLE OF ls_line.

DATA:i_bintab TYPE w3mimetabtype .

  slen = strlen( p_pwd ).

* "获取加密密码 保存到P_PWD
  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      source      = p_pwd
      sourcelen   = slen
      key         = key
    IMPORTING
      destination = p_pwd.

* 连接ftp服务器
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            = p_uname
      password        = p_pwd
      host            = p_host
      rfc_destination = dest
    IMPORTING
      handle          = hdl.  "连接的句柄

   CALL FUNCTION 'FTP_COMMAND'
     EXPORTING
       handle        = hdl
       command       = cmd         "进入指定ftp目录
       compress      = compress
     TABLES
       data          = result
     EXCEPTIONS
       command_error = 1
       tcpip_error   = 2.
*******   LOOP AT result.
*******     WRITE AT / result-line.
*******   ENDLOOP.

  lv_file = '*******.txt'.    "ftp目录下的文件名(只支持*.txt OR *.dat)
*  解析*.txt 文件
  "1.在代码中由于有中文,所以需先得到BIN的内表
  "2.使用SCMS_BINARY_TO_TEXT把BIN的二进制值转换为GB2312
  CALL FUNCTION 'FTP_SERVER_TO_R3'
    EXPORTING
      handle         = hdl
      fname          = lv_file
*      character_mode = 'X'
    IMPORTING
      blob_length    = blen
    TABLES
      blob           = i_bintab
*      text           = lt_line
    EXCEPTIONS
      tcpip_error    = 1
      command_error  = 2
      data_error     = 3
      OTHERS         = 4.
  "转换BIN内表数据
  CALL FUNCTION 'SCMS_BINARY_TO_TEXT'
    EXPORTING
      input_length  = blen
      encoding      = '8400' "4110:UTF8,8400:GB2312
    IMPORTING
      output_length = blen
    TABLES
      binary_tab    = i_bintab
      text_tab      = lt_line
    EXCEPTIONS
      failed        = 1
      OTHERS        = 2.

  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = hdl.

  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      destination = dest
    EXCEPTIONS
      OTHERS = 1.

0 人点赞