CALL TRANSACTION 'tcode' USING bdc_tab ... 是 ABAP 里提供的一个方便的执行批量输入的语句,使用它可以通过程序代码完成多个事务码的连续执行。
bdc_tab 这个批输入任务表的填写方式,网上有很多例子了,大家用到的时候可以搜索。用事务码 SHDB 可以生成填写这个表的内容,按照 ABAP 字典结构类型 BDCDATA 的定义对应填写就可以了。
下面详细介绍一下这种调用方式中的执行参数:
... { {[MODE mode] [UPDATE upd]} | [OPTIONS FROM opt] } [MESSAGES INTO itab] ... .
MODE 确定批输入的执行模式,有下面几个可选值:
UPDATE 确定批输入的更新模式,有下面几个可选值:
代码语言:javascript复制1.使用屏幕传入
REFRESH BDCDATA.
CLEAR BDCDATA.
BDCDATA-PROGRAM = 'SAPLCSDI'. "Programm St點kliste
BDCDATA-DYNPRO = '0100'. "Dynpro
BDCDATA-DYNBEGIN = 'X'. "Sofort starten
APPEND BDCDATA.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' "HW 81070
EXPORTING
INPUT = H_MATNR
IMPORTING
OUTPUT = H_MATNR
EXCEPTIONS
OTHERS = 0.
CLEAR BDCDATA.
BDCDATA-FNAM = 'RC29N-MATNR'. "Material
BDCDATA-FVAL = H_MATNR.
APPEND BDCDATA.
CLEAR BDCDATA.
BDCDATA-FNAM = 'RC29N-WERKS'. "Werks
BDCDATA-FVAL = H_WERKS.
APPEND BDCDATA.
CLEAR BDCDATA.
BDCDATA-FNAM = 'RC29N-STLAN'. "Verwendung
BDCDATA-FVAL = H_STLAN.
APPEND BDCDATA.
CLEAR BDCDATA.
BDCDATA-PROGRAM = 'SAPLCSDI'. "Programm St點kliste
BDCDATA-DYNPRO = '0150'. "Dynpro
BDCDATA-DYNBEGIN = 'X'. "Sofort starten
APPEND BDCDATA.
CLEAR BDCDATA.
BDCDATA-FNAM = 'BDC_OKCODE'.
BDCDATA-FVAL = '/BDA'.
APPEND BDCDATA.
CALL TRANSACTION 'CS03' USING BDCDATA MODE 'E'.
2.使用parameter
SET PARAMETER ID 'MAT' FIELD P_MATNR."ID为按FI可以查到
SET PARAMETER ID 'WRK' FIELD P_WERKS.
SET PARAMETER ID 'CSV' FIELD P_STLAN.
CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.
3.使用memory
data:
wfbomcom type rc29n.
move-corresponding bom_key to wfbomcom. "#EC ENHOK "note0526541
wfbomcom-aennr = display_aennr.
wfbomcom-datuv = display_datuv.
wfbomcom-datub = display_datub.
export wfbomcom to memory id 'WFBOMCOM'.
* display bom
call transaction 'CS03' and skip first screen.
程序调用语句:
在程序中使用 submit关键字 调用 下一个程序
1) Submit prog_name_2 (restart)
2) Submit prog_name_2 and return (insertion)
3) Submit prog_name_2 via selection-screen and return (insertion)
via selection-screen作用: 如果程序2中有选择屏幕,则程序2被调用时 会弹出屏幕
Restart
Leave to transaction <T-code>: 功能相当于 输入”/n<T-code>”,当程序执行该语句时,该程序就会在内存被清空,接着转到相应的TCODE程序中去
insertion
call transaction <T_CODE> [and skip first screen 忽略被调用程序的第一个屏幕]
执行下一个程序, 当前程序会被压到栈的下一个位置而不会被清空
重点: and skip first screen 忽略被调用程序的第一个屏幕 ,但是 PBO 和 PAI 的Module还会被执行.