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有以下的可选值.
update有以下可选值:
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'.
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 调试器,这种方式主要用于调试过程。 |
更新模式 | 作用 |
"A" | 异步更新。被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。 |
"S" | 同步更新。被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。 |
"L" | 本地更新。被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。 |
调用程式:
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'.
相关文章推荐
- 1、核心文件目录修改 (finecms --ci 框架的cms 修改)
- 为arm平台构建linux内核树
- 多线程之join方法 (转)
- LeetCode "Palindrome Linked List"
- oauth2.0在监控宝项目中的应用一例
- 跳过设置向导方法
- Apache实现负载均衡
- 13家中国域名商(国际域名)解析量报告(7月7日)
- PHP框架
- [leetcode][list] Palindrome Linked List
- Java基础之理解Annotation
- 2014上海全国邀请赛(hdu 5090 - 5099)dp+线段树+拓扑排序+bfs(状态压缩)
- 常用汉字
- JDBC基本操作介绍
- 移动支付官方文档列表
- 有return的情况下try catch finally的执行顺序(转)
- Java C# .net 和 C C++ 跨平台的区别
- 将应用图标添加到ubuntu dash中
- 基于jquery鼠标点击图片翻开切换效果
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解