日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SAP Memory & ABAP Memory

 一騎當千_30 2019-01-11

以前做enhancement的時候用過parameter id 和 memory id, 但很多其他語法用法我是沒接觸過的, 今天看了Palm同鞋做的文檔SAP Memory & ABAP Memory, 做了一些測試, 本文幾乎所有內容來自Palm同鞋的文檔.


1、先弄清External Session 和Internal Session區(qū)別:

External Session:

當user登陸SAP后, 就開啟了一個userlogon session。當user退出所有sap window, 就結束了這個user logon session。一個userlogon session最多有6個external session(即main session,對應有6個窗口).

Internal Session:

在一個external session內調用其它程序將會生成新的internal session, 比如call FM, call transaction或是submit*** and return等方式。 當關掉這個external session時,也就結束了external session下的所有internal session。一個External session最多有20個Internal session.

對于上面這幾個session之間的關系可以這么簡單概括:User session > external session > internal session。


SAP memory類似于全局變量,用于Externalsession間的通信,不同的externalsession都可以訪問,當退出userlogon session時將清空SAPmemory(不同user對應的SAPmemory不同)。


ABAP memory類似于局部變量,用于同一externalsession下internalsession間的通信,不同的externalsession有不同的ABAPmemory,同一個externalsession里的internalsession只能訪問相應session的ABAP memory。


2、網上寫的兩者幾個不同點:

1. 使用的語句不同

SAP memory使用SET/GET parameters;

SPA:SET PARAMETER ID 'MAT' FIELD p_matnr.
GPA:GET PARAMETER ID 'MAT' FIELD p_matnr.

ABAP Memory使用EXPORT 和IMPORT :

EXPORT p_matnr = p_matnr TO MEMORY ID 'ZTESTMAT'.
EXPORT p_matnr = p_matnr FROM MEMORY ID 'ZTESTMAT'

FREE MEMORY ID 'ZTESTMAT'.                     清空指定的ABAPmemory

FREE MEMORY.                                               清空externalsession內的所有ABAPmemory

3、共享范圍不同

SAP memory用于所有external session間,ABAP memory用于同一個external session的internal session間。

4、作用范圍不同(就是生存期)

SAP memory在登陸到退出這期間一直有效。

ABAP memory只在同一個session(window) 內有效。


3、SAP Memory:

1. 給SAP Memory賦值

創(chuàng)建程序ZTEST_SET_SAP_MMR給‘SAP_MMR'賦值'12345'.

2.獲取SAP Memory 的值并顯示在選擇屏幕上

創(chuàng)建另一個程序ZTEST_GET_SAP_MMR,并為PR_TEST指定Memory ID ,這樣SAP_MMR的值將會作為默認值顯示在selection screen上。



運行結果,默認值顯示在屏幕上:


因為field與SAP Memory綁定了,在selection screen上如果修改對應的值,比如將'12345'改成'123'后按F8,也將修到SAP memory的值.重新運行程序如下:



3. Dialog獲取SAPMemory方式

在dialog 屏幕上建一個input field, 然后Parameter ID屬性與'SAP_MMR'綁定,并打上2個勾。

Set Parameter: 允許將屏幕值返回給SAP Memory (類似于執(zhí)行SET PARAMETER ID語句)

Get Parameter: 允許讀取SAP Memory的值并默認顯示(類似于執(zhí)行GET PARAMETER ID語句).


SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

在程序里聲明該變量:

給程序創(chuàng)建一個T-code

運行結果(勾上set parameter后,當修改屏幕上的數值時也會反映到SAP memory里):


備注:在Data Element里有一個地方可以填Parameter ID(這個方法好無聊,但SAP可能為了規(guī)范參照同一data element的parameter ID,就用了這方法....我只想到這用法,這優(yōu)點).

創(chuàng)建一個Data Element,并創(chuàng)建一個Parameter ID(存在表TPARA里,以Z或Y打頭):

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

綁定給table或structure:

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

在Dialog里輸入table-field名字時,會提示是否參照Dictionary.

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

選是了后會自動帶出Parameter ID.

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

此時需要勾上Set Parameter和Get Parameter并在代碼里聲明ZTESTTEST才有效.



4. 通過Get parameter ID語句獲取SAP memory的值,并賦給LV_TEST



如果SET Parameter ID后退出所有sessions,SAP memory將被清空,重新登陸Get Parameter ID將取到空值。

如果SET Parameter ID后其它user用Get Parameter ID也取不到相應的值。


5. TCODE SU3設置PARAMETER ID

在TCODE SU3設置了PARAMETER ID后, 運行語句GET PARAMETER ID 后就能讀到設置的相關PARAMETER ID的值. 它的功能相當于SET PARAMETER ID.

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客


4、ABAP Memory:

1.建了個程序和FM:

將數據丟到ABAP內存'ABAP_MMR',被調用的FM是在internal session內運行(或是用submit和call transaction)。

程序代碼:(類的方法里不能使用這種語法,只能用下面的第二、三種)

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

FM代碼:

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

運行結果,FM里可以取到ABAP memory的值。



在程序里取'ABAP_MMR'的值,調用同一個FM取值。

代碼:

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

如果跑完第一步的程序后不關閉窗口再跑這個程序,那么可以成功讀到LV_TEST的值。

程序:


FM:


如果跑第一步的程序后用另一窗口(external session)跑第二步程序,將讀取不到數值。

運行結果:

程序:


FM:

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客


3.如果export和import的參數名字不同,則需要指定對應參數名(很糾結的,被賦值的Lv_test_2要放在 = 右邊,但用 to的話會比較直觀)。

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

結果:



4. Export多個數據放到ABAP memory里。

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客

結果:

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客


5. Free Memory:會清空該external session內所有的ABAP Memory.

程序:ZTEST_SET_ABAP_MMR_4

用了Free Memory ID后'ABAP_MMR_1'和'ABAP_MMR_2'都為空,無法用import取值.

SAP Memory  ABAP Memory  - Jinyueting.it - jinyueting.it博客


6. Free Memory ID: 清空指定ABAP Memory ID的內容, 其它的ID不受影響.

用了FREE MEMORY ID 'ABAP_MMR_3'.后, 'ABAP_MMR_3'的數據將被清空,無法取值,但'ABAP_MMR_4'不受影響,可以取到LV_TEST的值(放在LV_TEST_5里).


如果將多個變量一直放在同一ID內, 如果用了Free Memory 或是Free Memory ID(指定這個ID),那這個ID內的所有變量將被全部清空.


網上還說到另外兩種傳輸方式.

Share Memory 或Share Buffer 用于不同用戶間的數據傳遞.

當使用DELETE FROM SHARED BUFFER 語句或是服務器關閉后該內存才會被清空.


使用TOSHARED BUFFER要用FROMSHARED BUFFER取值.

使用TOSHARED MEMORY要用FROMSHARED MEMORY取值.



語法和普通MEMORY ID是一樣的


Database  將數據存進表里, 就算服務器關了數據還存在.


表INDX會多一條記錄.



讀取數據:



語法和普通MEMORY ID是一樣的


關于這個memory id, database還有一些細節(jié)可以參考老白的博客

轉自:http://jinyueting.it.blog.163.com/blog/static/50938665201302202150368/

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章