2013年10月23日 星期三

ABAP/4 Import/Export internal table from program (Memory ID)

User 常會說我需要捉取 Program A 和 B 的資料合起來顯示,但如果要把 Program A 和 B 程式邏級寫成 Function Module 或模組化礦日廢時,此時則可以透過 Memory ID 進行資料的 Share



主要語法 : 

A) EXPORT [SOURCE INTERNAL TABLE] TO MEMORY ID '[UNIQUE_MEMORY_STRING]'.

B) IMPORT [SOURCE INTERNAL TABLE] TO [TARGET INTERNAL TABLE] FROM MEMORY ID '[UNIQUE_MEMORY_STRING]'.


下面程式提供一個範例,從 Program Z_EX_MEMORY_ID_RECEIVER 傳送參數給 Program Z_EX_MEMORY_ID_SENDER,再由 Program Z_EX_MEMORY_ID_SENDER 回傳捉到的資料給 Program Z_EX_MEMORY_ID_RECEIVER 並顯示


PROGRAM : Z_EX_MEMORY_ID_RECEIVER

REPORT Z_EX_MEMORY_ID_RECEIVER .

TABLES : BKPF.

DATA: L_TAB TYPE STANDARD TABLE OF BKPF WITH HEADER LINE.

SELECT-OPTIONS : S_BUKRS FOR BKPF-BUKRS,
                 S_GJAHR FOR BKPF-GJAHR,
                 S_BELNR FOR BKPF-BELNR.

SELECTION-SCREEN SKIP.

PARAMETERS : P_MAX TYPE I DEFAULT 5.

START-OF-SELECTION.

  SUBMIT Z_EX_MEMORY_ID_SENDER
    WITH S_BUKRS IN S_BUKRS
    WITH S_BELNR IN S_BELNR
    WITH S_GJAHR IN S_GJAHR
    WITH P_MAX   EQ P_MAX
     AND RETURN.

  "GL_TAB 不需要宣告,由 MEMORY_ID1 取得
  IMPORT GL_TAB TO L_TAB FROM MEMORY ID 'MEMORY_ID1'.
  FREE MEMORY ID 'MEMORY_ID1'.

  LOOP AT L_TAB.
    WRITE:/ L_TAB-GJAHR, L_TAB-BUKRS, L_TAB-BELNR.
  ENDLOOP.

END-OF-SELECTION.

上面程式的重點在於 SUBMIT Z_EX_MEMORY_ID_SENDER 並且記得加 AND RETURN. 後由 SUBMIT Z_EX_MEMORY_ID_SENDER 回傳捉到的資料,程式透過 IMPORT 的功能把 SUBMIT Z_EX_MEMORY_ID_SENDER 宣告的 GL_TAB 的資料傳到 Local 的 Internal Table L_TAB,之後再透過 FREE MEMORY ID 釋放掉空間,因為資料已經在 Local Internal Table L_TAB,所以可直接 LOOP 該 Internal Table 的資料


PROGRAM : Z_EX_MEMORY_ID_SENDER

REPORT  Z_EX_MEMORY_ID_SENDER.

TABLES : BKPF.

DATA: GL_TAB TYPE STANDARD TABLE OF BKPF WITH HEADER LINE.

SELECT-OPTIONS : S_BUKRS FOR BKPF-BUKRS,
                 S_GJAHR FOR BKPF-GJAHR,
                 S_BELNR FOR BKPF-BELNR.

SELECTION-SCREEN SKIP.

PARAMETERS : P_MAX TYPE I.

START-OF-SELECTION.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE GL_TAB
      UP TO P_MAX ROWS
    FROM BKPF
   WHERE BUKRS IN S_BUKRS
     AND GJAHR IN S_GJAHR
     AND BELNR IN S_BELNR.

  EXPORT GL_TAB TO MEMORY ID 'MEMORY_ID1'.

END-OF-SELECTION.

透過程式 Z_EX_MEMORY_ID_RECEIVER 呼叫 Z_EX_MEMORY_ID_SENDER 後,把取得的參數去捉取相關資料後,透過 EXPORT 的功能把 INTERNAL TABLE GL_TAB 傳入 MEMORY_ID1 中,供其他程式使用

要注意的事 Z_EX_MEMORY_ID_SENDER 要判斷如果不是其他程式呼叫的話,就不要跑 IMPORT 的功能

另外為了避勉 MEMORY ID 重覆,可以考慮使用 GUID_CREATE 產生 UNIQUE 的字串

CALL FUNCTION 'GUID_CREATE'
* IMPORTING
*   EV_GUID_16       =
*   EV_GUID_22       =
*   EV_GUID_32       =
          .

沒有留言:

張貼留言

How to install & specified python version or distreibtuion package version in google colab

在買了 RTX 3080 要來 挖礦...  嗯~是跑機器學習後,結果發現了 GOOGLE COLAB,其實之前在「GAN 對抗式生成網路」一書就有看到,但資訊人就是什麼都想自己安裝,在本機用 Anaconda + pyCharm 弄了 GPU 環境,結果有天從新竹回家發現家裡沒...