您的位置:首页 > 其它

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