SAP-FTP/SFTP,SXPG_CALL_SYSTEM,OPEN DATASET,CG3Y CG3Z

本文介绍了在SAP环境中如何使用SXPG_CALL_SYSTEM功能模块执行命令,以及通过AL11进行文件管理。还讨论了通过SFTP和FTP进行文件传输的方法,包括创建目录、读写文件和权限检查。此外,提供了示例代码展示如何在SAP程序中调用外部命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Function:SXPG_CALL_SYSTEM

通过该功能模块,您可以:
检查用户执行命令的权限
执行命令
为了确定应该在哪个系统上执行命令,功能模块默认使用当前主机系统和用户的当前操作系统类型。由于功能模块支持RFC,因此可以使用RFC接口(远程函数调用接口)在不同的SAP应用程序服务器中运行功能模块。然后,在另一个SAP服务器的主机系统中相应地执行外部命令。
SXPG_CALL_SYSTEM在执行调用之前检查在调用中指定的命令。如果存在与系统字段“SY-OPSYS”中操作系统类型相同的命令,则使用此定义执行该命令。它检查与系统字段sy-opsys中具有相同操作系统类型的命令定义。语法组是一种SAP构造,用于对命令和文件名使用相同语法的操作系统进行分组。如果某个命令的操作系统类型与确定的语法组匹配,则使用该命令的定义。
如果没有为语法组找到匹配的定义,函数模块将搜索操作系统类型为ANYOS(在所有支持的操作系统中可执行)的定义。如果找到这个定义,就使用它。
否则,将触发异常COMMAND_NOT_FOUND。

在这里插入图片描述

在这里插入图片描述

  • 对SAP service的上传和读取文件

T-code: AL11

AL11的user_dir创建

Step 1: 点configure

在这里插入图片描述

step 2,填写相关信息,并且保存

在这里插入图片描述
注:存在在AL11有纪录, 但实际上不存在的目录 ,DIR_ZEROLI2在服务器上其实是不存在的, 当我们双击它, 会有error message抛出,
当我们用open dataset语句去这个目录建一个文件时, 是不会成功的。

在服务器上建文件夹

  • 方法1:用事务码创建 SM69 or SM49

在这里插入图片描述
Step 1: 在SM69建一条命令, 支持dos或unix命令, 先保存再执行, 这里当然是建文件夹的命令, /c代表command

在这里插入图片描述
创建完成后保存,就可以在t-code al11查看结果。

  • 方法2:在代码里创建

用函数调用system command.

DATA: command1(64) TYPE c.
 
DATA:  BEGIN OF tabl OCCURS 0,
        line(200),
       END OF tabl.
 
DATA: lt_string TYPE STANDARD TABLE OF string,
      lv_strin TYPE string.
 
COMMAND1(9)    = 'mkdir -p '.
COMMAND1+9(55) = 'z_*********'.
 
CALL 'SYSTEM' ID 'COMMAND' FIELD COMMAND1
              ID 'TAB'     FIELD TABL-*SYS*.
 
BREAK-POINT ID z_*********.

Open dataset访问共享文件的权限(Windows)

工作组的共享文件

Step 1: 测试环境: A机Laoxiang: XP系统(共享文件夹所在机); B机Lupkid: Win7系统(SAP gui所在机); C机Vmecc: Win2003(装在B机的VMware, 同时C机也是SAP服务器).

保证AB相互ping通, AC相互ping通
Step 2: 测试代码:

TYPE-POOLS: z07tp.
 
DATA: gw_rec TYPE z07tp_rec,
      gt_rec TYPE STANDARD TABLE OF z07tp_rec.
 
CONSTANTS: cn_fname(8) TYPE c VALUE 'CUST07AD'.
 
CONSTANTS: cn_path(20) TYPE c VALUE '\\Laoxiang\zerotest\'.
 
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: pr_file(40) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.
 
INITIALIZATION.
  pr_file = cn_fname.
 
START-OF-SELECTION.
  CONCATENATE cn_path pr_file INTO pr_file.
  OPEN DATASET pr_file IN TEXT MODE FOR INPUT ENCODING DEFAULT.
  IF sy-subrc <> 0.
    WRITE:/ text-002.
    EXIT.
  ENDIF.
  DO.
    READ DATASET pr_file INTO gw_rec.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    APPEND gw_rec TO gt_rec.
  ENDDO.
 
END-OF-SELECTION.
  CLOSE DATASET pr_file.
  

SFTP文件传输在程序中调使用函数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    =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值