程序间数据共享与传递(1):EXPORT/IMPORT、SAP/ABAP Memory
EXPORT?語句
EXPORT?{p1?=?dobj1 p2?=?dobj2?...}?|?{p1?FROM?dobj1 p2?FROM?dobj2?...}?|?(ptab)
?TO?| {?MEMORY ID?id?}?
??| {?DATABASE??????dbtab(ar)?[FROM?wa]?[CLIENT?cl]?ID?id?}?
??| {?SHARED MEMORY?dbtab(ar)?[FROM?wa] [CLIENT?cl]?ID?id?}?
??| {?SHARED?BUFFER?dbtab(ar)?[FROM?wa] [CLIENT?cl]?ID?id?}
?
1.???????{p1 =?dobj1?p2 = dobj2 ...}與?{p1 FROM dobj1 p2 FROM dobj2 ...}的意義一樣,只是寫法不一樣,dobj1、dobj2…變量將會以p1、p2…名稱存儲到內存或數據庫中。p1、p2…名稱隨便取,如果p1、p2…與將要存儲的變量名相同時,只需寫變量名即可,即等號與?FROM?后面可以省略。p1、p2…這些名稱必須與IMPORT語句中相一致,否則讀取不出
2.???????(ptab):為動態指定需要存儲的變量,ptab內表結構要求是這樣的:只需要兩列,列名任意,但類型需要是字符型;第一列存儲如上面的p1、p2…名稱,第二列為上面的dobj1、dobj2…變量,如果變量與名稱相同,則也可以像上面一樣,省略第二列的值。兩列的值都必需要大寫,實例如下:
TYPES:BEGIN OF?tab_type,
????para?TYPE?string,"列的名稱任意,類型為字符型
????dobj?TYPE?string,
??END OF?tab_type.
DATA:text1?TYPE?string?VALUE?`TXT1`,
??text2?TYPE?string?VALUE?`TXT2`,
??line??TYPE?tab_type,
??itab??TYPE STANDARD TABLE OF?tab_type.
line-para?=?'P1'."值都需要大寫
line-dobj?=?'TEXT1'."值都需要大寫
APPEND line TO?itab.
line-para?=?'P2'.
line-dobj?=?'TEXT2'.
APPEND line TO?itab.
EXPORT?(itab)?TO MEMORY ID?'TEXTS'.
IMPORT?p1?=?text2 p2?=?text1?FROM MEMORY ID?'TEXTS'.
WRITE:?/ text1,text2."TXT2 TXT1
CLEAR:?text1,text2.
IMPORT?(itab)?FROM MEMORY ID?'TEXTS'.
WRITE:?/ text1,text2."TXT1 TXT2
3.???????MEMORY ID:將變量存儲到ABAP Memory內存中
4.???????DATABASE:將變量存儲到數據庫中;dbtab為簇數據庫表的名稱(如系統提供的標準表INDX);ar的值為區域ID,它將數據庫表的行分成若干區域,它必須被直接指定,且值是兩位字符,被存儲到簇數據庫表中的RELID字段中;id?的值會存儲到簇數據表中的RELID字段的下一用戶自定義字段中:
TYPES:BEGIN OF?tab_type,
????col1?TYPE i,
????col2?TYPE i,
??END OF?tab_type.
DATA:wa_indx?TYPE?demo_indx_table,
??wa_itab?TYPE?tab_type,
??itab??TYPE STANDARD TABLE OF?tab_type.
WHILE?sy-index?<?100.
??wa_itab-col1?=?sy-index.
??wa_itab-col2?=?sy-index?**?2.
??APPEND?wa_itab?TO?itab.
ENDWHILE.
wa_indx-timestamp?=?sy-datum && sy-uzeit.
wa_indx-userid????=?sy-uname.
EXPORT?tab?=?itab?TO DATABASE?demo_indx_table(sq)?FROM?wa_indx?ID?'TABLE'.
?
實例二:
TABLES:?indx.
DATA:?BEGIN OF?i_tab?OCCURS?100,
??col1?TYPE i,
??col2?TYPE i,
END OF?i_tab.
DO?3000?TIMES.
??i_tab-col1?=?sy-index.
??i_tab-col2?=?sy-index?**?2.
??APPEND?i_tab.
ENDDO.
indx-aedat?=?sy-datum.
indx-usera?=?sy-uname.
indx-pgmid?=?sy-repid.
"省略了FROM選項,因為已經使用TABLES indx語句定義了名為indx的結構變量了
"Export時會自動將表工作區indx變量中的用戶字段存儲到簇數據庫表中
EXPORT?i_tab?TO DATABASE?indx(HK)?ID?'Key'.
WRITE:?' SRTF2',AT?20?'AEDAT',AT?35?'USERA',AT?50?'PGMID'.
ULINE.
"注:下面完全可以使用?IMPORT FROM DATABASE TO wa?語句來讀取用戶區字段
SELECT?*?FROM?indx?WHERE?relid?=?'HK'AND?srtfd?=?'Key'.
??WRITE:?/ indx-srtf2?UNDER?'SRTF2',
??indx-aedat?UNDER?'AEDAT',
??indx-usera?UNDER?'USERA',
??indx-pgmid?UNDER?'PGMID'.
ENDSELECT.
SRTF2?????????????AEDAT??????????USERA??????????PGMID
????????0??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????1??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????2??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????3??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????4??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
5.???????SHARED MEMORY/BUFFER?:將數據存儲到SAP應用服務器上的SAP Memory中,可共同一服務上的所有程序訪問。兩種的作用是一樣的,最大不同是在數據達到最大內存限制時的處理方式不同:最大內存限制值分別是通過rsdb/esm/buffersize_kb?(SHARED MEMORY)、rsdb/obj/buffersize (SHARED?BUFFER)來設置的,當內存占用快滿時,SHARED MEMORY必須通過DELETE FROM SHARED MEMORY來手動清理,而SHARED BUFFER會自動刪除很少被使用到的數據(當然也可以通過DELETE FROM SHARED BUFFER手動及時的刪除不用的數據)
6.???????FROM wa:wa工作區類型可以參照簇數據庫dbtab類型,也可定義成只含有用戶數據字段的結構,它是用來設置簇數據庫表中SRTF2?與?CLUSTR兩個字段之間的用戶數據字段(參見簇數據表圖中的編號為5的用戶數據)的值,然后在Export時將相應的字段存儲到SRTF2字段與CLUSTR字段間的相應字段中去。如果使用“TABLES dbtab.”定義語句,可以省略“[FROM wa]”,也會默認將其存儲到數據庫表中,但如果沒有“TABLES dbtab.”這樣的定義語句,也沒有“[FROM wa]”選項時,將不會有數據存儲到簇數據庫表中的用戶字段中去
7.???????CLIENT cl:默認為當前客戶端,存儲到簇數據庫表中的MANDT字段中
總結
以上是生活随笔為你收集整理的程序间数据共享与传递(1):EXPORT/IMPORT、SAP/ABAP Memory的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP and ABAP Memory总
- 下一篇: 程序间数据共享与传递(2):EXPORT