ABAP Memory/SAP Memory/Shared Buffer/Database
生活随笔
收集整理的這篇文章主要介紹了
ABAP Memory/SAP Memory/Shared Buffer/Database
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ABAP 提供了IMPORT/EXPORT 和 SET / GET PARAMETER 語(yǔ)句,可對(duì)用戶內(nèi)存/服務(wù)器內(nèi)存/數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)和訪問。不過可能很多人對(duì)此還不是很了解,下面我們通過實(shí)例來測(cè)試它們的區(qū)別和聯(lián)系。
1. ABAP Memory
用戶登陸后,最多一個(gè)系統(tǒng)可以開6個(gè)窗口,這在SAP中稱為External Mode。
而同一個(gè)窗口中,運(yùn)行某程序后,可以通過CALL TRANSACTION/SUBMIT或其他代碼跳轉(zhuǎn)到其他程序,這個(gè)稱為Internal Mode。Internal Mode的調(diào)用棧最多為9層。
那么ABAP Memory,它是屬于Internal Mode間可以共享的數(shù)據(jù),而External Mode間無法共享。
例子. 創(chuàng)建程序A,輸入:
DATA matnr TYPE matnr. IMPORT matnr FROM MEMORY ID 'YTEST_MATNR'. WRITE matnr.
創(chuàng)建程序B,輸入:
DATA matnr TYPE matnr.
matnr = '000000000000001234'.
EXPORT matnr TO MEMORY ID 'YTEST_MATNR'. SUBMIT y_program_a. "調(diào)用程序A 直接運(yùn)行B,發(fā)現(xiàn)程序A從ABAP Memory讀到了值并輸出到LIST. 說明: (1)調(diào)試運(yùn)行B到EXPORT語(yǔ)句后面,Goto-System Area-ABAP Memory,可以查看到名為YTEST_MATNR的一片內(nèi)存。 (2)如果B和A運(yùn)行在不同的窗口,則A將訪問不到數(shù)據(jù);當(dāng)用戶輸入/N退出當(dāng)前程序時(shí),內(nèi)存值也將被清空。 (3)該語(yǔ)句適用于CALL TRANSACTION/SUBMIT過程中的數(shù)據(jù)共享,也常用于User Exit,類似于定義全局變量的效果。 2. SAP Memory 上面說了External Mode,那么它們之間共享數(shù)據(jù)必須通過SET /GET PARAMETER 語(yǔ)句,不再是EXPORT/IMPORT的模式。 例子. 創(chuàng)建程序A,輸入: DATA matnr TYPE matnr. GET PARAMETER ?ID 'YTEST' FIELD matnr. WRITE matnr. 創(chuàng)建程序B,輸入: DATA: matnr TYPE matnr.
matnr = '000000000000012345'.
SET PARAMETER ID 'YTEST' FIELD matnr. 在窗口1運(yùn)行程序B并關(guān)閉后,在窗口2運(yùn)行程序A,發(fā)現(xiàn)程序A仍然讀到了SAP Memory的值。 說明: (1)調(diào)試時(shí),可通過Goto-System Area-SAP Memory,查看到Y(jié)TEST及其對(duì)應(yīng)的值。 (2)SET /GET PARAMETER 的值與本次登陸有關(guān),當(dāng)用戶注銷后才失效。在用戶登陸的時(shí)候,系統(tǒng)會(huì)根據(jù)每個(gè)用戶User Profile-Own Data-Parameter 下的 設(shè)置 ,載入到SAP Memory。 (3)Data Element中可以看到Further Characteristics下可定義PARAMETER ID,代表該字段作為屏幕元素時(shí),可讀取該PARAMETER ID作為默認(rèn)值。比如VA03會(huì)自動(dòng)顯示剛剛創(chuàng)建的訂單號(hào)。 3. SHARED MEMORY/SHARED BUFFER 前 面介紹的都是用戶內(nèi)存,那么不同用戶間如何實(shí)現(xiàn)數(shù)據(jù)共享呢?可以用SHARED MEMORY或SHARED BUFFER,它們是服務(wù)器上的某片所有用戶共享的內(nèi)存。關(guān)于SHARED MEMORY和SHARED BUFFER的區(qū)別,可以F1查看幫助。如果EXPORT SHARED BUFFER,則必須IMPORT SHARED BUFFER才能讀到,用IMPORT SHARED MEMORY是讀不到的。反過來也是。 例子. 創(chuàng)建程序A,輸入: DATA matnr TYPE matnr. IMPORT matnr FROM SHARED BUFFER indx(aa) ID 'YTEST_MATNR'. WRITE matnr. 創(chuàng)建程序B,輸入: DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
EXPORT matnr TO SHARED BUFFER indx(aa) ID 'YTEST_MATNR'. 先在用戶1的電腦上運(yùn)行程序B,然后在用戶2的電腦上運(yùn)行程序A,發(fā)現(xiàn)用戶2可以讀取到值。 說明: (1)既然是服務(wù)器上的所有用戶共享空間,那么該值將保存到服務(wù)器關(guān)機(jī)重啟為止,除非用戶用DELETE語(yǔ)句清除它。其實(shí)這個(gè)跟ENQUEUE/DEQUEUE有點(diǎn)相似之處。 (2)數(shù)據(jù)庫(kù)也可共享數(shù)據(jù),不過服務(wù)器共享肯定速度快些,理論上適合網(wǎng)絡(luò)游戲,呵呵。 (3)INDX是系統(tǒng)中存在的符合特定格式要求的表。但這不代表該EXPORT/IMPORT語(yǔ)句將在表INDX中增加記錄,僅僅代表服務(wù)器借用了INDX的結(jié)構(gòu)來管理該片共享內(nèi)存。 4. DATABASE 上面說了SHARED BUFFER并不訪問數(shù)據(jù)庫(kù),而要訪問數(shù)據(jù)庫(kù)就應(yīng)該用DATABASE。 創(chuàng)建一個(gè)程序,錄入代碼: DATA: matnr TYPE matnr.
matnr = '000000000000004321'.
EXPORT matnr TO DATABASE indx(aa) ID 'YTEST_MATNR'. 執(zhí) 行程序,然后SE16查看表INDX,發(fā)現(xiàn)新增了一條RELID = AA, SRTFD = YTEST_MATNR的記錄。如果EXPORT的數(shù)據(jù)量比較大,則新增的將是多條,這些條目的字段值SRTF2從0遞增。所以EXPORT DATABASE與普通數(shù)據(jù)庫(kù)操作的不同之處是,它適合大數(shù)據(jù)量的操作,系統(tǒng)自動(dòng)將其拆分成多條記錄并存儲(chǔ)到數(shù)據(jù)庫(kù)中,比如圖片或文檔。而用IMPORT DATABASE的過程則相反,系統(tǒng)將把這些條相關(guān)記錄又自動(dòng)組合起來成為一個(gè)整體。 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
matnr = '000000000000001234'.
EXPORT matnr TO MEMORY ID 'YTEST_MATNR'. SUBMIT y_program_a. "調(diào)用程序A 直接運(yùn)行B,發(fā)現(xiàn)程序A從ABAP Memory讀到了值并輸出到LIST. 說明: (1)調(diào)試運(yùn)行B到EXPORT語(yǔ)句后面,Goto-System Area-ABAP Memory,可以查看到名為YTEST_MATNR的一片內(nèi)存。 (2)如果B和A運(yùn)行在不同的窗口,則A將訪問不到數(shù)據(jù);當(dāng)用戶輸入/N退出當(dāng)前程序時(shí),內(nèi)存值也將被清空。 (3)該語(yǔ)句適用于CALL TRANSACTION/SUBMIT過程中的數(shù)據(jù)共享,也常用于User Exit,類似于定義全局變量的效果。 2. SAP Memory 上面說了External Mode,那么它們之間共享數(shù)據(jù)必須通過SET /GET PARAMETER 語(yǔ)句,不再是EXPORT/IMPORT的模式。 例子. 創(chuàng)建程序A,輸入: DATA matnr TYPE matnr. GET PARAMETER ?ID 'YTEST' FIELD matnr. WRITE matnr. 創(chuàng)建程序B,輸入: DATA: matnr TYPE matnr.
matnr = '000000000000012345'.
SET PARAMETER ID 'YTEST' FIELD matnr. 在窗口1運(yùn)行程序B并關(guān)閉后,在窗口2運(yùn)行程序A,發(fā)現(xiàn)程序A仍然讀到了SAP Memory的值。 說明: (1)調(diào)試時(shí),可通過Goto-System Area-SAP Memory,查看到Y(jié)TEST及其對(duì)應(yīng)的值。 (2)SET /GET PARAMETER 的值與本次登陸有關(guān),當(dāng)用戶注銷后才失效。在用戶登陸的時(shí)候,系統(tǒng)會(huì)根據(jù)每個(gè)用戶User Profile-Own Data-Parameter 下的 設(shè)置 ,載入到SAP Memory。 (3)Data Element中可以看到Further Characteristics下可定義PARAMETER ID,代表該字段作為屏幕元素時(shí),可讀取該PARAMETER ID作為默認(rèn)值。比如VA03會(huì)自動(dòng)顯示剛剛創(chuàng)建的訂單號(hào)。 3. SHARED MEMORY/SHARED BUFFER 前 面介紹的都是用戶內(nèi)存,那么不同用戶間如何實(shí)現(xiàn)數(shù)據(jù)共享呢?可以用SHARED MEMORY或SHARED BUFFER,它們是服務(wù)器上的某片所有用戶共享的內(nèi)存。關(guān)于SHARED MEMORY和SHARED BUFFER的區(qū)別,可以F1查看幫助。如果EXPORT SHARED BUFFER,則必須IMPORT SHARED BUFFER才能讀到,用IMPORT SHARED MEMORY是讀不到的。反過來也是。 例子. 創(chuàng)建程序A,輸入: DATA matnr TYPE matnr. IMPORT matnr FROM SHARED BUFFER indx(aa) ID 'YTEST_MATNR'. WRITE matnr. 創(chuàng)建程序B,輸入: DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
EXPORT matnr TO SHARED BUFFER indx(aa) ID 'YTEST_MATNR'. 先在用戶1的電腦上運(yùn)行程序B,然后在用戶2的電腦上運(yùn)行程序A,發(fā)現(xiàn)用戶2可以讀取到值。 說明: (1)既然是服務(wù)器上的所有用戶共享空間,那么該值將保存到服務(wù)器關(guān)機(jī)重啟為止,除非用戶用DELETE語(yǔ)句清除它。其實(shí)這個(gè)跟ENQUEUE/DEQUEUE有點(diǎn)相似之處。 (2)數(shù)據(jù)庫(kù)也可共享數(shù)據(jù),不過服務(wù)器共享肯定速度快些,理論上適合網(wǎng)絡(luò)游戲,呵呵。 (3)INDX是系統(tǒng)中存在的符合特定格式要求的表。但這不代表該EXPORT/IMPORT語(yǔ)句將在表INDX中增加記錄,僅僅代表服務(wù)器借用了INDX的結(jié)構(gòu)來管理該片共享內(nèi)存。 4. DATABASE 上面說了SHARED BUFFER并不訪問數(shù)據(jù)庫(kù),而要訪問數(shù)據(jù)庫(kù)就應(yīng)該用DATABASE。 創(chuàng)建一個(gè)程序,錄入代碼: DATA: matnr TYPE matnr.
matnr = '000000000000004321'.
EXPORT matnr TO DATABASE indx(aa) ID 'YTEST_MATNR'. 執(zhí) 行程序,然后SE16查看表INDX,發(fā)現(xiàn)新增了一條RELID = AA, SRTFD = YTEST_MATNR的記錄。如果EXPORT的數(shù)據(jù)量比較大,則新增的將是多條,這些條目的字段值SRTF2從0遞增。所以EXPORT DATABASE與普通數(shù)據(jù)庫(kù)操作的不同之處是,它適合大數(shù)據(jù)量的操作,系統(tǒng)自動(dòng)將其拆分成多條記錄并存儲(chǔ)到數(shù)據(jù)庫(kù)中,比如圖片或文檔。而用IMPORT DATABASE的過程則相反,系統(tǒng)將把這些條相關(guān)記錄又自動(dòng)組合起來成為一個(gè)整體。 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的ABAP Memory/SAP Memory/Shared Buffer/Database的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Function
- 下一篇: smartform 中currency