abap中程序跳转(全)

1.常用

https://www.cnblogs.com/jiangzhengjun/p/4292545.html

https://blog.csdn.net/jy00873757/article/details/8517426

parameter ID

 这样很方便一些客户用特定的数据,那如何去找parameter ID呢?

      第一种方法,大家都很熟悉的就是用F1,直接可以看到这个数据元素的PARAMETER ID
      第二种方法,直接到表里去找,表名是DD04L

      但是这两种办法都是只能找到数据元素定义了parameter id的
     如果parameter id没有和数据元素挂钩,那就找不到了
     例如做会计清帐的时候,F-04里面有一个字段VAUSK,它的数据元素是VARNR_021
     通过F1是找不到parameter id的,那就要用下面的两种办法了

      第三种办法,通过表TPARA去找,所有的parameter id都能找到,但是只有描述,也很难找到

      第四种办法,通过程序RPR_ABAP_SOURCE_SCAN去找  这个程序可以查找程序、屏幕等等

       例如程序名我们输入SAPMF05O(清帐的标准程序),屏幕输入1101(标准屏幕)
      字段输入VAUSK,运行,就可以找到parameter id 是LLK了
      源代码是get parameter id 'LLK' field rfcu4-vausk.    " Ausgleichsv. Kreditor。

程序跳转时的传参

REPORT ZTXYY_11114.

GET PARAMETER ID 'ZTXYY_11113' FIELD DATA(lv_flag).
WRITE lv_flag.
**************************************************
REPORT ZTXYY_11115.
SET PARAMETER ID 'ZTXYY_11113' FIELD abap_true.
SUBMIT ZTXYY_11114.

执行ZTXYY_11115结果:

 其中的PARAMETER ID 'ZTXYY_11113'这个ZTXYY_11113是随意定义的名称

该种方法缺陷在于无法用FREE MEMORY.或者FREE MEMORY ID 'ZTXYY_11113'.来清空缓存

PC = 'Z'.
EXPORT P1 = PC TO MEMORY ID 'ZTXYY'.


DATA PC.
IMPORT P1 = PC FROM MEMORY ID 'ZTXYY'.

1.CALL TRANSACTION

1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN].

其中ta为事务码tcode使用时要打单引号(')

2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK
                      USING bdc_tab { { [MODE mode] [UPDATE upd]}
                                    |  [OPTIONS FROM opt] }
                                       [MESSAGES INTO itab].

其中ta为事务码tcode使用时要打单引号(')

CALL TRANSACTION T-CODE WITH|WITHOUT AUTHORITY-CHECK 
 
                        USING bdc_tab [OPTIONS FROM opt].

代码使用

SET PARAMETER ID 'AAT' FIELD 'RK'.
SET PARAMETER ID 'SPA' FIELD p_shar."这后面可以接变量(选择屏幕变量)
SET PARAMETER ID 'VTW' FIELD '10'."要传几个参数值就写几行
CALL TRANSACTION 'VA01'." AND SKIP FIRST SCREEN .
*++++++++++++++++++++++++++++++++++++++++++++++++++++++*
CALL TRANSACTION 'VA01' AND SKIP FIRST SCREEN .
"加上AND SKIP FIRST SCREEN会在传值之后直接执行或者回车
GET PARAMETER ID 'AAT' FIELD STR."获取值
*FREE MEMORY ID 'AAT'."memory id清除memory id

其中AND SKIP FIRST SCREEN表示根据输入的参数直接跳转到相关操作页面

BDC传参

DATA bdcdata_tab TYPE TABLE OF bdcdata.
 
    DATA opt TYPE ctu_params.
 
    bdcdata_tab = VALUE #(
      ( program  = 'SAPLSEOD' dynpro   = '1000' dynbegin = 'X' )
      ( fnam = 'BDC_CURSOR'       fval = 'SEOCLASS-CLSNAME' )
      ( fnam = 'SEOCLASS-CLSNAME' fval = class_name )
      ( fnam = 'BDC_OKCODE'       fval = '=WB_DISPLAY' ) ).
 
    opt-dismode = 'E'.
    opt-defsize = 'X'.
 
    TRY.
        CALL TRANSACTION 'SE24' WITH AUTHORITY-CHECK
                                USING bdcdata_tab OPTIONS FROM opt.
      CATCH cx_sy_authorization_error ##NO_HANDLER.
    ENDTRY.

WITH AUTHORITY-CHECK.

  TRY.
      CALL TRANSACTION 'F-02' WITH AUTHORITY-CHECK.
    CATCH cx_sy_authorization_error.
      MESSAGE s001(00) WITH '无此事务代码操作权限,请检查' DISPLAY LIKE 'E'.
      RETURN.
  ENDTRY.
*如果程序没有上述权限异常控制,当权限不够时,可能会导致当前程序dump

其中的多值传递范例

DATA STR TYPE C LENGTH 25.

GET PARAMETER ID 'VKO' FIELD STR."获取SET ID的值

1.方法1

REPORT ZTXYY_1141.
TABLES:VBRK.
DATA STR TYPE C LENGTH 25.
SELECT-OPTIONS s_matnr FOR VBRK-VKORG ."MEMORY ID ZDEMO.

FREE MEMORY ID 'ZDEMO'."清除MEMORY ID
EXPORT s_matnr FROM s_matnr TO MEMORY ID 'ZDEMO'."传入MEMORY ID
*SET PARAMETER ID 'VKO' FIELD STR."实现单值输入
CALL TRANSACTION 'ZTXYY_1142' ."AND SKIP FIRST SCREEN.

程序ztxyy_1142定义了一个同名的tcode.

REPORT ztxyy_1142.
TABLES:vbrk.
DATA str1 TYPE c LENGTH 25.
SELECT-OPTIONS s_matnr FOR vbrk-vkorg.
SELECT-OPTIONS s_matnr2 FOR vbrk-vkorg.

INITIALIZATION.
*  GET PARAMETER ID 'VKO' FIELD str1."获取SET ID的值
  IMPORT s_matnr TO s_matnr FROM MEMORY ID 'ZDEMO'."读取MEMORY ID
  FREE MEMORY ID  'ZDEMO'."清除MEMORY ID

ABAP程序间跳转CALL TRANSACTION-CSDN博客

2.通过 BDC的方式传入多参数值

ABAP程序中SUBMIT Program时、BDC CALL Transaction时填充参数的代码模板_abap submit-CSDN博客

Call Transaction也即直接调用一个事务代码,其语法如下:

CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK
… … … … … … … … USING bdc_tab { {[MODE mode] [UPDATE upd]}
… … … … … … … … | [OPTIONS FROM opt] }
… … … … … … … … [MESSAGES INTO itab].

具体的关键字用法,可查看ABAP的帮助文档。在CALL transaction时,其难点在于BDC字段的填充。

注:BDC - Batch Data Input是SAP非常经典一种批量导入技术,可以通过录制屏幕(Tx: SHDB)操作,生成代码。

在编程过程中,如果遇到类似的需求,也可以用 宏 DEFINE 快速实现,具体可参考下面的模板。

下例中,填充BDC包含了两种复杂操作,一种是填充selection-option, 另一种是通过剪切板中的内容来填充selection option,因此调用到了 cl_gui_frontend_services=>clipboard_expor()这个服务。

模版

  DATA:
    lt_clipdata  TYPE STANDARD TABLE OF char120,
    lv_rc        TYPE i,
    ls_bdc       TYPE bdcdata,
    lt_bdc       TYPE STANDARD TABLE OF bdcdata WITH DEFAULT KEY.
 
  FIELD-SYMBOLS:
    <ls_msgguid> LIKE LINE OF it_msgguid.
 
  DEFINE bdc_dynpro.
    CLEAR ls_bdc.
    ls_bdc-program  = &1.
    ls_bdc-dynpro   = &2.
    ls_bdc-dynbegin = 'X'.
    INSERT ls_bdc INTO TABLE lt_bdc.
  END-OF-DEFINITION.                    "BDC_DYNPRO
  
  DEFINE bdc_field.
    CLEAR ls_bdc.
    ls_bdc-fnam = &1.
    ls_bdc-fval = &2.
    INSERT ls_bdc INTO TABLE lt_bdc.
  END-OF-DEFINITION.                    "BDC_DYNPRO
 
  CLEAR es_msg.
 
  CHECK it_msgguid IS NOT INITIAL.
 
  LOOP AT it_msgguid ASSIGNING <ls_msgguid>.
    INSERT CONV #( <ls_msgguid>-msgguid ) INTO TABLE lt_clipdata.
  ENDLOOP.
  IF sy-subrc = 0.
    DATA(lv_msgguid) = it_msgguid[ 1 ]-msgguid.
 
* Put into clipboard
    cl_gui
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值