https://www.cnblogs.com/jiangzhengjun/p/4292545.html
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的值
- 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博客
- 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.
-
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事务码
- 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.


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."退出整个程序,并删除所在内部会话、包括加载的程序、实例、数据。
新建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.


新建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.
新建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.
新建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.
有空看看这个