如何将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.

转载于:https://www.cnblogs.com/xiaomaohai/archive/2007/01/25/6157417.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jstl处理栏目与子栏目_Detelogy智能前处理设备微展厅P2:再添新品

时隔小半年&#xff0c;新一轮Detelogy产品总览展示栏目再与大家见面。事不宜迟&#xff0c;点击视频即刻进入我们的智能前处理设备微展厅。 知乎视频​www.zhihu.com01 高效多样品前处理系统02 智能浓缩设备全系列03 智能湿法消解设备应用领域农残、兽残检测有机磷类、有机氯类…

【转】ABP源码分析三十六:ABP.Web.Api

这里的内容和ABP 动态webapi没有关系。除了动态webapi&#xff0c;ABP必然是支持使用传统的webApi。ABP.Web.Api模块中实现了一些同意的基础功能&#xff0c;以方便我们创建和使用asp.net webApi。 AbpApiController&#xff1a;这是一个抽象基类&#xff0c;继承自ApiControl…

408最后计算机网络题库,2021考研计算机统考408专业基础综合题库

**部分为历年考研真题。提供2009&#xff5e;2018年考研真题及参考答案&#xff0c;其中2009&#xff5e;2015年每道真题均提供详细答案解析&#xff0c;通过对真题的演练和分析&#xff0c;可以帮助学员牢牢抓住计算机学科专业基础综合考试的命题特点&#xff0c;提高复习效率…

Unity-Shader-渲染队列,ZTest,ZWrite

Unity-Shader-渲染队列&#xff0c;ZTest&#xff0c;ZWrite ZTest&#xff08;深度测试&#xff09;和ZWrite&#xff08;深度写入&#xff09;ZTest Less&#xff08;深度小于当前缓存则通过&#xff09;ZTest Greater&#xff08;深度大于当前缓存则通过&#xff09;ZTest L…

如何做好职业规划(乾卦)

职业一般来说会占用我们每个人生命中的大部分时间&#xff0c;而职业发展中变化莫测的因数常常令我们束手无策、捉襟见肘。在面对变化多端的情况时&#xff0c;中国人的传统智慧就发挥出最大的优势了。如何将快速变化 、不好掌控的事情处理得井井有条&#xff0c;这需要我们懂得…

850是什么意思_沃尔沃为什么不是一线豪华品牌?

1927年诞生的沃尔沃&#xff0c;它造车的历史比宝马还要略早几年。但经过近百年的发展&#xff0c;宝马品牌无论在国际上还是我们国内&#xff0c;以销量还是品牌含金量来看&#xff0c;都是众所公认的豪华品牌第一阵营成员&#xff08;奔驰、宝马&#xff0c;奥迪&#xff09;…

【转】ABP源码分析三十七:ABP.Web.Api Script Proxy API

ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理&#xff0c;AngularJs代理以及TypeScriptor代理。这些个代理就是javascript脚本,通过这些代理可以简单的访问Dynamic webApi。 如下实例演示一个最基本的应用场景。首先通过Script Proxy Web…

repeater导出excel html,Repeater显示数据,并且导出到excel

我的数据是自己手工生产&#xff0c;然后repeater绑定&#xff0c;最后导出excel&#xff0c;但出现问题&#xff0c;谁可以给个例子什么的没有。关键代码如下&#xff1a;protected void LinkButton1_Click(object sender, EventArgs e){string time DateTime.Now.ToString(&…

重新学.Net[一]——.Net的组成

.Net是一个广义的名词。它是一个平台或说是战略。在.Net诞生之初&#xff0c;微软在其一系列产品中都冠以.Net的标签。这也给很多人带来疑惑和不解&#xff0c;到底.Net中具体包含什么&#xff1f;这个问题不仅是我有&#xff0c;我想&#xff0c;甚至微软本身以及一些专家也会…

word2003如何设置护眼模式_手机屏幕的护眼模式是如何保护你的眼睛?

公司业务包括&#xff1a;二手机回收&#xff0c;二手机销售&#xff0c;配件批发&#xff0c;以及手机维修等业务&#xff0c;目前公司业务覆盖山西全境以及周边省市&#xff0c;在同行业有较高知名度。 随着智能手机的普及&#xff0c;大多数人也逐渐开始沉迷于每天的刷手…

WinCE系统的编译过程

作者&#xff1a;ARM-WinCE 在WinCE系统中&#xff0c;当我们完成了相关的开发和系统定制工作以后&#xff0c;会编译WinCE系统&#xff0c;最后生成NK.bin和NK.nb0。我现在用WinCE6.0在自己的PC上面编译一次用时19分16秒(有一天无聊&#xff0c;就测了一下)。下面介绍一下WinC…

【转】ABP源码分析三十八: ABP.Web.Api.OData

如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识。 API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController&#xff0c;实现了Controller代码的常用。 AbpODataEntityController<TEntity, TPrimaryKey>&#xff1a;使用ABP的repos…

由表单中onsubmit=return false;想到的

众所周知&#xff0c;在表单中加上οnsubmit"return false;"可以阻止表单提交。 下面是简单的一小段代码&#xff1a; 代码<form action"index.jsp" method"post" onsubmit"submitTest();"> <INPUT value"www">…

计算机知识竞赛主持人开场词,护理竞赛主持人台词:主持人开场白台词

专科护理在世界范围内蓬勃发展&#xff0c;高质量的专科护理人才是推动护理事业发展的原动力。下面是小编给大家整理的护理竞赛主持人台词&#xff0c;仅供参考。护理竞赛主持人台词【篇一】在这充满火热激情的季节&#xff0c;我们又迎来了“5.12国际护士节”。让我们首先向辛…

饭卡可以用水冲洗吗_薄壁不锈钢水管真的可以满足大众用水健康管道的要求吗?...

我们都认识现如今的自来水的出厂干净程度达到安全、卫生&#xff0c;干净标准。但是&#xff0c;很是收到不少市民的投诉&#xff0c;说日常饮用的自来水有异味、浑浊、杂质&#xff0c;为何会出现这番现象呢&#xff0c;为此&#xff0c;我国也针对此研究调查&#xff0c;最后…

WinCE的快速启动

PXA270上的双启动功能已经实现了&#xff0c;但又引入了一个新问题&#xff0c;WinCE的启动太慢&#xff0c;大概需要2分钟&#xff01;这显然是不能忍受的。通过两天的努力&#xff0c;现在已经缩短到20秒&#xff0c;虽然还是有点长&#xff0c;但已改善不少了。先整理一下&a…

【转】ABP源码分析三十九:ABP.Hangfire

ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的。 HangfireBackgroundJobManager:实现了接口IBackgroundJobManager中的方法EnqueueAsync&#xff0c;通过HangfireBackgroundJob完成Enqueue。重写了BackgroundWorkerBase…

计算机无法显示硬盘盘符,电脑硬盘不显示盘符怎么办 移动硬盘不显示盘符的原因...

电脑上是目前我们经常会使用到电子设备&#xff0c;其中电脑硬盘是电脑重要的零部件&#xff0c;它可以为电脑存储和运行各种文件&#xff0c;是电脑不可或缺的组件&#xff0c;然后用户在使用电脑的时候突然发现电脑硬盘不显示盘符该怎么办&#xff0c;移动硬盘显不示盘符的有…

博客诞生过程与变革:十年来谁是写博客第一人?

北京时间3月21日&#xff0c;国外媒体有文章称&#xff0c;假如没有一亿人每天热衷于写Blog&#xff0c;那么Blog可能不会成为目前互联网上最主要的应用之一。于是&#xff0c;不止一个人声称自己是第一个写Blog的人。到底谁才是第一个真正写Blog的人呢&#xff1f;是备受争议的…

百度云cdn设置州五年制大专_图说云原生:让云原生转型变得像种白菜一样简单...

序有一天&#xff0c;女朋友突然问我&#xff1a;“能不能跟我讲讲&#xff0c;你每天在开发的这些“天合”云原生平台、容器引擎、微服务&#xff0c;都是做什么的呀&#xff1f;”我说&#xff1a;“可以啊。简单来讲&#xff0c;我们的产品就是帮助客户实现云原生应用的上云…