日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序间数据共享与传递(3):EXPORT/IMPORT、SAP/ABAP Memory

發(fā)布時(shí)間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序间数据共享与传递(3):EXPORT/IMPORT、SAP/ABAP Memory 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ABAP Memory(同一用戶的同一窗口Session

l??保存數(shù)據(jù)

EXPORT[FROM ]??[FROM ] ... TO MEMORY ID <</span>key>.

如果省略了FROM?選項(xiàng),則被存儲(chǔ)的數(shù)據(jù)源就來自于程序中與f1自已同名的變量,否則數(shù)據(jù)源為g1指定的變量(或者g1本身就是字符常量);key?用來標(biāo)示ABAP內(nèi)存。可以將多個(gè)變量存儲(chǔ)在同一個(gè)中,它們是通過來區(qū)別的。IMPORT中的必須與EXPORT中的名稱相同。

DATA?text1(10)?VALUE?'Exporting'.
DATA?itab?LIKE?sbook?OCCURS?10?WITH HEADER LINE.
DO?5?TIMES.
??itab
-bookid?=?100?+ sy-index.
??
APPEND?itab.
ENDDO.
"?text1??text2都存儲(chǔ)到?text ID的名下
EXPORT?text1?"數(shù)據(jù)來源于上面定義的?text1變量,并以text1名分類存儲(chǔ)
???????text2?
FROM?'Literal'"數(shù)據(jù)直接來源于From后面指定的常量字符串,也以text1名分類存儲(chǔ)
??
TO MEMORY ID?'text'.
"將前面定義的itab存儲(chǔ)到以tableID的內(nèi)存中,并以itab名分類存儲(chǔ)
EXPORT?itab?TO MEMORY ID?'table'.

?

l??讀取數(shù)據(jù)

IMPORT [TO ] [TO ] ... FROM MEMORY ID .

如果忽略選項(xiàng)TO,則將內(nèi)存中的數(shù)據(jù)對(duì)象賦給程序中的同名數(shù)據(jù)對(duì)象;如果使用此選項(xiàng),則將內(nèi)存中的數(shù)據(jù)對(duì)象寫入字段中。IMPORT中的必須與EXPORT中的名稱相同。

?

不必讀取存在特定ID下的所有對(duì)象,在讀取時(shí)可以通過指定名稱中進(jìn)行有選擇性的讀取。如果內(nèi)存中不包含指定ID下的對(duì)象,則將SY-SUBRC設(shè)置為4,但是如果內(nèi)存中存在帶此ID的數(shù)據(jù)簇,無論數(shù)據(jù)對(duì)象是否也存在,SY-SUBRC之值總是為0。如果簇中不存在數(shù)據(jù)對(duì)象,則目標(biāo)字段保持不變(gifi本身)。

DATA?text1(10)?VALUE?'TEST1'.
DATA?itab?LIKE?sbook?OCCURS?10?WITH HEADER LINE.
DO?5?TIMES.
??itab
-bookid?=?100?+ sy-index.
??
APPEND?itab.
ENDDO.

EXPORT?text1"被存儲(chǔ)的數(shù)據(jù)來自text1變量
???????text2?
FROM?'Literal'"被存儲(chǔ)的數(shù)據(jù)直接來自FORM后面字符串常量
???????
"'TEST1''Literal'存儲(chǔ)到IDtextABAP內(nèi)存中,并且分別以
???????
"text1text2標(biāo)簽來分類存儲(chǔ)
???????
TO MEMORY ID?'text'.
EXPORT?itab"被存儲(chǔ)的數(shù)據(jù)來自itab變量所對(duì)應(yīng)的內(nèi)存
????????
TO MEMORY ID?'table'.
SUBMIT?zjzjimpt1?AND RETURN."
調(diào)用其他程序并等待返回

?

REPORT??zjzjimpt1.
DATA:?text1(10),
??????text3?
LIKE?text1.

"IDtextABAP內(nèi)存區(qū)域讀取分類存儲(chǔ)標(biāo)簽為text1
"的內(nèi)存數(shù)據(jù)并存儲(chǔ)到text1變量中去
IMPORT?text1?FROM MEMORY ID?'text'.
WRITE:?/ sy-subrc,?text1.
"IDtextABAP內(nèi)存區(qū)域讀取分類存儲(chǔ)標(biāo)簽為text2
"的內(nèi)存數(shù)據(jù)并存儲(chǔ)到text3變量中去
IMPORT?text2?TO?text3?FROM MEMORY ID?'text'.
WRITE:?/ sy-subrc,?text3.

DATA?jtab?LIKE?sbook?OCCURS?10?WITH HEADER LINE.
"IDtableABAP內(nèi)存區(qū)域讀取分類存儲(chǔ)標(biāo)簽為itab
"的內(nèi)存數(shù)據(jù)并存儲(chǔ)到jtab變量中去
IMPORT?itab?TO?jtab?FROM MEMORY ID?'table'.
LOOP AT?jtab.
??
WRITE?/ jtab-bookid.
ENDLOOP.
*????0??TEST1
*????0??Literal
*00000101
*00000102
*00000103
*00000104
*00000105

?

l??刪除數(shù)據(jù)

FREE MEMORY [ID ].

DELETE FROM MEMORY ID id.等效

如果不附加ID,則此語句刪除整個(gè)內(nèi)存,包括此前用EXPORT存儲(chǔ)到ABAP/4內(nèi)存中的所有數(shù)據(jù)簇。附加ID之后,該語句只刪除用此名稱命名的數(shù)據(jù)簇。

?

用戶登陸后,最多一個(gè)系統(tǒng)可以開6個(gè)窗口,這在SAP中稱為External Mode。而同一個(gè)窗口中,運(yùn)行某程序后,可以通過CALL TRANSACTION/SUBMIT或其他代碼跳轉(zhuǎn)到其他程序,這個(gè)稱為Internal ModeInternal Mode的調(diào)用棧最多為9層。那么ABAP Memory,它是屬于Internal Mode間可以共享的數(shù)據(jù),而External Mode間無法共享。所以,ABAP Memorcy只能在同一窗體中共享,這與瀏覽器中的Session是一樣的。

?

SAP Memory(同一用戶的不同窗口Session

更多請(qǐng)參考《數(shù)據(jù)共享與傳遞.docx》中的SAP Memory語句章節(jié)

?

同一客戶端的不同窗體(External Mode)它們之間共享數(shù)據(jù)必須通過SET/GET PARAMETER語句,不再是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í),可通過點(diǎn)擊Goto->System Area->SAP Memory,查看到YTEST及其對(duì)應(yīng)的值。

2、??SET/GET PARAMETER的值與本次登陸有關(guān),當(dāng)用戶注銷后才失效。在用戶登陸的時(shí)候,系統(tǒng)會(huì)根據(jù)每個(gè)用戶System->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)。

?

SHARED MEMORY/SHARED BUFFER不同ClientJob

前面介紹的都是用戶內(nèi)存,那么不同用戶間如何實(shí)現(xiàn)數(shù)據(jù)共享呢?可以用SHARED MEMORYSHARED BUFFER,它們是服務(wù)器上的某片所有用戶共享的內(nèi)存。關(guān)于SHARED MEMORYSHARED 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語句清除它。其實(shí)這個(gè)跟ENQUEUE/DEQUEUE有點(diǎn)相似之處。

2、??數(shù)據(jù)庫也可共享數(shù)據(jù),不過服務(wù)器共享肯定速度快些。

3、??INDX是系統(tǒng)中存在的符合特定格式要求的表。但這不代表該EXPORT/IMPORT語句將在表INDX中增加記錄,僅僅代表服務(wù)器借用了INDX的結(jié)構(gòu)來管理該片共享內(nèi)存。

總結(jié)

以上是生活随笔為你收集整理的程序间数据共享与传递(3):EXPORT/IMPORT、SAP/ABAP Memory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。