当前位置:编程学习 > 网站相关 >>

SAP ABAP子程序SUBMIT调用的方法

编写两个程序 ZTEST06 和 ZTEST07 , 在ZTEST06 里调用ZTEST07 程序。

ZTEST06 作用是收集并整理数据,并存放到内存

ZTEST07 从内存取到数据,并列印出来

ZTEST06程序代码如下:

*&---------------------------------------------------------------------*
*& Report  ZTEST06
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST06.

*----------------------------------------------------------------------*
*  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'.

*** 以下两种情况是调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行
SUBMIT  ZTEST07 AND  RETURN .

***  调用事物代码(和SUBMIT <PROGRAM> AND RETURN的效果一样) 将程序 ZTEST07 设一个 事务码 ZGET_DATA
* CALL TRANSACTION 'ZGET_DATA'.

 

ZTEST07程序代码如下:

 

*&---------------------------------------------------------------------*
*& Report  ZTEST07
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

report  ztest07.

*----------------------------------------------------------------------*
*  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.

 

当然上面的功能完全可以放在一个程序里又简单又简洁,

只是举这么个简单例子说明 SUBMIT 是怎么用的。至于什么样的情况要这样使用,那么就是具体问题具体解决了。

 

 

 

 

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,