百科解釋
ABAP (高級(jí)商務(wù)應(yīng)用編程)是一種高級(jí)編程語(yǔ)言,由德國(guó)軟件公司SAP開(kāi)發(fā)。目前,和最近引入的Java一起,ABAP主要用作SAP的web應(yīng)用服務(wù)器編程。這個(gè)服務(wù)器軟件是SAP NetWeaver平臺(tái)的一部分,這個(gè)平臺(tái)主要用來(lái)開(kāi)發(fā)商務(wù)應(yīng)用。ABAP的語(yǔ)法和COBOL有些像。
ABAP作為一種面向特定應(yīng)用的第四代編程語(yǔ)言最早在20世紀(jì)80年代開(kāi)發(fā)。它原本是作為一種報(bào)表語(yǔ)言應(yīng)用在SAP R/2上,這是一個(gè)幫助大型公司在大型機(jī)上建立原材料管理和財(cái)務(wù)會(huì)計(jì)管理商務(wù)應(yīng)用的平臺(tái)。ABAP本來(lái)也是德語(yǔ)Allgemeiner Berichtsaufbereitungsprozessor的縮寫(xiě),意思是“通用報(bào)表預(yù)處理器”。ABAP第一次引入了“邏輯數(shù)據(jù)庫(kù)”的概念,它在基本的數(shù)據(jù)庫(kù)層提供了更高級(jí)的抽象。
ABAP編程語(yǔ)言最初被SAP的開(kāi)發(fā)者用于開(kāi)發(fā)SAP R/3平臺(tái)。但它也被設(shè)計(jì)讓SAP的客戶用于增強(qiáng)SAP的軟件應(yīng)用–客戶可以用ABAP編程開(kāi)發(fā)自定義的報(bào)表和界面。這個(gè)編程語(yǔ)言對(duì)于程序員來(lái)說(shuō)很容易學(xué)習(xí)但并不是一個(gè)非程序設(shè)計(jì)人員可以直接使用的工具。編寫(xiě)ABAP程序需要良好的編程技巧和關(guān)系數(shù)據(jù)庫(kù)方面的知識(shí),如果知道面向?qū)ο笤O(shè)計(jì)的概念更好。
雖然SAP最早于1992年就發(fā)布了R/3,但ABAP現(xiàn)在仍可以用于為R/3系統(tǒng)編寫(xiě)程序。在20世紀(jì)90年代,隨著計(jì)算機(jī)硬件的發(fā)展,越來(lái)越多的SAP的應(yīng)用軟件和系統(tǒng)都用ABAP來(lái)實(shí)現(xiàn)。一直到2001年,幾乎所有的基本功能都是由ABAP編程實(shí)現(xiàn)的。在1999年,SAP在發(fā)布R/3 4.6版的同時(shí)也發(fā)布了一個(gè)對(duì)ABAP的面向?qū)ο髷U(kuò)展,叫做ABAP Objects。
SAP最新的開(kāi)發(fā)平臺(tái)NetWeaver同時(shí)支持ABAP和Java。
ABAP程序運(yùn)行在哪里?
所有的ABAP程序都駐留在SAP數(shù)據(jù)庫(kù)里。他們不像Java或者C++程序那樣存儲(chǔ)在一個(gè)單獨(dú)的外部文件里,在數(shù)據(jù)庫(kù)里所有的ABAP代碼都以兩種形式存在:可以用ABAP workbench查看和編輯的源代碼和由ABAP運(yùn)行環(huán)境載入和解釋的“編譯”代碼(技術(shù)上更精確的說(shuō)是“產(chǎn)生”代碼)。當(dāng)一段ABAP源代碼第一次被調(diào)用時(shí)會(huì)隱含的進(jìn)行代碼產(chǎn)生。如果稍后源代碼改變了或者程序訪問(wèn)的對(duì)象改變了(比如數(shù)據(jù)庫(kù)的表添加了新的字段),產(chǎn)生代碼就會(huì)自動(dòng)重新產(chǎn)生。
ABAP程序在運(yùn)行時(shí)系統(tǒng)(SAP核心的一部分)的控制下運(yùn)行在SAP應(yīng)用服務(wù)器里.運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)處理ABAP語(yǔ)句,控制顯示的邏輯序列和響應(yīng)事件(比如,用戶按一下屏幕上的一個(gè)按鈕)。ABAP運(yùn)行時(shí)系統(tǒng)的一個(gè)關(guān)鍵組件是數(shù)據(jù)庫(kù)接口,它把ABAP的數(shù)據(jù)庫(kù)無(wú)關(guān)語(yǔ)句(“開(kāi)放SQL”)變成底層數(shù)據(jù)庫(kù)管理系統(tǒng)可以理解的語(yǔ)句(“本地SQL”)。數(shù)據(jù)庫(kù)接口處理ABAP程序和關(guān)系數(shù)據(jù)庫(kù)之間所有的通信;它也有一些其他的作用,比如把經(jīng)常訪問(wèn)的數(shù)據(jù)緩存到應(yīng)用服務(wù)器本地的存儲(chǔ)器里。
SAP 系統(tǒng)和風(fēng)景帶
所有的SAP數(shù)據(jù)和軟件都存在/運(yùn)行于SAP系統(tǒng)的環(huán)境中。這個(gè)系統(tǒng)包括一個(gè)中心關(guān)系數(shù)據(jù)庫(kù)和一個(gè)或多個(gè)訪問(wèn)該數(shù)據(jù)庫(kù)里的數(shù)據(jù)和程序的應(yīng)用服務(wù)器(“實(shí)例”)。一個(gè)SAP系統(tǒng)至少包括一個(gè)實(shí)例,但可以更多,主要看大小和性能上的需求。在一個(gè)多實(shí)例系統(tǒng)中,負(fù)載平衡機(jī)制來(lái)保證負(fù)載比較平均的分?jǐn)偟礁鱾(gè)可用的應(yīng)用服務(wù)器上。
典型安裝的Web應(yīng)用服務(wù)器 (風(fēng)景帶)包括三個(gè)系統(tǒng):一個(gè)用于開(kāi)發(fā),一個(gè)用于測(cè)試和質(zhì)量保證,一個(gè)用于生產(chǎn)。這個(gè)風(fēng)景帶可以包含更多的系統(tǒng),比如一個(gè)單獨(dú)用于單元測(cè)試和產(chǎn)前測(cè)試的系統(tǒng),或者也可以不完全包含這三個(gè)系統(tǒng),比如只有開(kāi)發(fā)和生產(chǎn),沒(méi)有單獨(dú)的質(zhì)量保證系統(tǒng); 但三個(gè)是最常見(jiàn)的。 ABAP程序的創(chuàng)建和首次運(yùn)行都在開(kāi)發(fā)系統(tǒng)里。然后被分發(fā)到風(fēng)景帶的其他系統(tǒng)里。這些都是在變化和傳輸系統(tǒng)(CTS)的控制下進(jìn)行的。CTS是一個(gè)負(fù)責(zé)并發(fā)控制(比如防止兩個(gè)開(kāi)發(fā)人員同時(shí)修改同一段代碼),版本管理和在質(zhì)量保證和產(chǎn)品系統(tǒng)上部署程序的系統(tǒng)。
Web應(yīng)用服務(wù)器有三層組成:數(shù)據(jù)庫(kù)層,應(yīng)用層和表現(xiàn)層。這些層可以在同一臺(tái)或不同的物理機(jī)器上運(yùn)行。數(shù)據(jù)庫(kù)層包括關(guān)系數(shù)據(jù)庫(kù)及相關(guān)軟件。應(yīng)用層包括系統(tǒng)的實(shí)例。所有應(yīng)用相關(guān)的過(guò)程,包括業(yè)務(wù)事務(wù)和ABAP開(kāi)發(fā),都運(yùn)行在應(yīng)用層。表現(xiàn)層處理和系統(tǒng)的用戶之間的交互。對(duì)ABAP應(yīng)用服務(wù)器的在線訪問(wèn)可以通過(guò)專用圖形接口SAPGUI或者瀏覽器進(jìn)行。
ABAP有兩種不同類型的程序:
報(bào)表程序
報(bào)表程序遵循一個(gè)相對(duì)簡(jiǎn)單的編程模型,用戶可選的輸入一系列參數(shù)(比如,在一個(gè)數(shù)據(jù)子集上的選擇),然后程序根據(jù)輸入的參數(shù)以一個(gè)交互式列表的形式產(chǎn)生一張報(bào)表。報(bào)表程序的輸出之所以是交互式的是因?yàn)樗皇且粋(gè)被動(dòng)的顯示;它允許用戶使用ABAP語(yǔ)言通過(guò)深入挖掘功能以獲得某個(gè)數(shù)據(jù)更細(xì)節(jié)的視圖,或者通過(guò)菜單命令觸發(fā)更深入的處理,比如按不同的方式排序數(shù)據(jù)或者按某種選擇條件過(guò)濾數(shù)據(jù)。這種表現(xiàn)報(bào)表的方法有很大的優(yōu)勢(shì),特別是對(duì)于那些需要處理大量信息但又要以很靈活的方式來(lái)檢查這些信息的用戶,這樣他們就不會(huì)再被限制到一種固定的顯示形式或者大小上無(wú)法管理的列表形式的報(bào)表中了。這種方便的開(kāi)發(fā)交互式報(bào)表的方式是ABAP語(yǔ)言的一大重要閃光點(diǎn)。
“報(bào)表”這個(gè)詞有時(shí)會(huì)給人一種誤解,其實(shí)創(chuàng)建數(shù)據(jù)可以在底層數(shù)據(jù)庫(kù)修改而不僅僅是只讀的報(bào)表程序是完全可以的。
在線程序
在線程序 (也叫模塊池)不產(chǎn)生列表。這些程序使用一系列的屏幕來(lái)定義更復(fù)雜的用戶交互模式。術(shù)語(yǔ)“屏幕”是指用戶看到的實(shí)際的物理圖像。每個(gè)屏幕還有一個(gè)“流邏輯”;這是指由屏幕觸發(fā)的ABAP代碼,比如初始化屏幕,響應(yīng)用戶請(qǐng)求的應(yīng)答和控制模塊池的屏幕之間的序列的邏輯。每個(gè)屏幕都有自己的流邏輯,每個(gè)流邏輯都分為“PBO” (輸出前處理)和“PAI” (輸入后處理)部分。在SAP的文檔中,術(shù)語(yǔ)“dynpro” (動(dòng)態(tài)程序)用來(lái)表示這種屏幕和流邏輯的結(jié)合。
在線程序并不是通過(guò)名字調(diào)用的,而是和一段事務(wù)代碼聯(lián)系在一起。用戶可以通過(guò)自定義,角色依賴,事務(wù)菜單來(lái)觸發(fā)它們。
除了報(bào)表和在線程序外,以類庫(kù),功能庫(kù)和子程序池的形式開(kāi)發(fā)共享代碼段也是可以的。
ABAP Workbench有幾個(gè)不同的工具用于編輯容器對(duì)象。這些工具可以為你提供涵蓋整個(gè)軟件開(kāi)發(fā)周期各階段的輔助。 創(chuàng)建和編輯容器對(duì)象的最重要的工具有:
ABAP Editer:編寫(xiě)程序代碼
ABAP Dictionary:處理數(shù)據(jù)庫(kù)表定義,檢索全局類型
Menu Painter:設(shè)計(jì)用戶界面(包括菜單欄,標(biāo)準(zhǔn)工具欄,應(yīng)用欄,配置功能鍵)
Screen Painter:為用戶對(duì)話框設(shè)計(jì)屏幕(動(dòng)態(tài)程序)
Function Builder:顯示和處理功能模塊
Class Builder:顯示和處理ABAP對(duì)象類