• abap中程序跳转(全)


    1.常用

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

    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].

    代码使用

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

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

    BDC传参

    1. DATA bdcdata_tab TYPE TABLE OF bdcdata.
    2. DATA opt TYPE ctu_params.
    3. bdcdata_tab = VALUE #(
    4. ( program = 'SAPLSEOD' dynpro = '1000' dynbegin = 'X' )
    5. ( fnam = 'BDC_CURSOR' fval = 'SEOCLASS-CLSNAME' )
    6. ( fnam = 'SEOCLASS-CLSNAME' fval = class_name )
    7. ( fnam = 'BDC_OKCODE' fval = '=WB_DISPLAY' ) ).
    8. opt-dismode = 'E'.
    9. opt-defsize = 'X'.
    10. TRY.
    11. CALL TRANSACTION 'SE24' WITH AUTHORITY-CHECK
    12. USING bdcdata_tab OPTIONS FROM opt.
    13. CATCH cx_sy_authorization_error ##NO_HANDLER.
    14. ENDTRY.

    WITH AUTHORITY-CHECK.

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

    其中的多值传递范例

    DATA STR TYPE C LENGTH 25.

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

    1.方法1

    1. REPORT ZTXYY_1141.
    2. TABLES:VBRK.
    3. DATA STR TYPE C LENGTH 25.
    4. SELECT-OPTIONS s_matnr FOR VBRK-VKORG ."MEMORY ID ZDEMO.
    5. FREE MEMORY ID 'ZDEMO'."清除MEMORY ID
    6. EXPORT s_matnr FROM s_matnr TO MEMORY ID 'ZDEMO'."传入MEMORY ID
    7. *SET PARAMETER ID 'VKO' FIELD STR."实现单值输入
    8. CALL TRANSACTION 'ZTXYY_1142' ."AND SKIP FIRST SCREEN.

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

    1. REPORT ztxyy_1142.
    2. TABLES:vbrk.
    3. DATA str1 TYPE c LENGTH 25.
    4. SELECT-OPTIONS s_matnr FOR vbrk-vkorg.
    5. SELECT-OPTIONS s_matnr2 FOR vbrk-vkorg.
    6. INITIALIZATION.
    7. * GET PARAMETER ID 'VKO' FIELD str1."获取SET ID的值
    8. IMPORT s_matnr TO s_matnr FROM MEMORY ID 'ZDEMO'."读取MEMORY ID
    9. FREE MEMORY ID 'ZDEMO'."清除MEMORY ID

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

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

    1. DATA: lt_bdcdata_tab TYPE TABLE OF bdcdata,
    2. ls_opt TYPE ctu_params.
    3. lt_bdcdata_tab = VALUE #(
    4. ( program = 'ZPSR018_CONFIRM' dynpro = '1000' dynbegin = 'X' )
    5. ( fnam = 'BDC_CURSOR' fval = 'S_PSPID-LOW' ) "其中fval为值 fnam为参数ID
    6. ( fnam = 'S_VERNR-LOW' fval = lv_vernr_low ) "这里实现了多值输入
    7. ( fnam = 'S_VERNR-HIGH' fval = lv_vernr_high ) ).
    8. ls_opt = VALUE #( dismode = 'E'
    9. defsize = 'X' ).
    10. TRY.
    11. CALL TRANSACTION 'ZPSR018A' WITH AUTHORITY-CHECK
    12. USING lt_bdcdata_tab OPTIONS FROM ls_opt.
    13. CATCH cx_sy_authorization_error ##NO_HANDLER.
    14. ENDTRY.

    2.SUBMIT

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

    ... USING SELECTION-SCREEN dynnr

      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事务码

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

     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.

    1. REPORT ZTXYY_1143.
    2. PARAMETERS p_chr1 TYPE c LENGTH 100 OBLIGATORY.
    3. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_chr1.
    4. PERFORM p_set_selection.
    5. START-OF-SELECTION.
    6. SUBMIT (p_chr1) VIA SELECTION-SCREEN AND RETURN.
    7. end-of-SELECTION.
    8. FORM p_set_selection .
    9. TYPES :BEGIN OF ty,
    10. col1 TYPE ztable,
    11. col2 TYPE ZPROGRAM,"必须是定义好了的se11数据
    12. END OF ty.
    13. DATA itab TYPE TABLE OF ty.
    14. itab = VALUE #(
    15. ( col1 = 'ZGD0001' col2 = 'AQZZZA_XYY01====ZA_XYYF01=====')"
    16. ( col1 = '2' col2 = 'ISSUE' )
    17. ( col1 = '3' col2 = 'SENT')
    18. ( col1 = '4' col2 = 'CONFIRMED')
    19. ).
    20. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    21. EXPORTING
    22. * DDIC_STRUCTURE = ' '
    23. retfield = 'COL2'
    24. * PVALKEY = ' '
    25. dynpprog = sy-repid
    26. dynpnr = sy-dynnr
    27. dynprofield = 'P_CHR1'
    28. * STEPL = 0
    29. window_title = 'WINDOW--TITLE'
    30. * VALUE = ''
    31. value_org = 'S' "C表示cell,S表示structure
    32. * MULTIPLE_CHOICE = 'X'"多项选择,用于SELECT-OPTIONS
    33. * DISPLAY = 'F'"C则只能显示,不能选择
    34. callback_program = sy-repid
    35. * CALLBACK_FORM = ' '
    36. * MARK_TAB =
    37. * IMPORTING
    38. * USER_RESET =
    39. TABLES
    40. value_tab = itab
    41. * FIELD_TAB = FIELD_TAB
    42. * RETURN_TAB =
    43. * DYNPFLD_MAPPING =
    44. EXCEPTIONS
    45. parameter_error = 1
    46. no_values_found = 2
    47. OTHERS = 3.
    48. IF sy-subrc <> 0.
    49. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    50. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    51. ENDIF.
    52. ENDFORM.

    submit调用程序时传参

    1. 调用程序传输屏幕参数时可以有两种方法:
    2. 1
    3.   SUBMIT zmmt004 USING SELECTION-SCREEN '1000'
    4.               WITH p_on EQ p_on EXPORTING LIST TO MEMORY
    5.               WITH s_bukrs IN s_bukrs
    6.               AND RETURN.
    7. 2.
    8. data:rspar_tab TYPE TABLE OF rsparams,
    9. rspar_stu TYPE rsparams.
    10. rspar_stu-selname = 'SO_BUKRS'."Company code 调用程序中的屏幕变量名
    11. rspar_stu-kind = 'S'."表示是多选框
    12. rspar_stu-sign = 'I'.
    13. rspar_stu-option = 'EQ'.
    14. rspar_stu-low = p_comp."p_comp是一个变量
    15. APPEND rspar_tab TO rspar_stu.
    16. CLEAR rspar_stu.
    17. rspar_stu-selname = 'PA_XKONS'."Company code 调用程序中的屏幕变量名
    18. rspar_stu-sign = 'I'.
    19. rspar_stu-option = 'EQ'.
    20. rspar_stu-low = ''."没有kind值表示为单选框或按钮或单输入框
    21. APPEND rspar_tab TO rspar_stu.
    22. CLEAR rspar_stu.
    23.     SUBMIT zRM06INP0  WITH SELECTION-TABLE rspar_tab  EXPORTING LIST TO MEMORY
    24.                    AND RETURN.
    25. 其中rspar_tab是参考结构 rsparams定义的

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

    1. FORM frm_bajob_data .
    2. DATA: lv_jobname TYPE tbtcjob-jobname,
    3. lv_jobcount TYPE tbtcjob-jobcount.
    4. CONCATENATE 'ZLXF003_' sy-datum sy-uzeit INTO lv_jobname.
    5. **********************************************************************
    6. * 启动后台作业
    7. CALL FUNCTION 'JOB_OPEN'
    8. EXPORTING
    9. jobname = lv_jobname
    10. sdlstrtdt = sy-datum
    11. sdlstrttm = sy-uzeit
    12. IMPORTING
    13. jobcount = lv_jobcount
    14. EXCEPTIONS
    15. cant_create_job = 1
    16. invalid_job_data = 2
    17. jobname_missing = 3
    18. OTHERS = 4.
    19. IF sy-subrc <> 0.
    20. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    21. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    22. RETURN.
    23. ENDIF.
    24. **********************************************************************
    25. * submit 程序
    26. SUBMIT zlxf003 AND RETURN
    27. WITH p_date = p_date
    28. WITH s_bukrs IN s_bukrs
    29. WITH s_hkont IN s_hkont
    30. WITH p_rd1 = p_rd1
    31. WITH p_rd2 = p_rd2
    32. WITH p_rd3 = p_rd3
    33. USER sy-uname
    34. VIA JOB lv_jobname
    35. NUMBER lv_jobcount.
    36. **********************************************************************
    37. * 关闭后台
    38. "参数cant_start_immediate设置后天作业启动优先级,如果不设置的话,可能导致作业挂起,不能实时执行
    39. CALL FUNCTION 'JOB_CLOSE'
    40. EXPORTING
    41. jobcount = lv_jobcount
    42. jobname = lv_jobname
    43. laststrtdt = sy-datum
    44. laststrttm = sy-uzeit
    45. strtimmed = 'X'
    46. EXCEPTIONS
    47. cant_start_immediate = 1
    48. invalid_startdate = 2
    49. jobname_missing = 3
    50. job_close_failed = 4
    51. job_nosteps = 5
    52. job_notex = 6
    53. lock_failed = 7
    54. invalid_target = 8
    55. invalid_time_zone = 9
    56. OTHERS = 10.
    57. IF sy-subrc <> 0.
    58. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    59. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    60. RETURN.
    61. ENDIF.
    62. 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表示根据输入的参数直接跳转到相关操作页面

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

    2.函数实现跳转

    1.TH_CREATE_MODE

    新建session会话的函数

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

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

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

    2.TH_CREATE_FOREIGN_MODE

    新建session会话的函数

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

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

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

    3.CC_CALL_TRANSACTION_NEW_TASK

    新建session会话的函数

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

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

    1. WRITE 'This is the main ABAP program'.
    2. DATA :
    3. LV_SKIP(1) TYPE C VALUE 'X',
    4. LV_VBELN LIKE VBAK-VBELN VALUE '20000190',
    5. L_ST_PARAM TYPE TPARA,
    6. L_IT_PARAMS TYPE TABLE OF TPARA.
    7. CLEAR L_ST_PARAM.
    8. CLEAR L_IT_PARAMS[].
    9. L_ST_PARAM-PARAMID = 'AUN'.
    10. L_ST_PARAM-PARTEXT = LV_VBELN.
    11. APPEND L_ST_PARAM TO L_IT_PARAMS.
    12. CALL FUNCTION 'CC_CALL_TRANSACTION_NEW_TASK'
    13. " STARTING NEW TASK 'VA03'"表异步
    14. " DESTINATION 'NONE'"
    15. EXPORTING
    16. TRANSACTION = 'VA03'
    17. SKIP_FIRST_SCREEN = 'X'
    18. TABLES
    19. PARAMTAB = L_IT_PARAMS"传屏幕参数的表
    20. EXCEPTIONS
    21. COMMUNICATION_FAILURE = 97
    22. SYSTEM_FAILURE = 98
    23. OTHERS = 99.
    24. IF SY-SUBRC = 0.
    25. " Success
    26. ELSEIF SY-SUBRC = 97.
    27. " Communication Failure
    28. EXIT.
    29. ELSEIF SY-SUBRC = 98.
    30. " System Failure
    31. EXIT.
    32. ELSE.
    33. EXIT.
    34. ENDIF.

    这里原函数

    1. CALL FUNCTION 'CC_CALL_TRANSACTION_NEW_TASK'
    2. EXPORTING
    3. transaction =
    4. skip_first_screen =
    5. * TABLES
    6. * PARAMTAB =
    7. * EXCEPTIONS
    8. * ERROR = 1
    9. * OTHERS = 2
    10. .
    11. IF sy-subrc <> 0.
    12. * Implement suitable error handling here
    13. ENDIF.

    4.ABAP4_CALL_TRANSACTION

    新建session会话的函数

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

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

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

    原函数代码

    1. CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
    2. EXPORTING
    3. tcode =
    4. * SKIP_SCREEN = ' '
    5. * MODE_VAL = 'A' "A:前台,显示屏幕 E:遇到错误停止并显示 N:后台模式
    6. * UPDATE_VAL = 'A'"A:异步 S:同步 L:本地模式
    7. * IMPORTING
    8. * SUBRC =
    9. * TABLES
    10. * USING_TAB =
    11. * SPAGPA_TAB =
    12. * MESS_TAB =
    13. * EXCEPTIONS
    14. * CALL_TRANSACTION_DENIED = 1
    15. * TCODE_INVALID = 2
    16. * OTHERS = 3
    17. .
    18. IF sy-subrc <> 0.
    19. * Implement suitable error handling here
    20. ENDIF.

    有空看看这个

    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

  • 相关阅读:
    MySQL 支持索引类型和DDL语句
    【springboot笔记】程序可用性检测ApplicationAvailability
    项目集锦 | 易基因近期m6A甲基化(MeRIP-seq)研究成果
    基于Matlab计算经典CFAR阈值
    k8s中如何使用gpu、gpu资源讲解、nvidia gpu驱动安装
    SpringBoot日志文件
    Web学习笔记-中期项目(拳皇)
    MySQL备份与恢复
    VoVNet论文解读
    如何get一个终身免费续期的定制数字人?
  • 原文地址:https://blog.csdn.net/qq_53645728/article/details/133903441