首頁>技術>

ABAP Memory/SAP Memory/Shared Buffer/Database

ABAP 提供了IMPORT/EXPORT 和 SET / GET PARAMETER 語句,可對使用者記憶體/伺服器記憶體/資料庫進行儲存和訪問。不過可能很多人對此還不是很瞭解,下面我們透過例項來測試它們的區別和聯絡。

ABAP Memory使用者登陸後,最多一個系統可以開6個視窗,這在SAP中稱為External Mode。而同一個視窗中,執行某程式後,可以透過CALL TRANSACTION/SUBMIT或其他程式碼跳轉到其他程式,這個稱為Internal Mode。Internal Mode的呼叫棧最多為9層。那麼 ABAP Memory,它是屬於Internal Mode間可以共享的資料,而External Mode間無法共享。

例子. 建立程式A,輸入:DATA matnr TYPE matnr.IMPORT matnr FROM MEMORY ID ‘YTEST_MATNR’.WRITE matnr.建立程式B,輸入:DATA matnr TYPE matnr.matnr = ‘000000000000001234’.EXPORT matnr TO MEMORY ID ‘YTEST_MATNR’.SUBMIT y_program_a. “呼叫程式A直接執行B,發現程式A從 ABAP Memory讀到了值並輸出到LIST.

說明:(1)除錯執行B到EXPORT語句後面,Goto-System Area- ABAP Memory,可以檢視到名為YTEST_MATNR的一片記憶體。(2)如果B和A執行在不同的視窗,則A將訪問不到資料;當用戶輸入/N退出當前程式時,記憶體值也將被清空。(3)該語句適用於CALL TRANSACTION/SUBMIT過程中的資料共享,也常用於User Exit,類似於定義全域性變數的效果。

SAP Memory上面說了External Mode,那麼它們之間共享資料必須透過 SET / GET PARAMETER 語句,不再是EXPORT/IMPORT的模式。

例子. 建立程式A,輸入:DATA matnr TYPE matnr.GET PARAMETER ID ‘YTEST’ FIELD matnr.WRITE matnr.建立程式B,輸入:DATA: matnr TYPE matnr.matnr = ‘000000000000012345’.SET PARAMETER ID ‘YTEST’ FIELD matnr.在視窗1執行程式B並關閉後,在視窗2執行程式A,發現程式A仍然讀到了SAP Memory的值。

說明:(1)除錯時,可透過Goto-System Area-SAP Memory,檢視到YTEST及其對應的值。(2) SET / GET PARAMETER 的值與本次登陸有關,當用戶登出後才失效。在使用者登陸的時候,系統會根據每個使用者User Profile-Own Data- Parameter 下的 設定 ,載入到SAP Memory。(3)Data Element中可以看到Further Characteristics下可定義 PARAMETER ID,代表該欄位作為螢幕元素時,可讀取該 PARAMETER ID作為預設值。比如VA03會自動顯示剛剛建立的訂單號。

SHARED MEMORY/SHARED BUFFER前 面介紹的都是使用者記憶體,那麼不同使用者間如何實現資料共享呢?可以用SHARED MEMORY或SHARED BUFFER,它們是伺服器上的某片所有使用者共享的記憶體。關於SHARED MEMORY和SHARED BUFFER的區別,可以F1檢視幫助。如果EXPORT SHARED BUFFER,則必須IMPORT SHARED BUFFER才能讀到,用IMPORT SHARED MEMORY是讀不到的。反過來也是。

例子. 建立程式A,輸入:DATA matnr TYPE matnr.IMPORT matnr FROM SHARED BUFFER indx(aa) ID ‘YTEST_MATNR’.WRITE matnr.建立程式B,輸入:DATA: matnr TYPE matnr.matnr = ‘000000000000123456’.EXPORT matnr TO SHARED BUFFER indx(aa) ID ‘YTEST_MATNR’.先在使用者1的電腦上執行程式B,然後在使用者2的電腦上執行程式A,發現使用者2可以讀取到值。

說明:(1)既然是伺服器上的所有使用者共享空間,那麼該值將儲存到伺服器關機重啟為止,除非使用者用DELETE語句清除它。其實這個跟ENQUEUE/DEQUEUE有點相似之處。(2)資料庫也可共享資料,不過伺服器共享肯定速度快些,理論上適合網路遊戲,呵呵。(3)INDX是系統中存在的符合特定格式要求的表。但這不代表該EXPORT/IMPORT語句將在表INDX中增加記錄,僅僅代表伺服器借用了INDX的結構來管理該片共享記憶體。

DATABASE上面說了SHARED BUFFER並不訪問資料庫,而要訪問資料庫就應該用DATABASE。

建立一個程式,錄入程式碼:DATA: matnr TYPE matnr.matnr = ‘000000000000004321’.EXPORT matnr TO DATABASE indx(aa) ID ‘YTEST_MATNR’.

執 行程式,然後SE16查看錶INDX,發現新增了一條RELID = AA, SRTFD = YTEST_MATNR的記錄。如果EXPORT的資料量比較大,則新增的將是多條,這些條目的欄位值SRTF2從0遞增。所以EXPORT DATABASE與普通資料庫操作的不同之處是,它適合大資料量的操作,系統自動將其拆分成多條記錄並存儲到資料庫中,比如圖片或文件。而用IMPORT DATABASE的過程則相反,系統將把這些條相關記錄又自動組合起來成為一個整體。

13
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • SaaS 網站獲客之道 3:最佳化篇