abap中程序跳转(全)

1.常用

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

程序跳转时的传参

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是随意定义的名称

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_frontend_services=>clipboard_export(
      IMPORTING
        data                 =     lt_clipdata
*        length               =     " Data length
      CHANGING
        rc                   = lv_rc
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4
    ).
    IF sy-subrc <> 0.
      RETURN.
    ENDIF.
  ENDIF.
  " fill normal screen parameters
   bdc_dynpro '/AIF/ERROR_HANDLING_TRANS' '1000'.
   bdc_field 'BDC_OKCODE' '=%00291010003785126'.
   bdc_field 'P_APPL' 'AIF'.
   bdc_field 'P_STS_S' 'X'.
   bdc_field 'P_STS_W' 'X'.
            
   " selection-option fill 2 values
   bdc_field 'S_IFNAME-LOW' 'TEST_A'. 
   bdc_dynpro 'BDC_CURSOR' 'S_IFNAME-LOW'.
   bdc_dynpro 'SAPLALDB' '3000'.   
   bdc_field 'BDC_OKCODE' '=ACPT'.
   bdc_field 'BDC_CURSOR' 'RSCSEL_255-SLOW_I(02)'.
   bdc_field 'RSCSEL_255-SLOW_I(02)' 'TEST_B'.
   " fill selection-option from clipboard
   bdc_dynpro '/AIF/ERROR_HANDLING_TRANS' '1000'.
   bdc_field 'BDC_CURSOR' 'S_GUID32-LOW'.
   bdc_field 'BDC_OKCODE' '=%034'.
   bdc_dynpro 'SAPLALDB' '3000'.
   bdc_field 'BDC_OKCODE' '=CLIP'. 
   bdc_field 'BDC_CURSOR' 'RSCSEL_255-SLOW_I(01)'.
   bdc_dynpro 'SAPLALDB' '3000'.
   bdc_field 'BDC_OKCODE' '=ACPT'. 
   bdc_field 'BDC_CURSOR' 'RSCSEL_255-SLOW_I(01)'.
 
   CALL TRANSACTION '/AIF/ERR' USING lt_bdc  
                               MODE 'E'.

小技巧:

填充BDC参数时,可以先用Tx: SHDB录制一个预期屏幕操作,然后导出到一个local的程序中,这样在填充BDC参数时,便可以参考系统自动生成的程序。
如果遇到,需要在新窗口打开被调用的程序,则可以使用 ABAP4_CALL_TRANSACTION这个函数,也即对CALL Transaction进行了一个RFC的封装,这样就可以在一个新的进程中打开被调用的transaction。其中田中using_tab参数也即bdc格式的参数。示例如下:

" same as CALL TRANSACTION '/AIF/ERR' USING lt_bdc. 
" but open in a new window.
 
     CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
       STARTING NEW TASK 'AIF'
       EXPORTING
         tcode                   = '/AIF/ERR'
         mode_val                = 'E'
         update_val              = 'L'
       TABLES
         using_tab               = lt_bdc   
       EXCEPTIONS
         call_transaction_denied = 1
         tcode_invalid           = 2
         OTHERS                  = 3.
     IF sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       RETURN.
     ENDIF.
 DATA: lt_bdcdata_tab TYPE TABLE OF bdcdata,
        ls_opt         TYPE ctu_params.
lt_bdcdata_tab = VALUE #(
    ( program  = 'ZPSR018_CONFIRM' dynpro   = '1000' dynbegin = 'X' )
    ( fnam = 'BDC_CURSOR'       fval = 'S_PSPID-LOW' ) "其中fval为值 fnam为参数ID
    ( fnam = 'S_VERNR-LOW'      fval = lv_vernr_low )      "这里实现了多值输入
    ( fnam = 'S_VERNR-HIGH'     fval = lv_vernr_high ) ).
ls_opt = VALUE #( dismode = 'E'
                    defsize = 'X' ).
 
  TRY.
      CALL TRANSACTION 'ZPSR018A' WITH AUTHORITY-CHECK
                                 USING lt_bdcdata_tab OPTIONS FROM ls_opt.
    CATCH cx_sy_authorization_error ##NO_HANDLER.
  ENDTRY.

     代码BDC方式跳转
      DATA:lt_bdcdata TYPE TABLE OF bdcdata,
           ls_bdcdata LIKE LINE OF lt_bdcdata.
      DATA:lt_bdcmsgcoll TYPE TABLE OF bdcmsgcoll.
      
      CLEAR: ls_bdcdata.
      ls_bdcdata-program = 'SAPMM06E'.
      ls_bdcdata-dynpro = 0205.
      ls_bdcdata-dynbegin = 'X'.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CLEAR: ls_bdcdata.
      ls_bdcdata-fnam = 'RM06E-EVRTN'.
      ls_bdcdata-fval = gs_alv2-ebeln.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CLEAR: ls_bdcdata.
      ls_bdcdata-fnam = 'BDC_OKCODE'.
      ls_bdcdata-fval = '/00'.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CALL TRANSACTION 'ME33L' USING lt_bdcdata MODE 'E' UPDATE 'S'.

2.SUBMIT

SUBMIT {rep|(name)} [selscreen_options]
                    [list_options]
                    [job_options]
                    [AND RETURN].

... USING SELECTION-SCREEN dynnr

ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION_abap 事务传参数-CSDN博客 建议阅读

  SUBMIT zlxf003 VIA SELECTION-SCREEN"跳转后保留zlxf003程序执行后的第一个窗口
                   WITH p_date = p_date "字段传值也可以p_date = 1
                   WITH s_bukrs IN s_bukrs "多值传递 不可用s_bukrs-low = s_bukrs-low
                   WITH s_hkont IN s_hkont "多值传递 不可用s_bukrs-high = s_bukrs-high来实现
                   WITH p_rd1 = p_rd1
                   WITH p_rd2 = p_rd2
                   WITH p_rd3 = p_rd3
                   AND RETURN."从调用程序返回后可以返回到主程序的执行界面

SUBMIT 后面跟着的是程序名而不是tcode事务码

SUBMIT ZTXYY_1142 ."会直接调用程序ZTXYY_1142跳过选择屏幕
*点击返回按钮会直接返回原主程序代码界面

 SUBMIT report EXPORTING LIST TO MEMORY
              AND RETURN.

首先EXPORTING LIST TO MEMORY必须要和 AND RETURN 一起使用,其次,它的功能是将report产生的list清单,写入ABAP 缓存里。我们可以通过几个有用的Function module 将这些信息读取、展示等

SUBMIT... AND RETURN EXPORTING LIST TO MEMORY.

将被调程序的输出列表存储到ABAP内存中,可以在被调程序执行完后,主调程序还可以访问它。EXPORTING LIST TO MEMORY选项需要与AND RETURN选项一起使用。并且不能将EXPORTING LIST TO MEMORY选项与TO SAP-SPOOL选项一起使用。

输出列表存到内存里时,会以行类型为ABAPLIST的内表形式保存,可以使用下面这几个Function来访问ABAP内在中保存的输出列表(这些函数都是属于function group SLST):

LIST_FROM_MEMORY:从ABAP Memory中将ListsLoad到row type ABAPLIST的内表中

WRITE_LIST:将行类型为ABAPLIST 的内表中的内容插入到当前输出列表中.

DISPLAY_LIST:将行类型为ABAPLIST 的内表中的内容显示在独立的list screen中

LIST_TO_ASCI:将行类型为ABAPLIST 的内表中的内容转换ASCII形式

DATA list_tab TYPE TABLE OF abaplist.
SUBMIT report EXPORTING LIST TO MEMORY
              AND RETURN.
"从ABAP内存中加载缓存的LIST
CALL FUNCTION 'LIST_FROM_MEMORY'
  TABLES
    listobject = list_tab
  EXCEPTIONS
    not_found  = 1
    OTHERS     = 2.
"在当前屏幕中显示上面加载的LIST
IF sy-subrc = 0.
  CALL FUNCTION 'WRITE_LIST'
    TABLES
      listobject = list_tab.
ENDIF.

submit动态调用程序名--SUBMIT (p_chr1) VIA SELECTION-SCREEN AND RETURN.

REPORT ZTXYY_1143.
PARAMETERS p_chr1 TYPE c LENGTH 100 OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_chr1.
  PERFORM p_set_selection.
START-OF-SELECTION.
SUBMIT (p_chr1) VIA SELECTION-SCREEN AND RETURN.
end-of-SELECTION.
FORM p_set_selection .
  TYPES :BEGIN OF ty,
    col1 TYPE ztable,
    col2 TYPE ZPROGRAM,"必须是定义好了的se11数据
  END OF ty.
  DATA itab TYPE TABLE OF ty.
  itab = VALUE #(
  ( col1 = 'ZGD0001' col2 = 'AQZZZA_XYY01====ZA_XYYF01=====')"
  ( col1 = '2' col2 = 'ISSUE' )
  ( col1 = '3' col2 = 'SENT')
  ( col1 = '4' col2 = 'CONFIRMED')
  ).


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  EXPORTING
*     DDIC_STRUCTURE   = ' '
    retfield         = 'COL2'
*     PVALKEY          = ' '
    dynpprog         = sy-repid
    dynpnr           = sy-dynnr
    dynprofield      = 'P_CHR1'
*     STEPL            = 0
    window_title     = 'WINDOW--TITLE'
*     VALUE            = ''
    value_org        = 'S' "C表示cell,S表示structure
*     MULTIPLE_CHOICE  = 'X'"多项选择,用于SELECT-OPTIONS
*     DISPLAY          = 'F'"C则只能显示,不能选择
    callback_program = sy-repid
*     CALLBACK_FORM    = ' '
*     MARK_TAB         =
*   IMPORTING
*     USER_RESET       =
  TABLES
    value_tab        = itab
*     FIELD_TAB        = FIELD_TAB
*     RETURN_TAB       =
*     DYNPFLD_MAPPING  =
  EXCEPTIONS
    parameter_error  = 1
    no_values_found  = 2
    OTHERS           = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

submit调用程序时传参

调用程序传输屏幕参数时可以有两种方法:

1:

  SUBMIT zmmt004 USING SELECTION-SCREEN '1000'
              WITH p_on EQ p_on EXPORTING LIST TO MEMORY
              WITH s_bukrs IN s_bukrs
              AND RETURN.
2.
data:rspar_tab TYPE TABLE OF rsparams,
  rspar_stu TYPE rsparams.
rspar_stu-selname = 'SO_BUKRS'."Company code 调用程序中的屏幕变量名
	rspar_stu-kind    = 'S'."表示是多选框
	rspar_stu-sign    = 'I'.
	rspar_stu-option  = 'EQ'.
	rspar_stu-low     = p_comp."p_comp是一个变量
	APPEND rspar_tab TO rspar_stu.
  CLEAR rspar_stu.
   	rspar_stu-selname = 'PA_XKONS'."Company code 调用程序中的屏幕变量名	
	rspar_stu-sign    = 'I'.
	rspar_stu-option  = 'EQ'.
	rspar_stu-low     = ''."没有kind值表示为单选框或按钮或单输入框
	APPEND rspar_tab TO rspar_stu.
  CLEAR rspar_stu.

    SUBMIT zRM06INP0  WITH SELECTION-TABLE rspar_tab  EXPORTING LIST TO MEMORY
                   AND RETURN.

其中rspar_tab是参考结构 rsparams定义的

将被调用程序设置为后台作业模式运行

FORM frm_bajob_data .
 
  DATA: lv_jobname  TYPE tbtcjob-jobname,
        lv_jobcount TYPE tbtcjob-jobcount.
 
  CONCATENATE 'ZLXF003_' sy-datum sy-uzeit INTO lv_jobname.
 
**********************************************************************
*   启动后台作业
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname          = lv_jobname
      sdlstrtdt        = sy-datum
      sdlstrttm        = sy-uzeit
    IMPORTING
      jobcount         = lv_jobcount
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
 
**********************************************************************
*  submit 程序
  SUBMIT zlxf003 AND RETURN
                   WITH p_date = p_date
                   WITH s_bukrs IN s_bukrs
                   WITH s_hkont IN s_hkont
                   WITH p_rd1 = p_rd1
                   WITH p_rd2 = p_rd2
                   WITH p_rd3 = p_rd3
                   USER sy-uname
                   VIA JOB lv_jobname
                   NUMBER lv_jobcount.
 
**********************************************************************
*   关闭后台
  "参数cant_start_immediate设置后天作业启动优先级,如果不设置的话,可能导致作业挂起,不能实时执行
  CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
      jobcount             = lv_jobcount
      jobname              = lv_jobname
      laststrtdt           = sy-datum
      laststrttm           = sy-uzeit
      strtimmed            = 'X'
    EXCEPTIONS
      cant_start_immediate = 1
      invalid_startdate    = 2
      jobname_missing      = 3
      job_close_failed     = 4
      job_nosteps          = 5
      job_notex            = 6
      lock_failed          = 7
      invalid_target       = 8
      invalid_time_zone    = 9
      OTHERS               = 10.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
ENDFORM.

3.LEAVE TO TRANSACTION

LEAVE TO { {TRANSACTION ta} | {CURRENT TRANSACTION} }
         [AND SKIP FIRST SCREEN].

1.使用后跳转到对应的事务码====点击返回按钮回到空会话窗口(原程序被关闭)

LEAVE TO TRANSACTION 'VA01' ."AND SKIP FIRST SCREEN.

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

  LEAVE.""离开当前程序,如果当前程序是被调程序则返回到主调程序
  LEAVE PROGRAM."退出整个程序,并删除所在内部会话、包括加载的程序、实例、数据。

2.函数实现跳转

1.TH_CREATE_MODE

新建session会话的函数

效果1.调用程序需要tcode,2.调用会打开新会话(sap只支持六个会话)

3.点击返回按钮无法返回原来的程序界面4.会进行权限检查

CALL FUNCTION 'TH_CREATE_MODE'
EXPORTING
   TRANSAKTION          = 'VL01N'        "事务码
*   DEL_ON_EOT           = 0
   PARAMETERS           = 'LIKP-VSTEL = 8510 LV50C-DATBI = 20140509 LV50C-VBELN = 35001147'     "事务码选择屏幕的参数
   PROCESS_DARK         = 'X'             "跳过初始选择屏幕(像va01的屏幕就跳不过去)
* IMPORTING
*   MODE                 =
EXCEPTIONS
   MAX_SESSIONS         = 1
   INTERNAL_ERROR       = 2
   NO_AUTHORITY         = 3
   OTHERS               = 4.

2.TH_CREATE_FOREIGN_MODE

新建session会话的函数

效果1.调用程序需要tcode,2.调用会打开新会话(sap只支持六个会话)

3.点击返回按钮无法返回原来的程序界面4.无法在函数中给屏幕字段传值

CALL FUNCTION 'TH_CREATE_FOREIGN_MODE'
  EXPORTING
    client                 = sy-mandt
    user                   = 'T008'  "系统中的用户名
   TCODE                  = 'VA01'    "事务码
   RETURN_ERROR           = 1
   CREATE_EXCLUSIVE       = 0
 EXCEPTIONS
   USER_NOT_FOUND         = 1
   CANT_CREATE_MODE       = 2
   NO_AUTHORITY           = 3
   OTHERS                 = 4
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

3.CC_CALL_TRANSACTION_NEW_TASK

新建session会话的函数

效果1.调用程序需要tcode,2.调用会打开新会话(sap只支持六个会话)

3.点击返回按钮,可以返回原屏幕并关闭打开的新会话.(效果类似SUBMIT语句)

WRITE 'This is the main ABAP program'.
DATA :
  LV_SKIP(1)  TYPE C VALUE 'X',
  LV_VBELN    LIKE VBAK-VBELN VALUE '20000190',
  L_ST_PARAM  TYPE TPARA,
  L_IT_PARAMS TYPE TABLE OF TPARA.
CLEAR L_ST_PARAM.
CLEAR L_IT_PARAMS[].
L_ST_PARAM-PARAMID = 'AUN'.
L_ST_PARAM-PARTEXT = LV_VBELN.
APPEND L_ST_PARAM TO L_IT_PARAMS.
CALL FUNCTION 'CC_CALL_TRANSACTION_NEW_TASK'
"  STARTING NEW TASK 'VA03'"表异步
"  DESTINATION 'NONE'"
  EXPORTING
    TRANSACTION           = 'VA03'
    SKIP_FIRST_SCREEN     = 'X'
  TABLES
    PARAMTAB              = L_IT_PARAMS"传屏幕参数的表
  EXCEPTIONS
    COMMUNICATION_FAILURE = 97
    SYSTEM_FAILURE        = 98
    OTHERS                = 99.
IF SY-SUBRC = 0.
  " Success
ELSEIF SY-SUBRC = 97.
  " Communication Failure
  EXIT.
ELSEIF SY-SUBRC = 98.
  " System Failure
  EXIT.
ELSE.
  EXIT.
ENDIF.

这里原函数

CALL FUNCTION 'CC_CALL_TRANSACTION_NEW_TASK'
  EXPORTING
    transaction             =
    skip_first_screen       =
* TABLES
*   PARAMTAB                =
* EXCEPTIONS
*   ERROR                   = 1
*   OTHERS                  = 2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

4.ABAP4_CALL_TRANSACTION

新建session会话的函数

效果1.调用程序需要tcode,2.调用会打开新会话(sap只支持六个会话)

3.点击返回按钮,可以返回原屏幕并关闭打开的新会话.(效果类似SUBMIT语句)

WRITE 'This is the main ABAP report calling the SAP Transaction VA03 in a new session or in a new window'.
DATA :    WA_SPA   TYPE RFC_SPAGPA,
          ITAB_SPA TYPE TABLE OF RFC_SPAGPA."传屏幕参数的表
WA_SPA-PARID = 'AUN'.    "屏幕参数id
WA_SPA-PARVAL = '20000190'.
APPEND WA_SPA TO ITAB_SPA.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
  STARTING NEW TASK 'VA03'
  DESTINATION 'NONE'
  EXPORTING
    TCODE                 = 'VA03'
    SKIP_SCREEN           = 'X'
  TABLES
    SPAGPA_TAB            = ITAB_SPA"传屏幕参数的表
  EXCEPTIONS
    COMMUNICATION_FAILURE = 1
    SYSTEM_FAILURE        = 2.
IF SY-SUBRC <> 0.
  " ERROR
ENDIF.

原函数代码

CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
  EXPORTING
    tcode                         =
*   SKIP_SCREEN                   = ' '
*   MODE_VAL                      = 'A' "A:前台,显示屏幕    E:遇到错误停止并显示    N:后台模式
*   UPDATE_VAL                    = 'A'"A:异步   S:同步     L:本地模式
* IMPORTING
*   SUBRC                         =
* TABLES
*   USING_TAB                     =
*   SPAGPA_TAB                    =
*   MESS_TAB                      =
* EXCEPTIONS
*   CALL_TRANSACTION_DENIED       = 1
*   TCODE_INVALID                 = 2
*   OTHERS                        = 3
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

函数跳转

ABAP Call Transaction功能大全-CSDN博客

matinal:ABAP 跳转事务码汇总_abap 跳转va43-CSDN博客

1. 使用语法跳转
LEAVE TO TRANSACTION ‘TCODE’ AND SKIP FIRST SCREEN.

2. 跳转MIGO
CALL FUNCTION ‘MIGO_DIALOG’.

物料凭证:
        SET PARAMETER ID 'MBN' FIELD itab-belnr.
        SET PARAMETER ID 'MJA' FIELD itab-gjahr.
        SET PARAMETER ID 'BUK' FIELD itab-bukrs.


        CALL FUNCTION 'MIGO_DIALOG'
             EXPORTING
                  i_action            = 'A04'
                  i_refdoc            = 'R02'
                  i_notree            = 'X'
                  i_skip_first_screen = 'X'
                  i_okcode            = 'OK_GO'
                  i_mblnr             = itab-belnr
                  i_mjahr             = itab-gjahr
             EXCEPTIONS
                  illegal_combination = 1
                  OTHERS              = 2.

3. 跳转ME23N
CALL FUNCTION ‘ME_DISPLAY_PURCHASE_DOCUMENT’.

CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
  EXPORTING
    i_ebeln                    = '6200023142'
   I_EBELP                    = '10'
   I_ENJOY                    = 'X'
   I_PREVIEW                  =  'X'   "显示打印视图
*   I_DATA_FROM_BUFFER         =
*   I_BSTYP                    =
*   I_DISPLAY_ONLY             = ' '
*   I_EDIT                     = ' '
*   I_ETENR                    =
*   I_DOC_INITIATOR            =
*   I_COMMIT_WAIT              =
 EXCEPTIONS
   NOT_FOUND                  = 1
   NO_AUTHORITY               = 2
   INVALID_CALL               = 3
   PREVIEW_NOT_POSSIBLE       = 4
   OTHERS                     = 5
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

4. 跳转到CODE编辑器
CALL FUNCTION ‘EDITOR_PROGRAM’.

5. 跳转维护视图
CALL FUNCTION ‘VIEW_MAINTENANCE_CALL’.

6. 跳转显示物料视图
CALL FUNCTION ‘CP_08_MATERIAL_SHOW’.

7. 用BDC的方式跳转事务码的函数
CALL FUNCTION ‘ABAP4_CALL_TRANSACTION’.

     代码BDC方式跳转
      DATA:lt_bdcdata TYPE TABLE OF bdcdata,
           ls_bdcdata LIKE LINE OF lt_bdcdata.
      DATA:lt_bdcmsgcoll TYPE TABLE OF bdcmsgcoll.
      
      CLEAR: ls_bdcdata.
      ls_bdcdata-program = 'SAPMM06E'.
      ls_bdcdata-dynpro = 0205.
      ls_bdcdata-dynbegin = 'X'.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CLEAR: ls_bdcdata.
      ls_bdcdata-fnam = 'RM06E-EVRTN'.
      ls_bdcdata-fval = gs_alv2-ebeln.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CLEAR: ls_bdcdata.
      ls_bdcdata-fnam = 'BDC_OKCODE'.
      ls_bdcdata-fval = '/00'.
      APPEND ls_bdcdata TO lt_bdcdata.
 
      CALL TRANSACTION 'ME33L' USING lt_bdcdata MODE 'E' UPDATE 'S'.

8. 调用SE16查询
RS_TABLE_LIST_CREATE

9. 调用PO物料查询MM03

MMPUR_MATERIAL_DISPLAY

PO的物料:
        CALL FUNCTION 'MMPUR_MATERIAL_DISPLAY'
             EXPORTING
                  im_matnr = itab-matnr.
CALL FUNCTION 'MMPUR_MATERIAL_DISPLAY'
EXPORTING
  im_matnr = '1689M62P01'.

SET PARAMETER ID 'MXX' FIELD 'E'. "Table T132,决定显示哪个视图
       SET PARAMETER ID 'MAT' FIELD itab-matnr.
       SET PARAMETER ID 'WRK' FIELD itab-werks.
       SET PARAMETER ID 'LIF' FIELD itab-lifnr.
*       Set parameter id 'KAR' field '001'.
*       SET PARAMETER ID 'LAG' FIELD im_lgort.
       CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

MXX的选择看表T132 (同时看表MOFF)
A           工作计划
B           会计
C           分类
D           物料需求计划
E           采购
F           生产资源/工具
G           成本核算
K           基本数据
L           存储
P           预测
Q           质量管理
S           仓库管理
V           销售
X     X     工厂库存
Z     X     存储位置库存

供应商:
        CALL FUNCTION 'MMPUR_VENDOR_DISPLAY'
             EXPORTING
                  im_lifnr = itab-lifnr
                  im_ekorg = 'B000'.


信息记录:
       CALL FUNCTION 'MMPUR_INFO_RECORD_DISPLAY'
         EXPORTING
              im_infnr = itab-infnr
              im_ekorg = 'B000'
              im_werks = itab-werks.
工厂:
       DATA: ls_vt001w TYPE v_t001w.
       ls_vt001w-mandt = sy-mandt.
       ls_vt001w-werks = itab-werks.
       CALL FUNCTION 'VIEW_MAINTENANCE_SINGLE_ENTRY'
         EXPORTING
           action    = 'SHOW'
           view_name = 'V_T001W'
         CHANGING
           entry     = ls_vt001w.


      注:一般维护视图的界面可以用这个方法


*几个关于"Display"的Function Group:CK50,EDI5,MEEXT等


会计凭证:


SET PARAMETER ID 'BLN' FIELD '90000046' .
SET PARAMETER ID 'BUK' FIELD '1000'.
SET PARAMETER ID 'GJR' FIELD '2008'.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .


程序或者函数:


CALL FUNCTION 'EDITOR_PROGRAM'
  EXPORTING                   
    display = 'X'             
    program = it_tfdir-incname
  EXCEPTIONS                  
    OTHERS  = 1.              


函数组:


CALL FUNCTION 'RS_FUNCTION_POOL_CHANGE'
  EXPORTING                           
    aktion        = 'SHOW'            
    function_pool = it_tfdir-fgname   
  EXCEPTIONS                          
    OTHERS        = 9.  

有空看看这个

ABAP CALL TRANSACTION 调用事务码方式-SAP技术站ABAP CALL TRANSACTION 调用事务码方式,使用BDC参数调用事务码并进行跳转REPORTYTEST.INCLUDEBDCRECXY."使用BDC一定要包含此文件DATAL_OPTTYPECTU_PARAMS.SELECTION-SCREENPUSHBUTTON/1(20)PUBU1icon-default.png?t=N7T8https://www.sapcenter.cn/archive/post/354567785943109.html

10. 调用SM30维护表

CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
  EXPORTING
    action                               = 'U' "S 查看 U 修改 T 传输
*   CORR_NUMBER                          = '          '"更改后产生请求号
*   GENERATE_MAINT_TOOL_IF_MISSING       = ' '    "创建维护对话框
   SHOW_SELECTION_POPUP                 = ''  "是否显示选择画面
    view_name                            = 'ZTB_FI154_1' "视图名
*   NO_WARNING_FOR_CLIENTINDEP           = ' '  "跨客户端是否显示警告
*   RFC_DESTINATION_FOR_UPGRADE          = ' '
*   CLIENT_FOR_UPGRADE                   = ' '  "调整客户端
*   VARIANT_FOR_SELECTION                = ' '  "变式名SM30中创建的变式
*   COMPLEX_SELCONDS_USED                = ' '  "
*   CHECK_DDIC_MAINFLAG                  = ' '  "检查是否为可维护对象
   SUPPRESS_WA_POPUP                    = 'X'
* TABLES
*   DBA_SELLIST                          =     "筛选条件
*   EXCL_CUA_FUNCT                       =     "停用按钮
 EXCEPTIONS
   CLIENT_REFERENCE                     = 1
   FOREIGN_LOCK                         = 2
   INVALID_ACTION                       = 3
   NO_CLIENTINDEPENDENT_AUTH            = 4
   NO_DATABASE_FUNCTION                 = 5
   NO_EDITOR_FUNCTION                   = 6
   NO_SHOW_AUTH                         = 7
   NO_TVDIR_ENTRY                       = 8
   NO_UPD_AUTH                          = 9
   ONLY_SHOW_ALLOWED                    = 10
   SYSTEM_FAILURE                       = 11
   UNKNOWN_FIELD_IN_DBA_SELLIST         = 12
   VIEW_NOT_FOUND                       = 13
   MAINTENANCE_PROHIBITED               = 14
   OTHERS                               = 15
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DATA ts_fc LIKE vimexclfun.
DATA tt_fc TYPE TABLE OF vimexclfun.
DATA ts_sellist LIKE vimsellist.
DATA tt_sellist TYPE TABLE OF vimsellist.
ts_fc-function = 'AEND'.
APPEND ts_fc TO tt_fc. "S模式下的按钮
"U模式下的按钮
ts_fc-function = 'NEWL'.
APPEND ts_fc TO tt_fc.
ts_fc-function = 'ANZG'.
APPEND ts_fc TO tt_fc.
ts_sellist-viewfield = 'KUNNR'.
ts_sellist-operator = 'GE'.
ts_sellist-value = '1'.
ts_sellist-and_or = 'AND'.
ts_sellist-tabix = '2'."总条数
ts_sellist-invd_value = '0000000001'."'0000000001'.注意前导零的添加
ts_sellist-converted = 'X'.
APPEND ts_sellist TO tt_sellist.
ts_sellist-viewfield = 'KUNNR'.
ts_sellist-operator = 'LE'.
ts_sellist-value = '51'.

ts_sellist-and_or = ''.
ts_sellist-tabix = '2'."总条数
ts_sellist-invd_value = '0000000051'."'0000000051'.
ts_sellist-converted = 'X'.
APPEND ts_sellist TO tt_sellist.

CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
  EXPORTING
    action                       = 'U' "S 查看 U 修改 T 传输
*   CORR_NUMBER                  = '          '"更改后产生请求号
*   GENERATE_MAINT_TOOL_IF_MISSING       = ' '    "创建维护对话框
    show_selection_popup         = ''  "是否显示选择画面
    view_name                    = 'ZTB_FI154_1' "视图名
*   NO_WARNING_FOR_CLIENTINDEP   = ' '  "跨客户端是否显示警告
*   RFC_DESTINATION_FOR_UPGRADE  = ' '
*   CLIENT_FOR_UPGRADE           = ' '  "调整客户端
*   VARIANT_FOR_SELECTION        = ' '  "变式名SM30中创建的变式
*   COMPLEX_SELCONDS_USED        = ' '  "
*   CHECK_DDIC_MAINFLAG          = ' '  "检查是否为可维护对象
    suppress_wa_popup            = 'X'
  TABLES
    dba_sellist                  = tt_sellist[] "筛选条件
    excl_cua_funct               = tt_fc   "停用按钮
  EXCEPTIONS
    client_reference             = 1
    foreign_lock                 = 2
    invalid_action               = 3
    no_clientindependent_auth    = 4
    no_database_function         = 5
    no_editor_function           = 6
    no_show_auth                 = 7
    no_tvdir_entry               = 8
    no_upd_auth                  = 9
    only_show_allowed            = 10
    system_failure               = 11
    unknown_field_in_dba_sellist = 12
    view_not_found               = 13
    maintenance_prohibited       = 14
    OTHERS                       = 15.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

SM30传参函数VIEW_RANGETAB_TO_SELLIST

ABAP 在程序中CALL SM30视图维护,并根据选择屏幕仅维护选择屏幕内的数据

 CALL FUNCTION 'VIEW_MAINTENANCE_CALL'

"此函数可以跳转到SM30点击维护之后的页面,维护表内容。

"import参数:

ACTION:       S = Display U = Change T = Transport 
CORR_NUMBER  传送号(上面的action是t) 
SHOW_SELECTION_POPUP   是否弹出选择画面 
VIEW_NAME    视图名 
NO_WARNING_FOR_CLIENTINDEP  跨集团是否现实警告 
VARIANT_FOR_SELECTION   变式名 
CHECK_DDIC_MAINFLAG     察看是否为可维护对象

FORM frm_call_view.
  DATA ls_dba_sellist TYPE vimsellist.
  DATA lt_dba_sellist TYPE TABLE OF vimsellist.

  CLEAR lt_dba_sellist.

"单值入参
  CLEAR ls_dba_sellist.
  ls_dba_sellist-viewfield = 'GJAHR'.
  ls_dba_sellist-operator  = 'EQ'.
  ls_dba_sellist-value     = p_gjahr.
  APPEND ls_dba_sellist TO lt_dba_sellist.
"范围值入参

"当需要输入选择值范围时,则向表lt_dba_sellist中写入对应的条件。
  IF s_bukre[] IS NOT INITIAL.
    CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
      EXPORTING
        fieldname          = 'BUKRE'
        append_conjunction = 'AND'
      TABLES
        sellist            = lt_dba_sellist
        rangetab           = s_bukre.
  ENDIF.

  IF s_monat[] IS NOT INITIAL.
    CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
      EXPORTING
        fieldname          = 'MONAT'
        append_conjunction = 'AND'
      TABLES
        sellist            = lt_dba_sellist
        rangetab           = s_monat.
  ENDIF.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'U'
      view_name                    = 'ZTFI1185_02'
      check_ddic_mainflag          = 'X'
    TABLES
      dba_sellist                  = lt_dba_sellist
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP程序的BDC(Batch Data Communication)代码开发主要是为了处理大批量数据的输入或修改。下面是BDC代码开发的过程: 1. 定义BDC数据结构:首先需要定义一个数据结构,用于存储要导入或修改的数据。这个结构通常是一个内表,包含了程序需要处理的字段。 2. 读取数据源:接下来,从数据源读取数据。数据源可以是数据库表、Excel文件或其他外部系统。 3. 编写换逻辑:在BDC开发,通常需要进行数据换,将数据源的数据映射到ABAP程序的数据结构。这个过程,需要根据业务需求对数据进行一些处理,比如日期格式换、数值换等。 4. 创建BDC会话:接下来,需要创建一个BDC会话。BDC会话是ABAP程序与事务处理之间的桥梁,用于处理事务数据的导入或修改。 5. 输入或修改数据:通过BDC会话,将换后的数据导入到SAP系统。如果是数据导入,可以使用BDC方法CALL TRANSACTION来执行事务代码。如果是数据修改,可以使用BDC方法CALL TRANSACTION USING来执行事务代码。 6. 错误处理:在BDC开发,由于可能存在各种错误,如数据格式错误、字段缺失等,所以需要对错误进行处理。可以使用BDC方法SESSION_SET_BIG_INTERVAL来设置一个长时间间隔,然后检查和处理错误信息。 7. 提交和确认:在数据导入或修改完成后,需要使用BDC方法SESSION_CLOSE来提交事务,并通过BDC方法SESSION_PROCESSING提交数据更改。然后,可以检查和处理事务的结果。 8. 清除会话:在处理完BDC会话后,需要使用BDC方法SESSION_CLOSE来清除会话,以释放相关的资源。 以上是ABAP程序BDC代码开发的过程。通过合理的数据结构定义、数据源读取、换逻辑编写、BDC会话创建和数据处理,可以实现大批量数据的输入或修改。同时,错误处理和会话清除也是不可忽视的步骤,以确保数据的完整性和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值