導航:首頁 > 源碼編譯 > abap編譯器原理

abap編譯器原理

發布時間:2022-09-04 23:38:15

『壹』 哪位前輩給我講講ABAP中BDC的原理、作用,以及為何呀使用BDC請詳細的講講。謝謝。

模擬一個場景:輸入T-code, 進入一個屏幕,在某些欄位輸入值(也可能是標注checkbox選中或者不選中)或者修改這些欄位里的值。『ENTER』,再SAVE。這樣一條記錄的修改完成,繼續下一條記錄,循環……
就這個場景,如果讓一個人做幾萬條記錄,想想,都要瘋啦,呵呵。要是讓計算機來模擬人的操作就容易了。BDC作用大致就是這樣模擬前台業務操作。
SAP可以通過一個程序(T-CODE:SHDB)把用戶的一次業務操作記錄下來。
從用戶輸入transaction code(事務代碼),點下「Start Recording」開始,對於用戶的來說是一次普通的業務操作,但是SAP卻在記錄:
游標放到哪個欄位,(在程序中不用改變)
填入了什麼值,(變數,循環中的Internal Table 某個欄位)
點擊了什麼按鈕(在程序中不用改變)
原理基本就是先記錄一次操作,然後在程序里循環模擬這次業務操作。

『貳』 如何提高ABAP程序運行效率

程序的效率是每個程序員都應該重視的,無論您是採用哪一種語言進行開發. 程序有時候越短,並不
一定越快,有時候程序很多代碼,但不一定會很慢. 性能是一把雙刃劍, 獲得時間效率的同時, 犧牲
的是空間的開銷. 這里提供一些建議以提高你的程序運行速度和減低系統荷載。
首先是盡量減少I/O操作,類似對硬碟的讀寫的I/O操作是最耗費時間的, 比如讀寫資料庫。以下是
減少I/O操作的例子:
1, 減少資料庫DB的讀寫操作, 當使用VIEW視圖的時候, 當被視圖join的table有數據更新操作的時
候, 同時系統也會更新到這個view裡面, 使得它們之間的數據一樣, 所以使用視圖會對這些日常操
作帶來效率問題. 如果視圖join的表多數是日常事物需要更新的事物數據表(如EKET), 就要避免
使用視圖.
2, 避免使用SELECT *, 盡量使用SELECT A B C INTO TABLE ITAB這樣的語句。這個操作會將所有符
合條件的數據一次性地讀進內表,這比在SELECT A B C INTO WA... APPEND... ENDSELECT的循環中
添加數據到內表要快。不用頻繁的讀DB.
3, 避免頻繁使用SELECT SINGLE語句, 特別是在LOOP和SELECT...ENDSELECT裡面用, 應該把要讀取
的數據用SELECT FOR ALL ENTRIES IN 一次全部取得, 然後用READ TABLE WITH KEY ... BINARY
SEARCH.
雖然說操作內存比磁碟操作要高效,但是如果對內存的使用不加以控制,可能有些時候不得不對硬碟
的交換空間操作, 這樣就增加了對磁碟的I/O讀寫操作.正如下面所說:
4, 當你定義內表的時候可以也會出現這樣的問題, 比如你定義一個內表使用的是OCCURS 100,而不
是OCCURS 0, 會導致內表長度大於100的時候,就會佔用系統頁面緩存。
5, Field-groups對於多層次的排序和顯示是非常有用的。它是將數據寫入系統的頁面文件,而不是
內存(內表一般是使用內存的)。基於這個原因,field-groups比較適合於處理大量數據的列表(
一般超過50000條記錄)。如果涉及大量的數據處理,應該首先和系統管理員協商來決定這個程序最
多能使用多少內存,以計算這個程序需要使用多少資源。然後你就可以決定是把數據寫入內存還是
交換空間。
6, 用SORT代替ORDER BY, ORDER BY從句是執行在資料庫伺服器上, 而SORT是ABAP語句執行在應用服
務器上的. 資料庫伺服器通常會形成性能瓶頸問題, 所以最好是吧數據導入內表做SORT.
7, 避免使用SELECT DISTINCT語句, 因為當你用來判斷唯一的欄位為非索引欄位時, 效率是十分的
低, 所以請導入內表SORT後, 使用DELETE ADJACENT DUPLICATES 來去重復.
其次就是要減輕CPU的負載, 可以通過優化程序來改善,比如在程序中語句和演算法, 以下是減低CPU
負載的優化例子:
1, 使用宏代替頻繁函數調用. ABAP沒有內聯函數這個說法, 所以我們如果需要頻繁調用函數時, 函
數調用有棧內存創建和釋放的開銷. 在ABAP中可以用宏代碼提高執行效率,宏代碼不是函數但使用
起來像函數,編譯器用復制宏代碼的方式取代函數調用,省去了參數壓棧、從而提高速度。注意使
用宏有缺點:(1)容易出錯, 宏不能pass-by-value按值傳遞,用於代替實現函數功能時要十分注意!
(2)不可調試; (3)無法操作類的私有數據成員.
2, 避免使用過得的LOOP 和SELECT .... END SELECT. 避免使用嵌套的LOOP 和SELECT .... END
SELECT.
3, 盡可能多地使用表的KEY FIELD作為Where分句的條件選項。比如SELECT * FROM BSEG WHERE
BUKRS = '1000' AND BELNR = '0100000007' AND GJAHR =
'2006' AND BUZEI = '003'. 這里的四個欄位BUKRS,BELNR,GJAHR,BUZEI 都
是BSEG表的KEY欄位.
4, 如果某些數據需要頻繁的從不同表提取, 使用視圖VIEW實現讀取緩存可以提高效率. 當視圖連接
的是讀取次數較多, 但寫入不頻繁的表時(比如物料主數據表MARA), 可以使用視圖, 這樣比在程序
裡面簡單用join要快,理論上join語句每次讀取的速度都是一樣的, 而視圖是從讀二次開始就快了,
而且cache使得網路負載減低.
5, 使用SQL語句裡面的JOIN時候, 應該避免JOIN的表不要超過3個, 否則嚴重影響效率. 如果真的要
JOIN表3個以上的話, 正確的方法不是用視圖VIEW, 而是使用SELECT ... INTO TABLE ... FOR ALL
ENTRIES IN 以及 READ TABLE WITH KEY BINARY SEARCH.例如我們要提高讀取BSEG表的性能,首先我
們會根據GJAHR主鍵從BKPF表取出部分數據到內表itab,然後使用FOR ALL ENTRIES IN itab WHERE
BSEG~BELNR = itab~BELNR 這樣的的方法取得符合itab里所有條件的BSEG數據.注意使用FOR ALL
ENTRIES要先CHECK作為條件的內表itab是否為空,還有作為WHERE的條件在這個內表裡面是否會有空
值存在,否則無效.
6, 注意使用CORRESPONDING FIELDS OF 和 MOVE-CORRESPONDING 時候會進行欄位比較, 帶來CPU的
開銷大.
7, 避免過得而頻繁的數據類型轉換,比如N轉換為C,但是從N轉換成STRING卻是很快的,因為操作
STRING比CHAR類型少了比較長度的時間.
8, 使用二級索引提高DDIC的讀寫效率, 可以根據你的需要在SE11裡面創建INDEX, 並讓你程序里的
SQL查詢語句里WHERE條件的順序與你的索引順序一致.
9, 二分查找比線性查找要高效,READ TABLE的之前使用SORT TABLE BY XXX 某個表關鍵欄位進行排
序, 然後使用READ TABLE WITH KEY XXX = 'XXX' BINARY SEARCH. 這個就是所謂的二分
查找法的應用.
10, 避免使用SQL語句動態查詢條件,動態表名和動態欄位名, 必要時候用宏或者子程序模塊代替.
11, 對於同一功能的函數和方法, 調用METHOD比調用FUNCTION要快.
12, SORTED TABLE可以使用二分查找法取得節點, 其時間復雜度是O(log N),但是插入節點會慢,因
為要移動很多節點. 而HASHED TABLE則是基於哈希演算法的,其高效主要體現在把數據的存儲和查找時
間大大降低,幾乎可以看成是常數時間O(1),而代價是消耗比較多的內存,然而在硬體技術越來越
發達的今天,用空間換時間的做法在某種意義上是值得的。但是使用哈希表必須注意鍵值的唯一性
!如果鍵值會出現重復的話, 不能使用哈希表,只能用排序表和標准表。
13, 使用APPEND LINES(或者INSERT LINES) OF ITAB1 TO ITAB2 比 LOOP AT ITAB1 INTO WA.
APPEND(INSERT) WA TO ITAB2. ENDLOOP. 要高效.
14, 使用效率比較高的COLLECT, DELETE ADJACENT DUPLICATES FROM語句。
15, 使用高效的CONTEXT SQL語句.如以下代碼2比代碼1要快10倍以上!
代碼1:
SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.
SELECT SINGLE AIRPFROM AIRPTO INTO (AP1, AP2)
FROM SPFLI
WHERE CARRID = SBOOK_WA-CARRID
AND CONNID = SBOOK_WA-CONNID.
SELECT SINGLE NAME INTO NAME1 FROM SAIRPORT
WHERE ID = AP1.
SELECT SINGLE NAME INTO NAME2 FROM SAIRPORT
WHERE ID = AP2.
ENDSELECT.

代碼2:
SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.
SUPPLY CARRID = SBOOK_WA-CARRID
CONNID = SBOOK_WA-CONNID
TO CONTEXT TRAV1.
DEMAND AIRPFROM = AP1
AIRPTO = AP2
NAME_FROM = NAME1
NAME_TO = NAME2
FROM CONTEXT TRAV1.
ENDSELECT.

最後是注意內存的使用,以下是內存優化方面的例子:
1, 雖然ABAP擁有垃圾處理的機制, 但是這個是在程序運行完成後實現的. 所以我們盡量把無用的變
量,內表,對象都釋放掉;
2, 盡量減少無用的靜態定義的變數,內表和對象, 因為靜態定義的對象會在編譯開始就佔有內存空
間;
3, 盡量減少網路的傳輸負載, 比如在設計RFC遠程調用傳回的內表數據要盡量精簡, 數據量越大,對
CPU和內存需求越多;
4, 內存使用緊張的情況下, 使用FREE語句, 以及SQL語句的PACKAGE SIZE n 選項.
SELECT vbeln erdat
FROM vbak
INTO TABLE li_vbak PACKAGE SIZE 50.

『叄』 ABAP程序 激活 有什麼用

沒有激活而直接運行的程序當前修改無效。ABAP程序一般會保存一個副本,當你激活一個程序的時候當前程序就覆蓋之前的副本成為最終副本,也就是說,如果你改了一個程序但沒有激活,那麼你運行的時候其實是運行你修改之前的程序,你此次的修改還沒有發現效果,直到你激活為止。ABAP程序的這個功能主要是確保程序運行和開發同時進行而不沖突。

『肆』 ABAP程序間傳遞數據的幾種方法

1、SAP內存 memory / abap memory
2、submit時,屏幕傳參
3、自定義緩存類資料庫。原理類似 memory

『伍』 sap abap模塊必須要有程序背景才能學嗎,學出來待遇好嗎

sap abap沒有程序背景也能學,sap行業待遇普遍都挺高。

ABAP作為一種面向特定應用的第四代編程語言.最早在20世紀80年代開發。它原本是作為一種報表語言應用在SAP R/2上,這是一個幫助大型公司在大型機上建立原材料管理和財務會計管理商務應用的平台。SAP ABAP開發是一種高級企業應用編程語言,英文全稱為AdvancedBusiness Application Programming,還可以實現和其他編程語言的合成,如VB,JAVA,C/C++等。51sap

雖然SAP最早於1992年就發布了R/3,但ABAP仍可以用於為R/3系統編寫程序。在20世紀90年代,隨著計算機硬體的發展,越來越多的SAP的應用軟體和系統都用ABAP來實現。一直到2001年,幾乎所有的基本功能都是由ABAP編程實現的。在1999年,SAP在發布R/3 4.6版的同時也發布了一個對ABAP的面向對象擴展,叫做ABAP Objects。

SAP最新的開發平台NetWeaver同時支持ABAP和Java。

關於sapabap的運行環境

所有的ABAP程序都駐留在SAP資料庫里。他們不像Java或者C++程序那樣存儲在一個單獨的外部文件里,在資料庫里所有的ABAP代碼都以兩種形式存在:可以用ABAP workbench查看和編輯的源代碼和由ABAP運行環境載入和解釋的「編譯」代碼(技術上更精確地說是「產生」代碼)。當一段ABAP源代碼第一次被調用時會隱含的進行代碼產生。如果稍後源代碼改變了或者程序訪問的對象改變了(比如資料庫的表添加了新的欄位),產生代碼就會自動重新產生。51sap

ABAP程序在運行時系統(SAP核心的一部分)的控制下運行在SAP應用伺服器里。運行時系統負責處理ABAP語句,控制顯示的邏輯序列和響應事件(比如,用戶按一下屏幕上的一個按鈕)。ABAP運行時系統的一個關鍵組件是資料庫介面,它把ABAP的資料庫無關語句(「開放SQL」)變成底層資料庫管理系統可以理解的語句(「本地SQL」)。資料庫介面處理ABAP程序和關系資料庫之間所有的通信;它也有一些其他的作用,比如把經常訪問的數據緩存到應用伺服器本地的存儲器里。51sap

『陸』 abap的主要工作原理是什麼

解釋型語言,但被SAP稱為所謂的「第四代」語言。支持OOP。語言功能一般,運行速度較慢,並 且只能用於SAP平台。通過調用SAP的內核模塊(C或C++寫成的)來完成所請求的功能。 SAP大部分大部分業務邏輯都是用ABAP來表達的。也是SAP的二次開發工具。

『柒』 abap 冒泡法

如果要由大到小排列則在比較時前一個數比後一個數小就進行對調,方法相反。

冒泡法的基本思想就是:在待排序的數據中,先找到最小(大)的數據將它放到最前面,再從第二個數據開始,找到第二小(大)的數據將它放到第二個位置,以此類推,直到只剩下最後一個數為止。這種排序方法在排序的過程中,是小的數就如氣泡一樣逐層上浮,而使大的數逐個下沉,於是就形象地取名為冒泡排序,又名起泡排序。

『捌』 MS/SAP是什麼,原理是什麼!

它們都是中大型企業的企業運營和管理信息系統,具有國際化應用支持,個性化自定義配置的友好操作界面、系統模塊間的無縫集成。SAP 就是資深的ERP產品代表,它一度成為ERP的代名詞。MS、SAP這兩套在當今ERP市場上叱垞風雲。
系統架構

SAP R/3是三層結構(在3.1以後的版本中,通過增加Internet/Intranet層,R/3的結構將變成多級結構)產品清楚地分為表達服務,應用服務和資料庫服務。SAP R/3以一種實用的方式支持全部Gartner Group Client/Server模式的5層結構。
SAP開發了ABAP/4工作台(ABAP/4 Development Workbench)作為實施client/server方案的完整的CASE環境和工作流工具包,加速並從一定程度上使實施過程自動化,保證了連續有效的業務再造,這已由R/3應用程序的成功開發史所證明。ABAP/4工作台集成數據,業務過程,組織結構和工作流部件,並基於一個主動地與應用連接的集成的庫上,包括了動態對話程序編輯(Dynamic Program),屏幕和菜單繪制,原代碼生成器,互動式糾錯,性能優化,計算機輔助測試(CATT),ABAP/4倉庫,數據字典,開發組織等。
R/3支持主流的資料庫軟體,如Informix,Oracle,ADABASD,DB2和MS SQL Server.
R/3系統可運行於所有主流的UNIX系統,同時也支持Windows NT(Microsoft)和OS/400(IBM)操作系統。
Oracle資料庫下,用戶可以通過SAPGUI進行聯機監控,能夠獲取多項重要數據,如Oracle的Data Buffer,Shared Pool,Redo Log Buffer,Calls,Table Scans/Table Fetch,Sorts等。此外,用戶還能觀察I/O請求,V$值等。
SAP R/3系統對數據的傳送(message)和分發復制(replication)在各個層次上都提供了可靠的保證。R/3系統使用TCP/IP協議作為主要的網路通信協議。TCP/IP協議不但是事實上的工業標准,而且其內置的差錯檢測和糾正機制提供了可靠的網路傳輸。在前端客戶程序和後台應用伺服器之間傳送的數據都經過加密(Encryption)和壓碼校驗(Authentication)處理,防止消息內容被篡改。
SAP充分考慮到客戶實施ERP項目時要求的多樣性及實施過程的復雜性,按照軟體工程的觀點,提供了先進的軟體開發環境(ASDE)和實用的項目管理、實施工具。SAPR/3系統中的變更(changes)分為以下五類:定製(customizing)、功能強化(Enhancement)、客戶的應用程序開發(customer development) 、對SAP提供的標准應用程序的修改(modification)
MS AX現在是標準的三層結構,應用伺服器處理商業邏輯層的一切事務,客戶端則是標準的Windows程序,AOS(Axapta object server)集群技術可以很有效的進行負載均衡和災難恢復。

同時利用微軟的Share Point的技術,AX也是支持完全的多層架構和WEB訪問,可以通過多種媒體進行訪問。
MS AX的開發平台叫MorphX,是一個完全智能化的開發平台,可以完成通過滑鼠的拖拽完成絕大多的窗體和報表的開發。如果需要進一步開發,就有需要AX的開發語言X++,X++是一個完全面向對象的、高效的商業軟體開發語言,有著完整的編譯器和調試器,可以快速開發所有的商業代碼。而且尤其重要的是現有的AX的所有功能也是X++開發出來的,完全公開代碼,用戶可以查看和編輯所有的代碼.
MS AX同時支持的主流資料庫有Oracle和MS SQL Server,保護最新的Oracle 10G和MS SQL Server 2005。同時利用2005的最新的很多特性。

由於是微軟的產品,AX目前支持Windows操作系統。

AX中隊資料庫管理和支持是比較豐富,可以及時管理資料庫連接,支持資料庫的所有DDL操作,可以圖形化管理資料庫德表、欄位和Index等.

『玖』 ABAP 中 open sql與 native sql的流程區別是什麼

open sql 是靜態的,所有的取數必須在編譯前確認,二native sql是動態的,只有到runtime時才能知道他們想做什麼,其實原理就是拼SQL

閱讀全文

與abap編譯器原理相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:578
python員工信息登記表 瀏覽:376
高中美術pdf 瀏覽:160
java實現排列 瀏覽:512
javavector的用法 瀏覽:981
osi實現加密的三層 瀏覽:231
大眾寶來原廠中控如何安裝app 瀏覽:913
linux內核根文件系統 瀏覽:242
3d的命令面板不見了 瀏覽:525
武漢理工大學伺服器ip地址 瀏覽:148
亞馬遜雲伺服器登錄 瀏覽:524
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:929
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:250
哈夫曼編碼數據壓縮 瀏覽:425
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348