一、确立RFC连接配置
执行SAP的标准程序RSFTP005,自动创建两个名为SAPFTP为SAPFTPA的TCP/IP的RFC连接。
二、连接FTP服务器
进行FTP连接配置,维护配置表SM30:SAPFTP_SERVERS_V
se38执行测试程序rsftp002测试是否连接:
一般是因为密码错误,注意账号大小写,修正后如下: 
三、连接服务:
java
FORM frm_connect .
"------------------------
TYPES: BEGIN OF t_text,
text(2000) TYPE c,
END OF t_text.
DATA: i_text TYPE TABLE OF t_text,
i_text2 TYPE TABLE OF t_text,
lt_temp_text TYPE TABLE OF t_text,
mx1 TYPE TABLE OF t_text,
mxs LIKE LINE OF lt_temp_text,
wa_text TYPE t_text,
i_bintab TYPE w3mimetabtype.
DATA:lv_hdl TYPE i,
* lv_key TYPE i VALUE 26101957,
lv_slen TYPE i,
lv_cmd(120),
lv_pwd TYPE text30,
li_result TYPE TABLE OF text256 , "WITH HEADER LINE,
ls_result TYPE text256,
result TYPE TABLE OF text256,
* lv_dest TYPE rfcdes-rfcdest,
lv_ftpname TYPE text150,
ln TYPE i,
blen TYPE i.
"----------------------------------
TYPES: BEGIN OF ty_ftp,
line(255) TYPE c,
END OF ty_ftp,
BEGIN OF ty_blob,
line(255) TYPE x,
END OF ty_blob.
DATA: lt_ftp TYPE TABLE OF ty_ftp,
ls_ftp TYPE ty_ftp,
lt_blob TYPE TABLE OF ty_blob.
DATA: lv_dest TYPE rfcdest VALUE 'SAPFTP', "操作标识
lv_handle TYPE i,
lv_len TYPE i,
lv_key TYPE i VALUE 26101957,
* lv_cmd(255) TYPE c,
lv_blob_len TYPE i,
lv_xstr TYPE xstring,
lv_dir(255) TYPE c VALUE '/upload'. "指定目录
DATA: lv_msg TYPE string.
"账号密码信息
READ TABLE gt_con INTO DATA(ls_con) INDEX 1.
lv_len = strlen( ls_con-zpwd ).
"密码加密
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
source = ls_con-zpwd "原始密码
sourcelen = lv_len "密码长度
key = lv_key "加密方式
IMPORTING
destination = ls_con-zpwd. "加密密码
"连接ftp服务器
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = ls_con-zuser
password = ls_con-zpwd
host = ls_con-ip
rfc_destination = lv_dest
IMPORTING
handle = lv_handle
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
"获取错误
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = sy-msgid
msgnr = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
message_text_output = lv_msg.
ELSE.
"执行CMD命令(列出指定文件夹下所有的文件)
CONCATENATE 'nlist' lv_dir INTO lv_cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = lv_handle
command = lv_cmd
TABLES
data = lt_ftp
EXCEPTIONS
OTHERS = 2.
"读取CSV文件
DATA file TYPE c LENGTH 50 VALUE '.csv'.
LOOP AT lt_ftp INTO ls_ftp WHERE line CS lv_dir.
SEARCH ls_ftp FOR file.
IF sy-subrc = 0.
lv_ftpname = file.
REFRESH i_text.
"读取文件
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = lv_handle
fname = ls_ftp-line
IMPORTING
blob_length = lv_blob_len
TABLES
blob = lt_blob
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
CALL FUNCTION 'SCMS_BINARY_TO_TEXT'
EXPORTING
input_length = lv_blob_len
encoding = '8400' "4110:UTF8,8400:GB2312
IMPORTING
output_length = lv_blob_len
TABLES
binary_tab = lt_blob
text_tab = i_text
EXCEPTIONS
failed = 1
OTHERS = 2.
IF i_text[] IS NOT INITIAL.
LOOP AT i_text INTO wa_text FROM 2."从第二行开始读取
REFRESH lt_temp_text.
SPLIT wa_text AT ',' INTO TABLE lt_temp_text.
IF lt_temp_text IS NOT INITIAL.
CLEAR gs_data.
"字段赋值
gs_data-mid = lt_temp_text[ 1 ].
gs_data-transaction_dat = lt_temp_text[ 2 ].
gs_data-transaction_tim = lt_temp_text[ 3 ].
gs_data-tid = lt_temp_text[ 4 ].
APPEND gs_lkl TO gt_lkl.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
"删除文件
* IF gt_lkl IS NOT INITIAL.
* "解析成功 删除csv 文件
* lv_cmd = 'cd /upload'.
* CALL FUNCTION 'FTP_COMMAND'
* EXPORTING
* handle = lv_handle
* command = lv_cmd
* TABLES
* data = lt_ftp
* EXCEPTIONS
* OTHERS = 2.
* CLEAR lt_ftp.
* lv_cmd = 'mdelete *.csv'.
* CALL FUNCTION 'FTP_COMMAND'
* EXPORTING
* handle = lv_handle
* command = lv_cmd
* TABLES
* data = lt_ftp
* EXCEPTIONS
* OTHERS = 2.
* IF sy-subrc = 0.
* lv_msg = lv_msg && 'CSV文件删除成功;'.
* ENDIF.
* ENDIF.
"关闭连接
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = lv_handle
EXCEPTIONS
OTHERS = 4.
ENDIF.
IF gt_lkl IS NOT INITIAL.
MODIFY zzt_trans_lkl FROM TABLE gt_lkl.
IF sy-subrc = 0.
COMMIT WORK AND WAIT .
lv_msg = lv_msg && 'CSV解析后存表成功,请前往表ZZT_TRANS_LKL查看;'.
ENDIF.
ENDIF.
cl_demo_output=>write( lv_msg ).
cl_demo_output=>write( lt_ftp ).
cl_demo_output=>display( ).
ENDFORM.
------至此文件解析完成。