小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SAP Memory & ABAP Memory

 一騎當(dāng)千_30 2019-01-11

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


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

External Session:

當(dāng)user登陸SAP后, 就開啟了一個(gè)userlogon session。當(dāng)user退出所有sap window, 就結(jié)束了這個(gè)user logon session。一個(gè)userlogon session最多有6個(gè)external session(即main session,對(duì)應(yīng)有6個(gè)窗口).

Internal Session:

在一個(gè)external session內(nèi)調(diào)用其它程序?qū)?huì)生成新的internal session, 比如call FM, call transaction或是submit*** and return等方式。 當(dāng)關(guān)掉這個(gè)external session時(shí),也就結(jié)束了external session下的所有internal session。一個(gè)External session最多有20個(gè)Internal session.

對(duì)于上面這幾個(gè)session之間的關(guān)系可以這么簡(jiǎn)單概括:User session > external session > internal session。


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


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


2、網(wǎng)上寫的兩者幾個(gè)不同點(diǎn):

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內(nèi)的所有ABAPmemory

3、共享范圍不同

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

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

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

ABAP memory只在同一個(gè)session(window) 內(nèi)有效。


3、SAP Memory:

1. 給SAP Memory賦值

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

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

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



運(yùn)行結(jié)果,默認(rèn)值顯示在屏幕上:


因?yàn)閒ield與SAP Memory綁定了,在selection screen上如果修改對(duì)應(yīng)的值,比如將'12345'改成'123'后按F8,也將修到SAP memory的值.重新運(yùn)行程序如下:



3. Dialog獲取SAPMemory方式

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

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

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


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

在程序里聲明該變量:

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

運(yùn)行結(jié)果(勾上set parameter后,當(dāng)修改屏幕上的數(shù)值時(shí)也會(huì)反映到SAP memory里):


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

創(chuàng)建一個(gè)Data Element,并創(chuàng)建一個(gè)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名字時(shí),會(huì)提示是否參照Dictionary.

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

選是了后會(huì)自動(dòng)帶出Parameter ID.

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

此時(shí)需要勾上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也取不到相應(yīng)的值。


5. TCODE SU3設(shè)置PARAMETER ID

在TCODE SU3設(shè)置了PARAMETER ID后, 運(yùn)行語句GET PARAMETER ID 后就能讀到設(shè)置的相關(guān)PARAMETER ID的值. 它的功能相當(dāng)于SET PARAMETER ID.

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


4、ABAP Memory:

1.建了個(gè)程序和FM:

將數(shù)據(jù)丟到ABAP內(nèi)存'ABAP_MMR',被調(diào)用的FM是在internal session內(nèi)運(yùn)行(或是用submit和call transaction)。

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

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

FM代碼:

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

運(yùn)行結(jié)果,F(xiàn)M里可以取到ABAP memory的值。



在程序里取'ABAP_MMR'的值,調(diào)用同一個(gè)FM取值。

代碼:

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

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

程序:


FM:


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

運(yùn)行結(jié)果:

程序:


FM:

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


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

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

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

結(jié)果:



4. Export多個(gè)數(shù)據(jù)放到ABAP memory里。

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

結(jié)果:

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


5. Free Memory:會(huì)清空該external session內(nèi)所有的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的內(nèi)容, 其它的ID不受影響.

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


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


網(wǎng)上還說到另外兩種傳輸方式.

Share Memory 或Share Buffer 用于不同用戶間的數(shù)據(jù)傳遞.

當(dāng)使用DELETE FROM SHARED BUFFER 語句或是服務(wù)器關(guān)閉后該內(nèi)存才會(huì)被清空.


使用TOSHARED BUFFER要用FROMSHARED BUFFER取值.

使用TOSHARED MEMORY要用FROMSHARED MEMORY取值.



語法和普通MEMORY ID是一樣的


Database  將數(shù)據(jù)存進(jìn)表里, 就算服務(wù)器關(guān)了數(shù)據(jù)還存在.


表INDX會(huì)多一條記錄.



讀取數(shù)據(jù):



語法和普通MEMORY ID是一樣的


關(guān)于這個(gè)memory id, database還有一些細(xì)節(jié)可以參考老白的博客

轉(zhuǎn)自:http://jinyueting.it.blog.163.com/blog/static/50938665201302202150368/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章