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