abap submit用法(一)调用外部程序(abap内存获取数据)
2010-04-22 15:42
459 查看
在sap中一个程序如何调用外部程序,主要有以下有两种方式:(调用的原理与过程
)
一、call transaction <tcode>
二、submit <program> and return
下面主要写一下如何通过submit在一个程序调用外部程序的,这里面涉及到两个程序,其中一个是调用程序,主要处理数据,整合数据供被调用数据获取并打印;另一个是被调用程序,从调用程序存储在ABAP内存的数据取到并打印输出。
1、调用程序
*&---------------------------------------------------------------------*
*& Report ZTEST_CALL_PROG
*&
*&---------------------------------------------------------------------*
*& Create by : 冯飞剑
*& Create date : 2010-1-2
*& Descriptions : 测试调用外部程序(调用程序)
*&---------------------------------------------------------------------*
REPORT
ZTEST_CALL_PROG.
*----------------------------------------------------------------------*
* define internal tables
* 定义内表
*
*----------------------------------------------------------------------*
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
.
*----------------------------------------------------------------------*
* assign value to internal tables
* 给内表赋值
*
*----------------------------------------------------------------------*
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
.
*-----------------------------------------------------------------------*
* call extenral program
* 调用外部程序
*
*-----------------------------------------------------------------------*
*** 使用ABAP内存进行数据传递
EXPORT
T_OUT TO
MEMORY
ID
'T_OUT'
.
*** 以下两种情况是调用程序被结束,被调用程序开始执行
* SUBMIT ZWRITE_DATA.
*** 如果使用这种情况程序之间的数据访问就不能ABAP内存访问了
* LEAVE TO TRANSACTION 'ZGET_DATA'.
*** 以下两种情况是调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行
* 插入一个新的INTERNAL SESSION,被调用程序运行完删除SESSION,继续执行调用程序
SUBMIT
Zwrite_data AND
RETURN
.
*** 调用事物代码(和SUBMIT <PROGRAM> AND RETURN的效果一样)
* CALL TRANSACTION 'ZGET_DATA'.
2、被调用程序
*&---------------------------------------------------------------------*
*& Report ZWRITE_DATA
*&
*&---------------------------------------------------------------------*
*& Create by : 冯飞剑
*& Create date: 2010-1-2
*& Descriptions: 测试调用外部程序(被调用程序)
*&---------------------------------------------------------------------*
REPORT
ZWRITE_DATA.
*----------------------------------------------------------------------*
* define internal tables
* 定义内表
*
*----------------------------------------------------------------------*
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
.
*----------------------------------------------------------------------*
* get data from sap memory and write out
* 从SAP内存读取数据然后打印输出
*
*----------------------------------------------------------------------*
import
t_out from
memory
id
'T_OUT'
.
FREE
MEMORY
ID
'T_OUT'
.
write
: sy-uline
.
WRITE
: '从调用程序取到的数据如下:'
.
LOOP
AT
T_OUT.
write
: / ' '
,t_out-fid1, t_out-num1, t_out-num2.
ENDLOOP
.
write
: sy-uline
.
*** 退出程序
* leave program.
)
一、call transaction <tcode>
二、submit <program> and return
下面主要写一下如何通过submit在一个程序调用外部程序的,这里面涉及到两个程序,其中一个是调用程序,主要处理数据,整合数据供被调用数据获取并打印;另一个是被调用程序,从调用程序存储在ABAP内存的数据取到并打印输出。
1、调用程序
*&---------------------------------------------------------------------*
*& Report ZTEST_CALL_PROG
*&
*&---------------------------------------------------------------------*
*& Create by : 冯飞剑
*& Create date : 2010-1-2
*& Descriptions : 测试调用外部程序(调用程序)
*&---------------------------------------------------------------------*
REPORT
ZTEST_CALL_PROG.
*----------------------------------------------------------------------*
* define internal tables
* 定义内表
*
*----------------------------------------------------------------------*
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
.
*----------------------------------------------------------------------*
* assign value to internal tables
* 给内表赋值
*
*----------------------------------------------------------------------*
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
.
*-----------------------------------------------------------------------*
* call extenral program
* 调用外部程序
*
*-----------------------------------------------------------------------*
*** 使用ABAP内存进行数据传递
EXPORT
T_OUT TO
MEMORY
ID
'T_OUT'
.
*** 以下两种情况是调用程序被结束,被调用程序开始执行
* SUBMIT ZWRITE_DATA.
*** 如果使用这种情况程序之间的数据访问就不能ABAP内存访问了
* LEAVE TO TRANSACTION 'ZGET_DATA'.
*** 以下两种情况是调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行
* 插入一个新的INTERNAL SESSION,被调用程序运行完删除SESSION,继续执行调用程序
SUBMIT
Zwrite_data AND
RETURN
.
*** 调用事物代码(和SUBMIT <PROGRAM> AND RETURN的效果一样)
* CALL TRANSACTION 'ZGET_DATA'.
2、被调用程序
*&---------------------------------------------------------------------*
*& Report ZWRITE_DATA
*&
*&---------------------------------------------------------------------*
*& Create by : 冯飞剑
*& Create date: 2010-1-2
*& Descriptions: 测试调用外部程序(被调用程序)
*&---------------------------------------------------------------------*
REPORT
ZWRITE_DATA.
*----------------------------------------------------------------------*
* define internal tables
* 定义内表
*
*----------------------------------------------------------------------*
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
.
*----------------------------------------------------------------------*
* get data from sap memory and write out
* 从SAP内存读取数据然后打印输出
*
*----------------------------------------------------------------------*
import
t_out from
memory
id
'T_OUT'
.
FREE
MEMORY
ID
'T_OUT'
.
write
: sy-uline
.
WRITE
: '从调用程序取到的数据如下:'
.
LOOP
AT
T_OUT.
write
: / ' '
,t_out-fid1, t_out-num1, t_out-num2.
ENDLOOP
.
write
: sy-uline
.
*** 退出程序
* leave program.
相关文章推荐
- abap submit用法(一)调用外部程序(abap内存获取数据) 收藏
- webservice实际应用之调用外部系统提供的服务端地址,写java的webservice客户端程序并通过接口给外部系统传数据
- ABAP中对其他程序的调用(SUBMIT)
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- dsp控制DM9000实现802.3数据收发第三篇,调试过程程序第三版;采用外部引脚中断方式获取中断,优化掉帧现象
- Qt调用外部程序,启动并从中获取信息——QProcess
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
- delphi获取其他外部程序中TDBGridEh控件中的数据
- C# 调用外部程序,并获取输出和错误信息
- 关于在bcb中调用外部程序的用法
- ABAP之程序相互调用--SUBMIT
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- SAP中程序间的相互调用,SUBMIT关键字的用法
- Android调用asp.net编写的*.ashx(一般处理程序)获取数据
- ABAP程序调用之SUBMIT
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- VC中调用并获取外部程序输出
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- Android 跨程序调用,返回数据获取不到的问题
- ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION