SAP ABAP子程序SUBMIT調用的方法

編寫兩個程序 ZTEST06ZTEST07 , 在ZTEST06 裏調用ZTEST07 程序。

ZTEST06 作用是收集並整理數據,並存放到內存

ZTEST07 從內存取到數據,並列印出來

ZTEST06程序代碼如下:

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

REPORT  ZTEST06.

*----------------------------------------------------------------------*
*  define internal tables
*  定義內表
*
*----------------------------------------------------------------------*
DATA BEGIN  OF  W_DATA,
  FID1 TYPE  STRING,
  NUM1 TYPE  ,
  NUM2 TYPE  ,
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  .
    T_OUT-FID1 'A' .
    T_OUT-NUM1 SY-INDEX .
    T_OUT-NUM2 SY-INDEX  .
  ELSEIF  SY-INDEX  .
    T_OUT-FID1 'B' .
    T_OUT-NUM1 SY-INDEX  .
    T_OUT-NUM2 SY-INDEX  .
  ELSE .
    T_OUT-FID1 'C' .
    T_OUT-NUM1 SY-INDEX .
    T_OUT-NUM2 SY-INDEX  .
  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  ,
  num2 type  ,
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-fid1t_out-num1t_out-num2.
endloop .
write sy-uline .

*** 退出程序
* leave program.

 

當然上面的功能完全可以放在一個程序裏又簡單又簡潔,

只是舉這麼個簡單例子說明 SUBMIT 是怎麼用的。至於什麼樣的情況要這樣使用,那麼就是具體問題具體解決了。


作者: SAP道長

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章