ABAP 程序/接口調用其他程序的數據


在ABAP遇到的業務場景中,可能會遇到一種情況,需要調用其他報表的數據來發送或者二次加工,這個時候又不想對源程序做大的改動、有以下幾種思路解決。

1.修改源程序,將需要展示的數據存儲到DB中,然后主程序再從DB中讀取;(增加存儲開銷)

2.Submit配合EXPORT/IMPORT :將數據臨時存放到內存中,然后主程序再從內存中讀取,及時Free Memory ID;(增加內存開銷)

3.修改主程序和源程序的邏輯,增加耦合;(后期運維困難)

4.Copy出源程序的代碼邏輯后,將源程序大卸八塊,只要邏輯不變,隨便怎么改就要能跑起來就行;(推薦這一種)

下面推薦第二種方法:

源程序【被調用程序】:

 1 *&---------------------------------------------------------------------*
 2 *& Report  ZCHENH072
 3 *&
 4 *&---------------------------------------------------------------------*
 5 *&
 6 *&
 7 *&---------------------------------------------------------------------*
 8 
 9 REPORT zchenh072.
10 PARAMETERS:p_call TYPE c NO-DISPLAY. " 被調用的標志
11 
12 IF p_call IS INITIAL.
13   WRITE:/,'未被其他程序調用'.
14 ELSE.
15 *  WRITE:/,'被其他程序調用開始'.
16 
17   DATA:lv_key TYPE i,
18        lv_value TYPE string,
19        BEGIN OF lt_tab OCCURS 0,
20          key TYPE i,
21          value TYPE string,
22          END OF lt_tab.
23   DO 3 TIMES.
24     lv_key = sy-index.
25     lv_value = '測試值'.
26     lt_tab-key = lv_key.
27     lt_tab-value = lv_value.
28     APPEND lt_tab.
29   ENDDO.
30   EXPORT lt_tab TO MEMORY ID 'EXPORTID'.
31 *  WRITE:/,'被其他程序調用結束'.
32 ENDIF.

 

接口【主程序】:

 1 *&---------------------------------------------------------------------*
 2 *& Report  ZCHENH072_1
 3 *&
 4 *&---------------------------------------------------------------------*
 5 *&
 6 *&
 7 *&---------------------------------------------------------------------*
 8 
 9 REPORT zchenh072_1.
10 DATA:BEGIN OF lt_tab OCCURS 0,
11         key TYPE i,
12         value TYPE string,
13       END OF lt_tab.
14 
15 
16 SUBMIT zchenh072 WITH p_call = 'X'
17                   AND RETURN.
18 IMPORT lt_tab FROM MEMORY ID  'EXPORTID'.
19 FREE MEMORY ID 'EXPORTID'.
20 BREAK-POINT.


此處注釋掉Write的原因,請自行嘗試后體會.

使用時注意以下幾點:

1.export與import兩邊的內表(包含內表名稱),字段結構(包括長度/內型/小數位數/字段的多少)保持完全一致,建議Copy源程序中的內表到主程序【接口】中,或SE11定義全局結構和內表。

2.Submit后要and return,將數據返回到主程序中。

3.該方法缺點:當后期源程序邏輯變動或者內表結構發生改變,風險極大,不輕易推薦使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM