文件服务器报码表xls,SAP ABAP: 把内表数据以excel或csv格式,通过前台或者后台的方式上传至FTP服务器...

今天接到一个FTP的需求,就是每天晚上把当天某个报表的数据自动保存excel上传到FTP服务器。

SAP已经有现成的FTP函数使用,可以通过函数的方式来实现,实现前先准备一些数据:

User:登录FTP的用户名

Password:登录FTP的密码

Host:FTP 的IP地址

Path: FTP的文件存放路径

RFC_Destination:意思是在前台还是后台的方式运行。前台:SAPFTP   后台:SAPFTPA

Command:操作FTP的命令,这里使用  ' CD /Path  '  打开文件夹

Filename:文件名

先在本地试下能不能连接FTP服务器

0746c38394c6077346ea68e5dacb1a61.png

下面简单说明下FTP常用的函数

HTTP_SCRAMBLE:用户名密码加密

FTP_CONNECT:创建FTP服务器连接

FTP_COMMAND:执行FTP命令

FTP_R3_TO_SERVER:在SAP端发送数据到FTP 服务器

FTP_DISCONNECT:关闭FTP连接

RFC_CONNECTION_CLOSE:关闭RFC连接

SAP提供的函数组是SFTP,系统提供的函数挺多,可以去研究下,我这里只用到上面的函数。

3d3a9f762cd07bd61f7c567bd32fd462.png

接下来就是怎么把内表的数据转换成可以上传的格式,这里就是把内表转换成二进制,有以下方法可以使用:

SAP_CONVERT_TO_CSV_FORMAT

SAP_CONVERT_TO_TXT_FORMAT

SAP_CONVERT_TO_TEX_FORMAT

SAP_CONVERT_TO_XLS_FORMAT

SAP_CONVERT_TO_XML_FORMAT

SCMS_TEXT_TO_BINARY

我用到的方法只是前两个和最后一个,第四个只能直接导出文件,可能还没有找到合适的方法,以后再做弥补。

下面就是上代码了

DATA: l_user(30) TYPE c VALUE 'admin', "用户名

l_pwd(30)  TYPE c VALUE 'Aa123456',      "密码

l_host(64) TYPE c VALUE '192.168.0.3',   "FTP服务器地址

l_path(64) TYPE c VALUE '/HYS',       "路径

l_rc(1),

l_dest     TYPE rfcdes-rfcdest VALUE 'SAPFTPA'. "前端:sapftp   后台运行:sapftpa.

DATA: l_handle       TYPE i,

l_command(255) TYPE c,

l_result       TYPE TABLE OF txmisporow,

l_filename(50) TYPE c,

l_pwdlength    TYPE i,

l_length       TYPE i,

l_ftppwd(255)  TYPE c,

l_key          TYPE i VALUE 26101957,

l_encoding     TYPE abap_encoding VALUE '8400'.

DATA: lt_text TYPE truxs_t_text_data.

DATA: l_binary_tab LIKE TABLE OF solix.

DATA: BEGIN OF ls_tab,

tline(4096),

END OF ls_tab.

DATA: lt_tab LIKE TABLE OF ls_tab.l_pwdlength = strlen( l_pwd ).

*****************开始FTP传输数据**********

CALL FUNCTION 'HTTP_SCRAMBLE' “密码加密

EXPORTING

source      = l_pwd

sourcelen   = l_pwdlength

key         = l_key

IMPORTING

destination = l_ftppwd.

"创建FTP连接CALL FUNCTION 'FTP_CONNECT'

EXPORTING

user            = l_user

password        = l_ftppwd

host            = l_host

rfc_destination = l_dest

IMPORTING

handle          = l_handle

EXCEPTIONS

not_connected   = 1

OTHERS          = 2.

IF sy-subrc <> 0.

MESSAGE 'FTP path error' TYPE 'E'.

ENDIF.

l_rc = COND #( WHEN l_path+(1) = '/' THEN ' ' ELSE ' /' ).

CONCATENATE 'cd' l_path INTO l_command SEPARATED BY l_rc. "拼接FTP命令,这里是打开文件夹地址

CALL FUNCTION 'FTP_COMMAND' ”执行FTP命令

EXPORTING

handle        = l_handle

command       = l_command

TABLES

data          = l_result

EXCEPTIONS

tcpip_error   = 1

command_error = 2

data_error    = 3

OTHERS        = 4.

IF sy-subrc <> 0.

PERFORM ftp_disconnect USING l_handle l_dest.

MESSAGE 'FTP path error' TYPE 'E'.

ENDIF.

CONCATENATE 'solist' sy-datum  '.csv' INTO l_filename.

"内表数据转换成CSV或者excel格式

CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'

TABLES

i_tab_sap_data       = 

CHANGING

i_tab_converted_data = lt_text

EXCEPTIONS

conversion_failed    = 1

OTHERS               = 2.

LOOP AT lt_text ASSIGNING FIELD-SYMBOL(). “把数据存到一个单列的内表,等一下用作转换二进制用

APPEND VALUE #( tline =  ) TO lt_tab.

ENDLOOP.

CALL FUNCTION 'SCMS_TEXT_TO_BINARY' ”转换成二进制文件

EXPORTING

encoding      = l_encoding

IMPORTING

output_length = l_length

TABLES

text_tab      = lt_tab

binary_tab    = l_binary_tab

EXCEPTIONS

failed        = 1

OTHERS        = 2.

“刚刚已经用FTP命令打开的文件夹,现在可以直接把二进制文件传至服务器了。

CALL FUNCTION 'FTP_R3_TO_SERVER'

EXPORTING

handle         = l_handle

fname          = l_filename

blob_length    = l_length

character_mode = ' '

TABLES

blob           = l_binary_tab

EXCEPTIONS

tcpip_error    = 1

command_error  = 2

data_error     = 3

OTHERS         = 4.

CASE sy-subrc.

WHEN 0.

MESSAGE 'Upload FTP Success' TYPE 'S'.

WHEN 1.

MESSAGE 'Upload FTP Failure (Tcpip_error)' TYPE 'S' DISPLAY LIKE 'E'.EXIT.

WHEN 2.

MESSAGE 'Upload FTP Failure (Command_error)' TYPE 'S' DISPLAY LIKE 'E'.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值