网上很多FTP说明的文档,也很详细,写这玩意是备份一下:
注:有的系统需要配置FTP地址和端口,有的好像没有。。。
SM30->SAPFTP_SERVERS_V,默认端口21。
在做之前可以做个小测试:程序:RSFTP002
输入用户名,密码,地址,命令,RFC选择SAPFTPA
这个程序很简单的,可以点进去看看,就是开,运行,关。。。
对于那些目录较深的FTP,可以COPY出来,多加几个COMMAND
常用的命令就是cd xxx目录切换
nlist 显示列表
delete xxxxx删除文件
创建/删除文件夹的权限一般不做。
因为是N手了,所以函数有点乱:
1.FTP 连接:
FUNCTION zcrm_ftp_connect. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(IV_FTP_USER) TYPE ZE_FTP_USER *" REFERENCE(IV_HOST) TYPE ZE_FTP_HOST *" EXPORTING *" REFERENCE(EV_HANDLE) TYPE I *" CHANGING *" REFERENCE(IV_PASSWORD) TYPE ZE_FTP_PW *" EXCEPTIONS *" NOT_CONNECTED *"---------------------------------------------------------------------- CONSTANTS cons_key TYPE i VALUE 26101957. DATA:lv_slenth TYPE i. * 连接FTP服务器 lv_slenth = STRLEN( iv_password ). CALL FUNCTION 'HTTP_SCRAMBLE' EXPORTING SOURCE = iv_password sourcelen = lv_slenth key = cons_key IMPORTING destination = iv_password. * Open the ftp server. CALL FUNCTION 'FTP_CONNECT' EXPORTING user = iv_ftp_user password = iv_password host = iv_host rfc_destination = 'SAPFTPA' IMPORTING handle = ev_handle EXCEPTIONS not_connected = 1 OTHERS = 2. IF sy-subrc NE 0. MESSAGE e007(zhntcrm01) RAISING not_connected. ENDIF. ENDFUNCTION.
2.文件上传:
FUNCTION zcrm_zsv3_to_ftp. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(PROCESS_TYPE) TYPE CRMT_PROCESS_TYPE *" VALUE(XSTRING) TYPE XSTRING *" VALUE(FILETYPE) TYPE STRING *" VALUE(DATE) TYPE DATUM *" EXPORTING *" VALUE(MESSAGE) TYPE STRING *"---------------------------------------------------------------------- DATA:lv_xstring TYPE xstring. DATA:lv_len TYPE i. DATA lv_handle TYPE i. DATA lv_fname TYPE char100. DATA: lv_user TYPE ze_ftp_user VALUE 'CRM'. DATA lv_password TYPE ze_ftp_pw VALUE 'xxxxxxxxxxx'. DATA:lv_host TYPE ze_ftp_host VALUE 'xx.xx.x.xx'. DATA:gt_tab TYPE TABLE OF blob, gw_tab LIKE LINE OF gt_tab. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = xstring IMPORTING output_length = lv_len TABLES binary_tab = gt_tab. CALL FUNCTION 'ZCRM_FTP_CONNECT' EXPORTING iv_ftp_user = lv_user iv_host = lv_host IMPORTING ev_handle = lv_handle CHANGING iv_password = lv_password EXCEPTIONS not_connected = 1 OTHERS = 2. IF sy-subrc <> 0. message = 'Connect error'. EXIT. ENDIF. CONCATENATE '/CRM/Dealer Refund/Get Refund Order/' 'C506810' date '.' filetype INTO lv_fname. CALL FUNCTION 'FTP_R3_TO_SERVER' EXPORTING handle = lv_handle fname = lv_fname blob_length = lv_len TABLES blob = gt_tab[] EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3 OTHERS = 4. IF sy-subrc <> 0. message = 'File Upload Fail'. ENDIF. CALL FUNCTION 'FTP_DISCONNECT' EXPORTING handle = lv_handle. ENDFUNCTION.
其中目录+文件名+FTP_R3_TO_SERVER 上传文件到FTP目录
其中目录+文件名+FTP_SERVER_TO_R3 下载FTP目录文件
对于那种使用命令的,需要可以直接参考标准程序002代码
对于一些需要看到FTP上传记录的需求,可以新建一个表:文件名,文件类型,日期,时间,用户名。。。这个表在展示和下载删除的时候能够精确的执行下载和删除文件。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18601.html