您的位置:首页 > 其它

SAP 调用外部程序的方法

2015-07-10 10:13 459 查看
在 SAP 中一个程序调用外部程序有两种方式:

1. Call transaction <tcode>

常见于 BDC 程式中.

CALL TRANSACTION tcode

USING bdcdata

MODE p_mode

UPDATE c_update

MESSAGES INTO messtab.

mode有以下的可选值.

执行模式  
作用
"A"
显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。
"E"
只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。
"N"
不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为1001,sy-msgty 为 "S"、sy-msgid 为 "00"、sy-msgno 为 "344"、sy-msgv1 为 "SAPMSSY3"、sy-msgv2 为 "0131"。
"P"
不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。
update有以下可选值:

更新模式
作用
"A"
异步更新。被调用程序的更新按照没有指定 COMMIT
WORK 语句和 AND
WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。
"S"
同步更新。被调用程序的更新按照指定了 COMMIT
WORK 语句和 AND
WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。
"L"
本地更新。被调用程序的更新按照执行 SET
UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
2. Submit <program> and return

调用程式:

REPORT ZTEST_CALL_PROG.
DATA: BEGIN OF w_data,
fid1 TYPE string,
num1 type i,
num2 type i,
END OF w_data.
DATA: T_OUT LIKE W_DATA OCCURS 0 WITH HEADER LINE.
Do 10 TIMES.
if sy-index < 4.
t_out-fid1 = 'A'.
t_out-num1 = sy-index.
t_out-num2 = sy-index + 1.
elseif sy-index < 7.
t_out-fid1 = 'B'.
t_out-num1 = sy-index + 1.
t_out-num2 = sy-index + 2.
else.
t_out-fid1 = 'C'.
t_out-num1 = sy-index.
t_out-num2 = sy-index - 1.
ENDIF.
append t_out.
ENDDO.
export t_out to MEMORY id 'T_OUT'. "内表t_out的内存id为'T_OUT',被调用程式从这里取得数据.
SUBMIT zwrite_date and RETURN. "这里也可以用 submit zwrite_data with WITH s_aufnr = p_aufnr
"WITH s_mode = 'N
给被调用程序传值.
write: / 'justin'.

被调用程式,从调用程序存储在ABAP内存中取得要处理的数据.
REPORT ZWRITE_DATE.
data: BEGIN OF w_data,
fid1 type string,
num1 type i,
num2 type i,
END OF w_data.
data: t_out LIKE w_data OCCURS 0 WITH HEADER LINE.
import t_out from MEMORY id 'T_OUT'.
FREE MEMORY ID 'T_OUT'. "清除MEMORY ID 为'T_OUT'的内容.
loop at t_out.
write: / ' ', t_out-fid1, t_out-num1, t_out-num2.
ENDLOOP.
write: sy-uline.

Other example:
EXPORT rm16_lgort FROM l_lgort
rm16_werks FROM p_plwrk

rm16_matnr FROM p_matnr TO MEMORY ID 'ZPHRRM13'.

SUBMIT zphrrm13 AND RETURN.

IMPORT mdezx mdpsx mdkp mdsta mdstal FROM MEMORY ID 'ZPHRRM13'.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: