`
Jack Wu
  • 浏览: 891739 次
  • 来自: ...
社区版块
存档分类
最新评论

如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)

阅读更多

在sap里有GUI_DOWNLOAD 函数将sap的数据下载到客户端机器(presentation server),而Dataset则是将数据传输到应用服务器(Application server)。然而在有些时候需要将数据传输到第三方其他系统(3rd Party System),这是我们就可以使用FTP命令来完成数据传输。

1、相关函数
HTTP_SCRAMBLE
FTP_CONNECT
FTP_R3_TO_SERVER
FTP_DISCONNECT
RFC_CONNECTION_CLOSE

2、函数说明
HTTP_SCRAMBLE: 将密码转化为SAP的格式
样例代码
l_pwd = p_pwd.
l_slen = STRLEN( l_pwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
exporting
  source = l_pwd
  sourcelen = l_slen
  key = c_key
importing
  destination = l_pwd.

FTP_CONNECT : 连接其他系统
* To Connect to the Server using FTP
样例代码
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
  user = p_user
  password = l_pwd
  host = p_host
  rfc_destination = c_dest
IMPORTING
  handle = w_hdl
EXCEPTIONS
  OTHERS = 1.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

FTP_R3_TO_SERVER: 将SAP的内表数据按字符方式传输到其他系统.
样例代码
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
  handle = w_hdl
  fname = <file path of destination system>
  character_mode = 'X'
TABLES
  text = <internal table data>
EXCEPTIONS
  tcpip_error = 1
  command_error = 2
  data_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
  RAISING invalid_output_file.
ENDIF.

FTP_DISCONNECT: 关闭SAP与其他系统的连接.
样例代码
* To disconnect the FTP
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
  handle = w_hdl.

RFC_CONNECTION_CLOSE:关闭SAP与其他系统的RFC连接.
样例代码
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
  destination = c_dest
EXCEPTIONS
OTHERS = 1.

3、SAP的样例代码
report rsftp004.

parameters: suser(30) type c lower case,
            spwd(30) type c lower case,
            shost(64) type c lower case,
            duser(30) type c lower case,
            dpwd(30) type c lower case,
            dhost(64) type c lower case,
            lines type i default 1000,
            pasv.
selection-screen skip 1.
parameters: dest like rfcdes-rfcdest default 'SAPFTP'.

types: begin of text,
       line(120) type c,
       end of text.

types: begin of blob,
       line(80) type x,
       end of blob.

data: shdl type i,
      dhdl type i,
      key type i value 26101957,
      slen type i,
      bline(80) type x,
      sdocid like sysuuid-c,
      ddocid like sysuuid-c,
      blob_length type i,
      cmd(120),
      error.

data: result type table of text with header line,
      bindata type table of blob with header line.

* Create data

set extended check off.
error = 0.
bline = '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
        '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
        '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F' &
        '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F'.

do lines times.
  bindata-line = bline.
  append bindata.
enddo.

call function 'SYSTEM_UUID_C_CREATE'
  importing
    uuid = sdocid.

call function 'SYSTEM_UUID_C_CREATE'
  importing
    uuid = ddocid.

* connect to ftp server - source

slen = strlen( spwd ).

call function 'HTTP_SCRAMBLE'
  exporting
    source      = spwd
    sourcelen   = slen
    key         = key
  importing
    destination = spwd.

call function 'SAPGUI_PROGRESS_INDICATOR'
  exporting
    text = 'Connect to FTP Server - Source'.

call function 'FTP_CONNECT'
  exporting
    user            = suser
    password        = spwd
    host            = shost
    rfc_destination = dest
  importing
    handle          = shdl.

* connect to ftp server - destination

slen = strlen( dpwd ).

call function 'HTTP_SCRAMBLE'
  exporting
    source      = dpwd
    sourcelen   = slen
    key         = key
  importing
    destination = dpwd.

call function 'SAPGUI_PROGRESS_INDICATOR'
  exporting
    text = 'Connect to FTP Server - Destination'.

call function 'FTP_CONNECT'
  exporting
    user            = duser
    password        = dpwd
    host            = dhost
    rfc_destination = dest
  importing
    handle          = dhdl.

if not pasv is initial.
  refresh result.

  call function 'FTP_COMMAND'
    exporting
      handle        = shdl
      command       = 'set passive on'
    tables
      data          = result
    exceptions
      tcpip_error   = 1
      command_error = 2
      data_error    = 3.

  if sy-subrc eq 0.
    write: / 'Set passive mode - Source'.
  endif.

  refresh result.

  call function 'FTP_COMMAND'
    exporting
      handle        = dhdl
      command       = 'set passive on'
    tables
      data          = result
    exceptions
      tcpip_error   = 1
      command_error = 2
      data_error    = 3.

  if sy-subrc eq 0.
    write: / 'Set passive mode - Destination'.
  endif.
  skip 1.

endif.

* Create file on Source

blob_length = lines * 80.

call function 'SAPGUI_PROGRESS_INDICATOR'
  exporting
    text = 'Create File on Source'.

call function 'FTP_R3_TO_SERVER'
  exporting
    handle      = shdl
    fname       = sdocid
    blob_length = blob_length
  tables
    blob        = bindata.

* Copy Files

call function 'SAPGUI_PROGRESS_INDICATOR'
  exporting
    text = 'Copy File to Destination'.

refresh result.

call function 'FTP_COPY'
  exporting
    handle_source      = shdl
    handle_destination = dhdl
    file_source        = sdocid
    file_destination   = ddocid
  tables
    data               = result
  exceptions
    tcpip_error        = 1
    command_error      = 2
    data_error         = 3
    others             = 4.

if sy-subrc ne 0. error = 1. endif.

loop at result.
  write / result-line.
endloop.

* compare content

if error eq 0.

  call function 'SAPGUI_PROGRESS_INDICATOR'
    exporting
      text = 'Compare Content'.

  skip 1.
  refresh bindata.

  call function 'FTP_SERVER_TO_R3'
    exporting
      handle      = shdl
      fname       = sdocid
    importing
      blob_length = blob_length
    tables
      blob        = bindata.

  slen = lines * 80.

  if slen ne blob_length.
    error = 1.
    write: / 'Length error - expected',slen,'received',blob_length.
  else.
    loop at bindata.
      if bindata-line ne bline.
        slen = sy-tabix * 80.
        write: / 'Content error at',slen,bindata-line.
        error = 1.
        exit.
      endif.
    endloop.
  endif.

  refresh bindata.

  call function 'FTP_SERVER_TO_R3'
    exporting
      handle      = dhdl
      fname       = ddocid
    importing
      blob_length = blob_length
    tables
      blob        = bindata.

  slen = lines * 80.

  if slen ne blob_length.
    error = 1.
    write: / 'Length error - expected',slen,'received',blob_length.
  else.
    loop at bindata.
      if bindata-line ne bline.
        slen = sy-tabix * 80.
        write: / 'Content error at',slen,bindata-line.
        error = 1.
        exit.
      endif.
    endloop.
  endif.

  if error eq 0.
    write: / 'Content compare OK'.
  else.
    write: / 'Content compare error'.
  endif.
  skip 1.

endif.

* Delete

concatenate 'del' sdocid into cmd separated by ' '.
refresh result.

call function 'SAPGUI_PROGRESS_INDICATOR'
  exporting
    text = 'Delete Files'.

call function 'FTP_COMMAND'
  exporting
    handle        = shdl
    command       = cmd
  tables
    data          = result
  exceptions
    tcpip_error   = 1
    command_error = 2
    data_error    = 3.

loop at result.
  write / result-line.
endloop.

concatenate 'del' ddocid into cmd separated by ' '.
refresh result.

call function 'FTP_COMMAND'
  exporting
    handle        = dhdl
    command       = cmd
  tables
    data          = result
  exceptions
    tcpip_error   = 1
    command_error = 2
    data_error    = 3.

loop at result.
  write / result-line.
endloop.

* Disconnect
call function 'FTP_DISCONNECT'
  exporting
    handle = shdl.
call function 'FTP_DISCONNECT'
  exporting
    handle = dhdl.

call function 'RFC_CONNECTION_CLOSE'
  exporting
    destination = dest
  exceptions
    others = 1.

if error ne 0.
  format color col_negative.
  write: / 'Error im Test'.
else.
  format color col_positive.
  write: / ' Test OK'.
endif.

* password not visible

at selection-screen output.

  loop at screen.
    if screen-name = 'SPWD' or screen-name = 'DPWD'.
      screen-invisible = '1'.
      modify screen.
    endif.
  endloop.



分享到:
评论

相关推荐

    Transferring Data with DB

    本文将深入探讨“使用DB进行数据传输”的核心概念、技术细节以及在SAP Business Information Warehouse(SAP BI)中的具体应用,旨在为数据库管理员、IT专业人士以及对数据处理感兴趣的读者提供详尽的指导。...

    Transferring Human Impedance Regulation Skills to Robots

    本书《Transferring Human Impedance Regulation Skills to Robots》的主题是关于阻抗控制的知识转移,即如何将人类在操作时对阻抗(机械阻抗)的调节技巧传授给机器人,从而提升机器人的操作技能和智能水平。...

    Big Data Made Easy - A Working Guide To The Complete Hadoop Toolset

    - **Nutch**: An open-source web crawler that can be used to gather data from the web. - **Apache Solr**: A powerful search platform for indexing and searching text-based documents. The chapter ...

    Linux for Beginners: An Introduction to the Linux Operating System

    How to compress files to save space and make transferring data easy. How and why to redirect input and output from applications. How to customize your shell prompt. How to be efficient at the ...

    Sams.Teach.Yourself.Big.Data.Analytics.with.Microsoft.HDInsight

    Using Sqoop or SSIS (SQL Server Integration Services) to move data to/from HDInsight and build data integration workflows for transferring data Using Oozie for scheduling, co-ordination and managing ...

    用单片机实现HCI层的蓝牙数据传输

    简述使用蓝牙设备实现数据传输的单片机控制方案

    采购订单抬头和行项目屏幕增强&BAPI传入自定义字段.pdf

    数据元素(Data Element)是 SAP 系统中的基本数据单元,用于描述数据的结构和格式。在本例中,我们需要创建一个名为 ZZSCM_STATUS 的数据元素,用于描述 SCM 状态字段的数据结构。创建数据元素的步骤如下: 1. ...

    EhLib 9.1.038 for D7-XE-10.2

    Includes DataDriver, which is responsible for transferring TMemTableEh records from other databases. Process the records that have been modified in TMemTableEh and write them in another data set. ...

    SAS Programming and Data Visualization Techniques(Apress,2015)

    A Power User's Guide brings together a wealth of ideas about strategic and tactical solutions to everyday situations experienced when transferring, extracting, processing, analyzing, and reporting the...

    Pro MongoDB Development [2016]

    and transferring data between Oracle and MongoDB * How to use Kundera, Spring Data, and Spring XD with MongoDB * How to load MongoDB data into Oracle Database and integrating MongoDB with Oracle ...

    BlueToolInstall

    and (iii) prohibits the end user from (a) copying the Software, except as reasonably necessary for internal back-up purposes, (b) using and/or transferring the Software to any third party apart from ...

    计算机网络第六版答案

    14. If the two ISPs do not peer with each other, then when they send traffic to each other they have to send the traffic through a provider ISP (intermediary), to which they have to pay for carrying ...

    MT46V64M4 datasheet

    DDR SDRAM is a type of synchronous dynamic random-access memory that has been designed to double the data transfer rate compared to single data rate (SDR) SDRAM by transferring data on both the rising...

    MAC Security Bible

    The "MAC Security Bible" serves as an indispensable resource for Mac users seeking to protect their systems and data from potential threats. By covering a wide range of topics, from understanding the ...

    将数据从一个Arduino传输到另一个-项目开发

    在本项目中,我们将探讨如何将数据从一个Arduino设备传输到另一个,这通常涉及到嵌入式系统中的通信协议。此项目的关键技术是I2C(Inter-Integrated Circuit)通信,这是一种多主控、多从属的串行通信协议,允许微...

    CUDA Reference from NVIDIA official site.

    This function is crucial for multi-GPU systems where the developer needs to control which device should be used for computation. **1.1.3 cudaGetDevice** `cudaGetDevice` retrieves the ID of the ...

Global site tag (gtag.js) - Google Analytics