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

SAP系统通过FTP上载*.txt文档到服务器

2009-09-08 10:12 232 查看
整体思路是从SAP系统内表抓取数据(PERFORM GET_DATA)进行整理之后(PERFORM DEAL_DATA)再进行转化为FTP上载用的格式(PERFORM GET_OUT.)也就是对数据的初始化,这里用到了CL_ABAP_CONV_OUT_CE这个类。接下来就是设置FTP了,分为有密码和没有密码的。

代码如下:

START-OF-SELECTION.

*-- create a class for converting sap object into binary data
PERFORM CREATE_CODEPAGE_CONVERT_OBJECT.

*-- 取出报关单清单 for transporting
PERFORM GET_DATA.

*-- 转化数据为BINARY DATA
*-- 并把16进制的数据写到 LT_DATA table中
PERFORM DEAL_DATA.
SORT IT_OUT BY EXPNR SORTID EBSQ.
LOOP AT IT_OUT.
IT_OUT-ITEM_NO = SY-TABIX.
MODIFY IT_OUT.
ENDLOOP.
PERFORM GET_OUT.
*****设置FTP的文件名
g_date = SY-DATUM.
g_time = SY-UZEIT.
CONCATENATE 'DEC_EXP_LIST' g_date g_time '.txt' INTO P_FILE.
*** DOWNLOAD 文件并送出去
PERFORM FTP_DOWNLOAD USING P_FILE.

**** CLOSE FTP
*    PERFORM FTP_DISCONNECT.

******************对内表数据进行上载FTP前的处理*****
FORM GET_OUT .
LOOP AT IT_OUT.
call method conv->reset.      "初始化类中所有数据
PERFORM cl_abap_conv_out_ce USING IT_OUT-EMS_NO.
PERFORM cl_abap_conv_out_ce USING IT_OUT-EXPNR.
.
.
.
PERFORM cl_abap_conv_out_ce USING IT_OUT-Factor_2.
PERFORM cl_abap_conv_out_ce USING IT_OUT-G_MARK.
*************内表数据处理完都附加到一个LT_DATA中****
PERFORM APPEND_BUFFER.
AT LAST.
IF NOT G_XSTRING IS INITIAL.
APPEND G_XSTRING TO LT_DATA.
CLEAR G_XSTRING.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM.

连接FTP分为有密码和没密码2种,没密码相对简单,就验证连上否,连上了就进行数据传输;而有密码(注意区分大小写哦,ABAP默认是大写的)的要进行加密处理(为什么要加密,如何加密,不太清楚)再连FTP.
无密码处理:
FORM FTP_DOWNLOAD  USING   FNAME.
DATA: WA_DATA TYPE TS_DATA,
blob_length type i.

check not LT_DATA is initial.  "判断是否有数据要传送

LOOP AT LT_DATA INTO WA_DATA.
blob_length = blob_length + XSTRLEN( WA_DATA ).
ENDLOOP.
*** FTP CONNECT
PERFORM FTP_CONNECT USING USER        "user
PWD         "password
HOST.       "id
***直接把table中数据形成文件,FTP
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
HANDLE         = HDL
FNAME          = FNAME
BLOB_LENGTH    = BLOB_LENGTH
CHARACTER_MODE = ' '
TABLES
blob           = LT_DATA
*      TEXT           = PT_TAB
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.
ELSE.
MESSAGE S000(ZS) WITH '档案下载成功!'.
ENDIF.
ENDFORM.                    " FTP_DOWNLOAD

有密码的:
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE      = pwd
sourcelen   = l_slen
key         = key
IMPORTING
destination = pwd.

* Connect to server
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user            = user
password        = pwd
host            = host
rfc_destination = dest
IMPORTING
handle          = hdl
EXCEPTIONS
not_connected   = 1
OTHERS          = 2.

*****FTP file
l_file = 'oa_insurance.txt'.
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
HANDLE         = HDL
FNAME          = l_file
BLOB_LENGTH    = BLOB_LENGTH
CHARACTER_MODE = ' '
TABLES
blob           = LT_DATA
*      TEXT           = PT_TAB
EXCEPTIONS
TCPIP_ERROR    = 1
COMMAND_ERROR  = 2
DATA_ERROR     = 3
OTHERS         = 4.
************************关闭连接FTP***********
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = hdl.

CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = 'SAPFTPA'    "固定
EXCEPTIONS
OTHERS      = 1.


REPORT ZIEIT0005.

REPORT ZITOA0002.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: