ABAP程序内调用其他事务call transaction用法

参考原文连接:https://blog.csdn.net/qq_33539438/article/details/116016267

  1. 使用BDC 参数调用事务码并进行跳转(本人没尝试过这种方法)
REPORT YTEST.
INCLUDE BDCRECXY. "使用BDC一定要包含此文件
DATA L_OPT TYPE CTU_PARAMS.
SELECTION-SCREEN PUSHBUTTON /1(20) PUBU1 USER-COMMAND ABCD."在选择界面上创建一个按钮

AT SELECTION-SCREEN OUTPUT.
  MOVE 'My Button' TO PUBU1.

AT SELECTION-SCREEN.
  CASE SY-UCOMM.
    WHEN 'ABCD'.
        PERFORM BDC_DYNPRO USING 'ZRPP_008'   '1000'.
        PERFORM BDC_FIELD  USING 'BDC_CURSOR' 'GW_HEADER-FILENO'.
        PERFORM BDC_FIELD  USING 'BDC_OKCODE' '=ZREFLESH'.
        PERFORM BDC_FIELD  USING 'GW_HEADER-FILENO' '100000000034'.
    
        L_OPT-DISMODE = 'E'.
        L_OPT-DEFSIZE = 'X'.
        
        CALL TRANSACTION 'ZPP083' WITH AUTHORITY-CHECK USING BDCDATA OPTIONS FROM L_OPT. "WITH  WITHOUT
  ENDCASE.

2、使用 PARAMETER ID 调用事务码并进行跳转(我自己用的)

使用场景:双击调用事务CS03并将参数填进事务CS03的PARAMETER ID里面。

注:如何查看事务CS03的PARAMETER ID:

*定义结构体
TYPES: BEGIN OF t_str,
         mandt    TYPE mast-mandt,  "公司
         werks    TYPE mast-werks,  "工厂
         matnr    TYPE mast-matnr,  "物料编号
         stlan    TYPE mast-stlan,  "物料清单用途
         maktx    TYPE makt-maktx,  "物料描述
         meinh    TYPE marm-meinh,   "计量单位
         beskz    TYPE marc-beskz,  "采购类型
         beskz_zh TYPE c LENGTH 20, "采购类型中文描述
         sobsl    TYPE marc-sobsl,  "特殊采购类型
       END OF t_str.

*定义内表和结构
DATA: gt_alv TYPE TABLE OF t_str,
      gs_alv TYPE t_str.

DATA:grid      TYPE REF TO cl_gui_alv_grid,      "调用avl控件
     container TYPE REF TO cl_gui_custom_container.

*定义事件类
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS: handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
      IMPORTING e_row e_column.
ENDCLASS.
*实现事件方法
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_double_click.
    CONDENSE e_row NO-GAPS.
    CONDENSE e_column NO-GAPS.
    IF e_column EQ 'MATNR'.
      CLEAR gs_alv.
      READ TABLE gt_alv INTO gs_alv INDEX e_row.  "根据INDEX读取内表的目标行数据
      SET PARAMETER ID 'MAT' FIELD gs_alv-matnr.  "设置目标参数ID的值
      SET PARAMETER ID 'CSV' FIELD gs_alv-stlan.
      SET PARAMETER ID 'WRK' FIELD gs_alv-werks.
      CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.  "调用事务并跳过初始界面
    ENDIF.
  ENDMETHOD.
ENDCLASS.

DATA: event_receiver TYPE REF TO lcl_event_receiver. "创建事件类
  CREATE OBJECT event_receiver.                         "创建事件类对象
  SET HANDLER event_receiver->handle_double_click FOR grid."注册事件

3、以上两种方式都能使用 ABAP4_CALL_TRANSACTION 来进行跳转

"仅事务跳转
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
    EXPORTING
    TCODE = 'SE38'.

"使用 PARAMETER ID
DATA:GT_RFC_SPAGPA TYPE TABLE OF RFC_SPAGPA,
     GW_RFC_SPAGPA LIKE LINE OF GT_RFC_SPAGPA.
    GW_RFC_SPAGPA-PARID = 'BES'.
    GW_RFC_SPAGPA-PARVAL = '4110000051'.
    APPEND GW_RFC_SPAGPA TO GT_RFC_SPAGPA.
    CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
      EXPORTING
        TCODE = 'ME23N'
        SKIP_SCREEN = 'X' "SKIP FIRST SCREEN
      TABLES
        SPAGPA_TAB = GT_RFC_SPAGPA.

"使用BDC 参数
DATA:BDCDATA LIKE BDCDATA OCCURS WITH HEADER LINE.
DATA:MESSTAB LIKE BDCMSGCOLL OCCURS WITH HEADER LINE.

    PERFORM BDC_DYNPRO USING 'ZRPP_008'   '1000'.
    PERFORM BDC_FIELD  USING 'BDC_CURSOR' 'GW_HEADER-FILENO'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE' '=ZREFLESH'.    
    PERFORM BDC_FIELD  USING 'GW_HEADER-FILENO' '100000000034'.
  CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
    EXPORTING
      TCODE = 'ZPP083'
      MODE_VAL   = 'A'    "A:前台,显示屏幕    E:遇到错误停止并显示    N:后台模式
      UPDATE_VAL = 'S'    "A:异步   S:同步     L:本地模式
    TABLES
      USING_TAB = BDCDATA
      MESS_TAB  = MESSTAB.

4、调用TH_CREATE_MODE (调用TCODE并在新窗口展示)

CALL FUNCTION 'TH_CREATE_MODE'
      EXPORTING
        transaktion    = 'SE38'.

————————————————
版权声明:本文为CSDN博主「qq_986119050」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33539438/article/details/116016267

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值