ABAP(高級商務應用編程)是一種高級語言,由德國軟件公司SAP開發。目前,和最近引入的Java一起,ABAP主要用作SAP的編程。這個伺服器軟件是SAP NetWeaver平台的一部分,這個平台主要用來開發商務應用。ABAP支持有面向過程和面向對象。

歷史

ABAP作為一種面向特定應用的第四代程式語言最早在20世紀80年代開發。它原本是作為一種報表語言應用在SAP R/2上,這是一個幫助大型公司在大型機上建立原材料管理和財務會計管理商務應用的平台。ABAP本來也是德語Allgemeiner Berichtsaufbereitungsprozessor的縮寫,意思是「通用報表預處理器」。ABAP第一次引入了「邏輯數據庫」的概念,它在基本的數據庫層提供了更高級的抽象。

ABAP程式語言最初被SAP的開發者用於開發SAP R/3平台。但它也被設計讓SAP的客戶用於增強SAP的軟件應用–客戶可以用ABAP編程開發自定義的報表和界面。這個程式語言對於程式設計師來說很容易學習但並不是一個非程序設計人員可以直接使用的工具。編寫ABAP程序需要良好的編程技巧和關係數據庫方面的知識,如果知道面向對象設計的概念更好。

雖然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

實現

ABAP程序運行在哪裏?

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

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

SAP系統和部署方案

所有的SAP數據和軟件都存在/運行於SAP系統的環境中。這個系統包括一個中心關係數據庫和一個或多個訪問該數據庫里的數據和程序的應用伺服器(「實例」)。一個SAP系統至少包括一個實例,但可以更多,主要看大小和性能上的需求。在一個多實例系統中,負載平衡機制來保證負載比較平均的分攤到各個可用的應用伺服器上。
典型安裝的Web應用伺服器部署方案)包括三個系統:一個用於開發,一個用於測試和質量保證,一個用於生產。這個部署方案可以包含更多的系統,比如一個單獨用於單元測試和產前測試的系統,或者也可以不完全包含這三個系統,比如只有開發和生產,沒有單獨的質量保證系統;但三個是最常見的。ABAP程序的創建和首次運行都在開發系統裏。然後被分發到部署方案的其他系統裏。這些都是在變化和傳輸系統(CTS)的控制下進行的。CTS是一個負責並發控制(比如防止兩個開發人員同時修改同一段代碼),版本管理和在質量保證和產品系統上部署程序的系統。

Web應用伺服器有三層組成:數據庫層,應用層和表現層。這些層可以在同一台或不同的物理機器上運行。數據庫層包括關係數據庫及相關軟件。應用層包括系統的實例。所有應用相關的過程,包括業務事務和ABAP開發,都運行在應用層。表現層處理和系統的用戶之間的交互。對ABAP應用伺服器的在線訪問可以通過專用圖形接口SAPGUI或者瀏覽器進行。

ABAP程序的類型

ABAP有兩種不同類型的程序:

報表程序

報表程序遵循一個相對簡單的編程模型,用戶可選的輸入一系列參數(比如,在一個數據子集上的選擇),然後程序根據輸入的參數以一個交互式列表的形式產生一張報表。報表程序的輸出之所以是交互式的是因為它不是一個被動的顯示;它允許用戶使用ABAP語言通過深入挖掘功能以獲得某個數據更細節的視圖,或者通過菜單命令觸發更深入的處理,比如按不同的方式排序數據或者按某種選擇條件過濾數據。這種表現報表的方法有很大的優勢,特別是對於那些需要處理大量信息但又要以很靈活的方式來檢查這些信息的用戶,這樣他們就不會再被限制到一種固定的顯示形式或者大小上無法管理的列表形式的報表中了。這種方便的開發交互式報表的方式是ABAP語言的一大重要閃光點。
「報表」這個詞有時會給人一種誤解,其實創建數據可以在底層數據庫修改而不僅僅是只讀的報表程序是完全可以的。

在線程序

在線程序(也叫模塊池)不產生列表。這些程序使用一系列的屏幕來定義更複雜的用戶交互模式。術語「屏幕」是指用戶看到的實際的物理圖像。每個屏幕還有一個「流邏輯」;這是指由屏幕觸發的ABAP代碼,比如初始化屏幕,響應用戶請求的應答和控制模塊池的屏幕之間的序列的邏輯。每個屏幕都有自己的流邏輯,每個流邏輯都分為「PBO」(輸出前處理)和「PAI」(輸入後處理)部分。在SAP的文檔中,術語「dynpro」(動態程序)用來表示這種屏幕和流邏輯的結合。
在線程序並不是通過名字調用的,而是和一段事務代碼聯繫在一起。用戶可以通過自定義,角色依賴,事務菜單來觸發它們。

除了報表和在線程序外,以類庫,功能庫和子程序池的形式開發共享代碼段也是可以的。

ABAP Workbench

ABAP Workbench有幾個不同的工具用於編輯容器對象。這些工具可以為你提供涵蓋整個軟件開發周期各階段的輔助。創建和編輯容器對象的最重要的工具有:
ABAP Editer:編寫程序代碼
ABAP Dictionary:處理數據庫表定義,檢索全局類型
Menu Painter:設計用戶界面(包括菜單欄,標準工具欄,應用欄,配置功能鍵)
Screen Painter:為用戶對話框設計屏幕(動態程序)
Function Builder:顯示和處理功能模塊
Class Builder:顯示和處理ABAP對象類

參看

外部連結