SAP与SFTP文件传输
FTP服务器与SAP之间文件传输,这种方式有很多的实施案例。假设SAP中的数据要放到FTP服务器,可以通过点对点的方式,将数据形成文件放在应用服务器的某一路径下,然后使用标准的FTP函数进行文件传输;也可以通过PI进行数据集成,PI有专门的FTP adapter。
这些是FTP相关的一些报表:
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数据到客……
那如果是SFTP呢?现在企业对数据的安全越来越重视,SFTP协议是在FTP的基础上对数据进行加密,使得传输的数据相对来说更安全。不过SAP目前没有像FTP一样的函数可以调用,来通过SFTP协议传输文件,只能借助工具,比如PI;还有一种方法是使用SM49执行外部脚本,今天就来说一下这种方式。
实现的方法大概就是:首先在AL11的某个路径下建个文件夹,然后在此文件夹下创建个.sh文件,里面编辑SFTP脚本。然后在SM49创建外部操作命令,挂接上AL11下创建的.sh文件。最后通过ABAP代码触发事件,实现执行.sh命令行的操作。
1、在OS服务器创建文件夹
2、在此文件夹下创建.sh文件,并维护命令脚本,示例文件
使用记事本创建文件,先保存在本地,然后使用CG3Z上传到步骤1创建的文件夹下。
3、执行事务码SM49,创建外部操作命令,并维护上新创建的文件
4、在程序中调使用函数SXPG_COMMAND_LIST_GET来执行外部操作命令,示例代码如下(代码中是弹出选择框让用户选择使用哪个外部命令)
*&---------------------------------------------------------------------*
*& Report ZTESTJI003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztestji003.
DATA: BEGIN OF command_list OCCURS 0.
INCLUDE STRUCTURE sxpgcolist.
DATA: END OF command_list .
DATA: BEGIN OF exec_protocol OCCURS 0.
INCLUDE STRUCTURE btcxpm.
DATA: END OF exec_protocol.
DATA: status LIKE btcxp3-exitstat,
commandname LIKE sxpgcolist-name VALUE '*',
sel_no LIKE sy-tabix.
* GET LIST OF EXTERNAL COMMANDS
CALL FUNCTION 'SXPG_COMMAND_LIST_GET'
EXPORTING
commandname = commandname
operatingsystem = sy-opsys
TABLES
command_list = command_list
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0.
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
EXPORTING
endpos_col = 100
endpos_row = 20
startpos_col = 2
startpos_row = 2
titletext = 'choose a COMMAND TO execute '
IMPORTING
choise = sel_no
TABLES
valuetab = command_list
EXCEPTIONS
break_off = 1
OTHERS = 2.
IF sy-subrc EQ 0.
READ TABLE command_list INDEX sel_no.
* CHECK AUTHORIZATION
CALL FUNCTION 'SXPG_COMMAND_CHECK'
EXPORTING
commandname = command_list-name
operatingsystem = sy-opsys
EXCEPTIONS
no_permission = 1
command_not_found = 2
parameters_too_long = 3
security_risk = 4
wrong_check_call_interface = 5
x_error = 6
too_many_parameters = 7
parameter_expected = 8
illegal_command = 9
communication_failure = 10
system_failure = 11
OTHERS = 12.
CASE sy-subrc.
WHEN 0.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
commandname = command_list-name
TABLES
exec_protocol = exec_protocol
EXCEPTIONS
no_permission = 1
command_not_found = 2
parameters_too_long = 3
security_risk = 4
wrong_check_call_interface = 5
program_start_error = 6
program_termination_error = 7
x_error = 8
parameter_expected = 9
too_many_parameters = 10
illegal_command = 11
wrong_asynchronous_parameters = 12
cant_enq_tbtco_entry = 13
jobcount_generation_error = 14
OTHERS = 15.
IF sy-subrc EQ 0.
WRITE:/ command_list-name, 'ran successfully'.
ELSE.
WRITE:/ 'error WITH command', command_list-name.
ENDIF.
WHEN 1.
WRITE:/'you are NOT authorized TO run', command_list-name.
WHEN OTHERS.
WRITE:/'error with FUNCTION with command', command_list-name.
ENDCASE.
ENDIF.
"popup_with_table_display
ENDIF. "sxpg_command_list_get
PS:喜欢的同学可以关注微信公众号
文章来自于网络,如果侵犯了您的权益,请联系站长删除!