matinal:SAP ABAP 访问SFTP服务器,使用Winscp Client实现访问

使用 Winscp Client 实现 SAP 对 SFTP 的访问

简介: SAP ECC 不支持对 SFTP 的访问,因此通过使用 Winscp Client 实现 SAP 对 SFTP 的访问。


在这里插入图片描述

原为地址:SFTP from SAP using Winscp Client - My Experiments with ABAP

我们使用FTP将销售订单信息传输给运输商;这是他们规划资源(司机、卡车等)的重要信息。我们在站点到站点VPN上使用FTP,以确保通信安全。出于基础设施原因,我们正在远离站点到站点 VPN,要求使用 SFTP

SAP ECC不支持sftp,这就是我使用开源Winscp sftp客户端实现sftp通信的方式。请注意,我们在Windows 2003服务器上安装了SAP服务器,您必须针对其他服务器操作系统调整一些步骤。

步骤 1 :下载并安装 Winscp 客户端

WinSCP :: Official Site :: Download 下载Winscp便携式可执行文件。它是一个zip文件,带有exe和com文件。解压缩内容并将其放在 SAP 可以执行它们的服务器上。我已经把我的保存在externexe / sftp文件夹中。第一次执行它会自动创建 ini 文件,所以如果你没有 ini 文件,请不要担心。
在这里插入图片描述

步骤 2 :检查安装和连接

在开始开发SAP之前,让我们检查一下这个客户端是否正常工作。

通常,Winscp 客户端会打开与服务器的一个会话,您可以在其中执行命令并在完成后将其关闭。但是在这里,我们希望一次性打开会话,执行命令和关闭会话,幸运的是Winscp确实支持此功能。

一个简单的 dir 命令以及打开的会话和退出命令如下所示

winscp.com /command "option batch abort" "open ftp://username:password@host_ip" "dir" "exit"
  • 1

在这里插入图片描述
选项批处理中止可防止会话在出现任何问题时查找用户输入。例如,如果您的用户 ID 在 sftp 服务器上没有授权,则 Winscp 客户端将提示重试,如果我们从 SAP 执行命令,这是不可取的。您可以在此处执行多个命令,只需在退出之前将它们添加到列表中,然后用双引号引起来。

从客户端 (F:/data) 上的特定目录到 sftp 服务器 (in) 上的特定目录的文件传输命令如下所示。

winscp.com /command "option batch abort" "open ftp://username:password@host_ip" 
"lcd F:\Data" "cd in" "put data.txt" "exit"
  • 1
  • 2

步骤 3 :在SM69中创建将调用 Winscp.com 的命令

确保选中允许的其他参数。
在这里插入图片描述
按保存。

要从SAP测试命令,请按执行并在其他参数中输入“打开”sftp://用户名:password@host_ip“”dir“”exit“并执行。
在这里插入图片描述
您应该获得与命令提示符相同的输出。请注意变量返回代码。零值表示成功执行。
在这里插入图片描述

步骤 4 :使用功能模块SXPG_COMMAND_EXECUTE调用外部命令ZFTP

这是示例代码,将让您了解如何调用我们刚刚创建的外部命令。您必须进行一些更改才能使其在您的位置工作。

METHOD execute_all_commands.
 
  DATA : lv_additional_parameters TYPE string ,
         lv_additional_param_func TYPE sxpgcolist-parameters .
 
* Create additional parameters strings based on username, password and host ip
  IF me->username  IS INITIAL .
    RAISE EXCEPTION TYPE zcx_sfp
      EXPORTING
        textid = zcx_sfp=>user_name_empty .
  ENDIF.
 
  IF me->password IS INITIAL .
    RAISE EXCEPTION TYPE zcx_sfp
      EXPORTING
        textid = zcx_sfp=>password_empty .
  ENDIF.
 
  IF me->host_ip IS INITIAL .
    RAISE EXCEPTION TYPE zcx_sfp
      EXPORTING
        textid = zcx_sfp=>password_empty .
  ENDIF.
 
* winscp.com /command "open "sftp://username:password@host_ip"" "dir" "exit"
 
* Create open command
  CONCATENATE '"open'
              ' "sftp://'
              me->username
              ':'
              me->password
              '@'
              me->host_ip
              '""'
         INTO lv_additional_parameters .
 
* Add user commands
  CONCATENATE lv_additional_parameters
              me->additional_commmands
         INTO lv_additional_parameters
        SEPARATED BY space .
 
* Add exit command in the end
  CONCATENATE lv_additional_parameters
              '"exit"'
         INTO lv_additional_parameters
        SEPARATED BY space .
 
  IF STRLEN( lv_additional_parameters ) > 255  .
    RAISE EXCEPTION TYPE zcx_sfp
      EXPORTING
        textid = zcx_sfp=>command_too_long .
  ENDIF.
 
 
  DATA : lv_status   TYPE extcmdexex-status   ,
         lv_exitcode TYPE extcmdexex-exitcode ,
         li_return   TYPE lca_tracefile_tab   .
 
  lv_additional_param_func = lv_additional_parameters .
 
  CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
    EXPORTING
      commandname                   = me->command_name
      additional_parameters         = lv_additional_param_func
    IMPORTING
      status                        = lv_status
      exitcode                      = lv_exitcode
    TABLES
      exec_protocol                 = li_return
    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 <> 0 OR lv_exitcode <> 0.
    RAISE EXCEPTION TYPE zcx_sfp
      EXPORTING
        textid = zcx_sfp=>error_sftp
        exit_code = lv_exitcode
        status = lv_status
        sftp_log = li_return   .
  ENDIF.
 
  return = li_return .
 
ENDMETHOD.

其他

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值