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 COMMANDSCALL 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_displayENDIF. "sxpg_command_list_get