編寫兩個程序 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 是怎麼用的。至於什麼樣的情況要這樣使用,那麼就是具體問題具體解決了。
作者: SAP道長