您的位置:首页 > 编程语言 > PHP开发

SAP与FTP之间数据交互后台出现异常

2013-04-10 15:33 218 查看
后台执行RFC将内表数据传输到FTP服务器,出现错误“RFC到程序SAPFTP”失败,前台执行没有问题。

在解决此问题时,下面的博文给了我启示,共享出来,大家共同进步。

—————————————————————————————————————————————————————————————————————————————

《SAP FTP》

做FTP的需求还是快4年前的事情了。很基本的一些还是记下来,以后参考。

项目中有以下接口场景:

通过后台作业,SAP ECC系统每天晚上从外部FTP服务器Get文本文件到SAP服务器目录/usr/sap/<SID>/SYS/global/data,然后处理这些文件中的数据,在SAP系统创建对应的业务单据。

本文只介绍一下SAP编程实现从远程FTP服务器读取文件的方法。

SAP中有大量的标准程序实现FTP的功能,主要是函数组SFTP,

最简单的处理流程如下:

首先,使用function FTP_CONNECT 创建与远程FTP服务器的ftp连接,

然后,使用function FTP_COMMAND 执行ftp命令,

最后,调用FTP_DISCONNECT断开与远程FTP服务器的连接。

一、在调用FTP_CONNECT 需要传入RFC Destination参数,FTP常用的有两个,SAPFTP和SAPFTPA,事务码SM59显示,并测试一下连接,确认连接正常。

需要注意的是:

1、SAPFTP用于SAP客户端前端执行,比如我们前台登录SAPGUI操作,要把ftp服务器上的文件get到本地电脑路径,或者上传本地文件等,需要使用这个。

2、SAPFTPA 用于SAP服务器端执行,如本次需求,要把FTP服务器的文件get到sap服务器路径。(for running in Application server)(This is used for file transfer in background. )

二、在调用FTP_COMMAND时,需要熟悉FTP基本的命令格式,如LS、LCD、GET、PUT等命令

三、SAP有实例程序RSFTP002,可以测试上述功能。

另外,函数FTP_R3_TO_SERVER和FTP_SERVER_TO_R3可以实现FTP文件和ABAP内表的转换,要注意中文乱码问题,本次没有用到,有空测试补充一下。

SAPFTP starts ftp program on the frontend work station, SAPFTPA starts ftp program on application server.

这一句说的明白了,SAPFTP是在客户端执行,客户端在安装的时候是会有个一相应的文件来支持FTP的执行的。

相应的SAPFTPA是指在AS上面执行,当然,在AS上面也是要有一个相应的文件来支持FTP的执行。

有时候会出现SAPFTPA不能执行的情况,那就是AS上缺少相应的配置了。

以上是转载的,有关于SAPFTP和SAPFTPA的区别。

继续转载一些系统的程序,可以看看。

SAP FTP相关

以下是SAP 标准FTP程序。

在使用标准 functions前,确保已经安装SAPFTP.EXE。请先使用程序:RSFTP005 进行SAPFTP 检查。

RSFTP001 - SAPFTP 版本检查

RSFTP002 - 执行 FTP 命令

RSFTP003 - 测试

RSFTP004 - FTP 复制

RSFTP005 - SAPFTP 检查

RSFTP006 - FTP 命令清单

RSFTP007 - TEST FB: FTP_SERVER_TO_R3 /FTP_R3_TO_SERVER 读取FTP数据到R3 / R3数据写入FTP。

RSFTP008 - TEST FB: FTP_CLIENT_TO_R3 /FTP_R3_TO_CLIENT 读取FTP数据到客户端 / 客户端数据写入FTP。

FTP程序大致流程为: FTP_CONNECT ,FTP_COMMAND ,FTP_DISCONNECT。

FTP_COMMAND 中输入标准的FTP命令。如:更改 FTP 目录 "cd dir",更改本地目录 "lcd localdir",上传文件"put file"。

对于LCD的命令有点糊涂,可惜没有server测试一下。

lcd [directory]         指定要更改的本地计算机上的目录。如果没有指定Directory,将显示本地计算机中当前的工作目录。为什么有本地PC的概念?

来看看具体,FTP的操作,

ftp> ftp 128.1.99.200 这个是连接地址
ftp> 这里提示输入用户名
ftp>密码
ftp>ascii 以什么样的文件格式传送 这个是2进制文件形式
ftp>cd doc  首先在ftp上cd到指定的doc文件夹,
ftp>lcd c:/aaa 这里就是定义你要get的文件放在本地的哪个地方 这里是放在c盘 aaa文件下

ftp>get 001.txt 将doc文件夹下的001.txt文件放到本地的c:/aaa下。
ftp>put 001.txt  将本地c:/aaa下的001.txt文件放到FTP的doc文件夹下。


ftp>get 路径名 你要get的文件路径


==============================================================

下面关于ascii和bin,

1、FTP在传送文件时分为ASC和Bin两种格式,只有文字文件(例如 html 文件)使用ASC,其他的通通使用Bin格式(例如图像文件、压缩文件、可执行文件等等)。
2、当我们使用ftp时,可简单地把文件分为两种基本类型:文本文件和二进制文件;文本文件也称为 ASCII文件,其文件内容遵循ASCII的定义,其主要特征是文件内容由若干行组成,可以使用操作系统的显示、编辑命令来显示和编辑ASCII文件的内容,它使用的传输模式是asc;二进制文件(Binary File)是指除ASCII文件以外的所有文件格式,它使用的传输模式是bin;需要注意的是,可以将ASCII文件按二进制模式传输,但决不能将二进制文件按ASCII模式传输,否则二进制文件的内容会遭到破坏而无法使用。
3、ASCII 切换传输模式为文字模式(只能用来传送文字文件);

BINARY 切换传输模式为二进制模式(除文字文件外皆用此模式);

除此之外,ASCII还有一个用途是,会自动转换行结束符。

在计算机系统中,不同的系统判断一行是否结束的标志是不一样的。

文件中的一行可以有三种结束的方式:

1.cr

2.nl    ---->Unix调用一个new line的动作

3.cr lf (or lf cr)

ftp上传的时候,有bin和ascii两种区别

使用bin命令传输时,什么也不会改变,按照源文件传输,

而用ascii方式传输时会将行结束符从来源的机器所用的行结束符转换成接收机器所用的行结束符。

例如:ascii可能将一个 cr 转换成 一个 nl (这通常表示成一个 lf)。

而且ascii指示ftp注意文件的结束符,在pc中表现为: control-z (因此,文件结束符可以结束文件的内容,但不一定表示文件的物理结束)

所以,如果文件本身是二进制的,应该完全不变的传输,这时需要使用bin模式

而对文本文件而言,就需要转换。否则有可能得到这样的结果:

this line ends ^M

and another line ends ^M

and we should have ended^M but did not^M which does^M

not look great.^M^Z

这种情况发生在当来源机器使用lf cr作为行结束符而 lf 是接收机器的行结束符,并且使用bin模式传输文件时。当不确定使用什么模式时,使用bin模式。使用bin更快些,并且不会对文件产生什么伤害(因为 bin模式没有检查文件和转换行结束符)。有很多软件可以将文本(ascii)文件在不同的行结束符之间进行转换,可以用bin下载后再转换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: