ABAP開(kāi)發(fā)服務(wù)
迪森科技SAP系統(tǒng)開(kāi)發(fā)團(tuán)隊(duì),擁有豐富的SAP開(kāi)發(fā)經(jīng)驗(yàn),為企業(yè)客戶(hù)提供個(gè)性化的定制方案。我們?cè)诒姸囗?xiàng)目中積累了一系列開(kāi)發(fā)資產(chǎn),能夠快速匹配客戶(hù)需求。
我們的專(zhuān)業(yè)團(tuán)隊(duì)對(duì)客戶(hù)的個(gè)性化需求進(jìn)行充分評(píng)估,并給出最佳的開(kāi)發(fā)方案建議。開(kāi)發(fā)方案同時(shí)會(huì)充分考慮系統(tǒng)地性能,確保各類(lèi)定制化開(kāi)發(fā)的性能最優(yōu),并提供完整的開(kāi)發(fā)交付文檔。
ABAP 簡(jiǎn)介
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ǔ)AllgemeinerBerichtsaufbereitungsprozessor的縮寫(xiě),意思是“通用報(bào)表預(yù)處理器”。ABAP第一次引入了“邏輯數(shù)據(jù)庫(kù)”的概念,它在基本的數(shù)據(jù)庫(kù)層提供了更高級(jí)的抽象。
雖然SAP最早于1992年就發(fā)布了R/3,但ABAP仍可以用于為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ū)ο?/span>擴(kuò)展,叫做ABAP Objects;SAP最新的開(kāi)發(fā)平臺(tái)NetWeaver同時(shí)支持ABAP和Java。
運(yùn)行環(huán)境
所有的ABAP程序都駐留在SAP數(shù)據(jù)庫(kù)里。他們不像Java或者C++程序那樣存儲(chǔ)在一個(gè)單獨(dú)的外部文件里,在數(shù)據(jù)庫(kù)里所有的ABAP代碼都以?xún)煞N形式存在:可以用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)事件(比如,用戶(hù)按一下屏幕上的一個(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ǔ)器里。
ABAP類(lèi)型
模塊池
這些程序使用一系列的屏幕來(lái)定義更復(fù)雜的用戶(hù)交互模式。術(shù)語(yǔ)“屏幕”是指用戶(hù)看到的實(shí)際的物理圖像。每個(gè)屏幕還有一個(gè)“流邏輯”;這是指由屏幕觸發(fā)的ABAP代碼,比如初始化屏幕,響應(yīng)用戶(hù)請(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)系在一起。用戶(hù)可以通過(guò)自定義,角色依賴(lài),事務(wù)菜單來(lái)觸發(fā)它們。除了報(bào)表和在線程序外,以類(lèi)庫(kù),功能庫(kù)和子程序池的形式開(kāi)發(fā)共享代碼段也是可以的。
開(kāi)發(fā)工具
ABAP Workbench有幾個(gè)不同的工具用于編輯容器對(duì)象。這些工具可以為你提供涵蓋整個(gè)軟件開(kāi)發(fā)周期各階段的輔助。 創(chuàng)建和編輯容器對(duì)象的最重要的工具有:
ABAP Editer:編寫(xiě)程序代碼
ABAP Dictionary:處理數(shù)據(jù)庫(kù)表定義,檢索全局類(lèi)型
Menu Painter:設(shè)計(jì)用戶(hù)界面(包括菜單欄,標(biāo)準(zhǔn)工具欄,應(yīng)用欄,配置功能鍵)
Screen Painter:為用戶(hù)對(duì)話框設(shè)計(jì)屏幕(動(dòng)態(tài)程序)
Function Builder:顯示和處理功能模塊
Class Builder:顯示和處理ABAP對(duì)象類(lèi)
語(yǔ)法特點(diǎn)
由各自獨(dú)立的語(yǔ)句構(gòu)成。每個(gè)語(yǔ)句的第一個(gè)單詞必須是ABAP關(guān)鍵字。單詞之間至少要用一個(gè)空格分隔。每個(gè)語(yǔ)句結(jié)束必須要用句號(hào)。一個(gè)語(yǔ)句可以跨多行,只要不遇到句號(hào),就認(rèn)為是一個(gè)延續(xù) 的語(yǔ)句。
可以把多個(gè)語(yǔ)句放在一行。ABAP不區(qū)分大小寫(xiě),關(guān)鍵字和用戶(hù)操作數(shù)都一樣,為了便于閱讀,一般把關(guān)鍵字大寫(xiě),而操作數(shù)小寫(xiě)。如果連續(xù)多行的第一個(gè)關(guān)鍵字相同,可以使用鏈語(yǔ)句方式減少輸入
™data: id type I.
™data: name type c.
™可寫(xiě)為:
™data: id type I ,
™ name type c.
注釋:
注釋行由第一列的星號(hào)(*)開(kāi)頭,并且必須寫(xiě)在第一 列,前面不能有空格。
在行末的注釋用雙引號(hào)(”)作為前導(dǎo)。
™data: id type i. “ 定義一個(gè)對(duì)象num數(shù)據(jù)類(lèi)型為I
技術(shù)架構(gòu)
SAP的系統(tǒng)架構(gòu)設(shè)計(jì)無(wú)疑是值得學(xué)習(xí)的,以下是我從網(wǎng)絡(luò)上收集的一些相關(guān)信息,也可以作為架構(gòu)設(shè)計(jì)的參考。
1、實(shí)施、開(kāi)發(fā)過(guò)程和維護(hù)過(guò)程管理細(xì)致,角色劃分清晰,即使在項(xiàng)目的開(kāi)發(fā)過(guò)程中,仍然要配備BASIS人員,并對(duì)系統(tǒng)進(jìn)行運(yùn)維工作管理;
2、三種環(huán)境:開(kāi)發(fā)、QA、生產(chǎn),在三種環(huán)境下的整合開(kāi)發(fā)過(guò)程;
3、注重權(quán)限、審計(jì):所有的操作都和權(quán)限綁定,并對(duì)每項(xiàng)業(yè)務(wù)操作都進(jìn)行日志記錄,數(shù)據(jù)庫(kù)記錄邏輯刪除,這對(duì)系統(tǒng)的體系結(jié)構(gòu)和數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范提出相應(yīng)的要求,同時(shí)也對(duì)系統(tǒng)的實(shí)施和運(yùn)維工作提出了要求;
4、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器的層次定義:和J2EE體系架構(gòu)不同,一方面保持應(yīng)用的獨(dú)立性,另一方面保證數(shù)據(jù)庫(kù)服務(wù)器的穩(wěn)定;
5、系統(tǒng)的穩(wěn)定性壓倒一切:即使?fàn)奚阅?,也要確保系統(tǒng)的穩(wěn)定;
6、模塊的質(zhì)量保證:對(duì)測(cè)試的組織,完整的測(cè)試流程貫穿項(xiàng)目開(kāi)發(fā)實(shí)施的全過(guò)程;
7、可維護(hù)性的表現(xiàn):一方面是基于運(yùn)維的,對(duì)于系統(tǒng)軟硬件各個(gè)部分的監(jiān)控;另一方面是系統(tǒng)架構(gòu)上,編程模式上能支撐二次開(kāi)發(fā);
8、可擴(kuò)展性的表現(xiàn):系統(tǒng)架構(gòu)上和物理部署上的兩種體現(xiàn);
9、可用性:界面操作標(biāo)準(zhǔn)化,有完善的文檔制作和交互式教學(xué)課件制作工具;
10、所有的一切處理操作都是事務(wù)代碼;操作可跟蹤、可追溯;
11、符合業(yè)務(wù)特點(diǎn)的數(shù)據(jù)庫(kù)表類(lèi)型定義,即將數(shù)據(jù)庫(kù)開(kāi)發(fā)的成功實(shí)踐固化在開(kāi)發(fā)環(huán)境中。
我們的專(zhuān)業(yè)團(tuán)隊(duì)對(duì)客戶(hù)的個(gè)性化需求進(jìn)行充分評(píng)估,并給出最佳的開(kāi)發(fā)方案建議。開(kāi)發(fā)方案同時(shí)會(huì)充分考慮系統(tǒng)地性能,確保各類(lèi)定制化開(kāi)發(fā)的性能最優(yōu),并提供完整的開(kāi)發(fā)交付文檔。
ABAP 簡(jiǎn)介
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ǔ)AllgemeinerBerichtsaufbereitungsprozessor的縮寫(xiě),意思是“通用報(bào)表預(yù)處理器”。ABAP第一次引入了“邏輯數(shù)據(jù)庫(kù)”的概念,它在基本的數(shù)據(jù)庫(kù)層提供了更高級(jí)的抽象。
雖然SAP最早于1992年就發(fā)布了R/3,但ABAP仍可以用于為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ū)ο?/span>擴(kuò)展,叫做ABAP Objects;SAP最新的開(kāi)發(fā)平臺(tái)NetWeaver同時(shí)支持ABAP和Java。
運(yùn)行環(huán)境
所有的ABAP程序都駐留在SAP數(shù)據(jù)庫(kù)里。他們不像Java或者C++程序那樣存儲(chǔ)在一個(gè)單獨(dú)的外部文件里,在數(shù)據(jù)庫(kù)里所有的ABAP代碼都以?xún)煞N形式存在:可以用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)事件(比如,用戶(hù)按一下屏幕上的一個(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ǔ)器里。
ABAP類(lèi)型
模塊池
這些程序使用一系列的屏幕來(lái)定義更復(fù)雜的用戶(hù)交互模式。術(shù)語(yǔ)“屏幕”是指用戶(hù)看到的實(shí)際的物理圖像。每個(gè)屏幕還有一個(gè)“流邏輯”;這是指由屏幕觸發(fā)的ABAP代碼,比如初始化屏幕,響應(yīng)用戶(hù)請(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)系在一起。用戶(hù)可以通過(guò)自定義,角色依賴(lài),事務(wù)菜單來(lái)觸發(fā)它們。除了報(bào)表和在線程序外,以類(lèi)庫(kù),功能庫(kù)和子程序池的形式開(kāi)發(fā)共享代碼段也是可以的。
報(bào)表程序
報(bào)表程序遵循一個(gè)相對(duì)簡(jiǎn)單的編程模型,用戶(hù)可選的輸入一系列參數(shù)(比如,在一個(gè)數(shù)據(jù)子集上的選擇),然后程序根據(jù)輸入的參數(shù)以一個(gè)交互式列表的形式產(chǎn)生一張報(bào)表。報(bào)表程序的輸出之所以是交互式的是因?yàn)樗皇且粋€(gè)被動(dòng)的顯示;它允許用戶(hù)使用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)檢查這些信息的用戶(hù),這樣他們就不會(huì)再被限制到一種固定的顯示形式或者大小上無(wú)法管理的列表形式的報(bào)表中了。這種方便的開(kāi)發(fā)交互式報(bào)表的方式是ABAP語(yǔ)言的一大重要閃光點(diǎn)。開(kāi)發(fā)工具
ABAP Workbench有幾個(gè)不同的工具用于編輯容器對(duì)象。這些工具可以為你提供涵蓋整個(gè)軟件開(kāi)發(fā)周期各階段的輔助。 創(chuàng)建和編輯容器對(duì)象的最重要的工具有:
ABAP Editer:編寫(xiě)程序代碼
ABAP Dictionary:處理數(shù)據(jù)庫(kù)表定義,檢索全局類(lèi)型
Menu Painter:設(shè)計(jì)用戶(hù)界面(包括菜單欄,標(biāo)準(zhǔn)工具欄,應(yīng)用欄,配置功能鍵)
Screen Painter:為用戶(hù)對(duì)話框設(shè)計(jì)屏幕(動(dòng)態(tài)程序)
Function Builder:顯示和處理功能模塊
Class Builder:顯示和處理ABAP對(duì)象類(lèi)
語(yǔ)法特點(diǎn)
由各自獨(dú)立的語(yǔ)句構(gòu)成。每個(gè)語(yǔ)句的第一個(gè)單詞必須是ABAP關(guān)鍵字。單詞之間至少要用一個(gè)空格分隔。每個(gè)語(yǔ)句結(jié)束必須要用句號(hào)。一個(gè)語(yǔ)句可以跨多行,只要不遇到句號(hào),就認(rèn)為是一個(gè)延續(xù) 的語(yǔ)句。
可以把多個(gè)語(yǔ)句放在一行。ABAP不區(qū)分大小寫(xiě),關(guān)鍵字和用戶(hù)操作數(shù)都一樣,為了便于閱讀,一般把關(guān)鍵字大寫(xiě),而操作數(shù)小寫(xiě)。如果連續(xù)多行的第一個(gè)關(guān)鍵字相同,可以使用鏈語(yǔ)句方式減少輸入
™data: id type I.
™data: name type c.
™可寫(xiě)為:
™data: id type I ,
™ name type c.
注釋:
注釋行由第一列的星號(hào)(*)開(kāi)頭,并且必須寫(xiě)在第一 列,前面不能有空格。
在行末的注釋用雙引號(hào)(”)作為前導(dǎo)。
™data: id type i. “ 定義一個(gè)對(duì)象num數(shù)據(jù)類(lèi)型為I
技術(shù)架構(gòu)
SAP的系統(tǒng)架構(gòu)設(shè)計(jì)無(wú)疑是值得學(xué)習(xí)的,以下是我從網(wǎng)絡(luò)上收集的一些相關(guān)信息,也可以作為架構(gòu)設(shè)計(jì)的參考。
1、實(shí)施、開(kāi)發(fā)過(guò)程和維護(hù)過(guò)程管理細(xì)致,角色劃分清晰,即使在項(xiàng)目的開(kāi)發(fā)過(guò)程中,仍然要配備BASIS人員,并對(duì)系統(tǒng)進(jìn)行運(yùn)維工作管理;
2、三種環(huán)境:開(kāi)發(fā)、QA、生產(chǎn),在三種環(huán)境下的整合開(kāi)發(fā)過(guò)程;
3、注重權(quán)限、審計(jì):所有的操作都和權(quán)限綁定,并對(duì)每項(xiàng)業(yè)務(wù)操作都進(jìn)行日志記錄,數(shù)據(jù)庫(kù)記錄邏輯刪除,這對(duì)系統(tǒng)的體系結(jié)構(gòu)和數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范提出相應(yīng)的要求,同時(shí)也對(duì)系統(tǒng)的實(shí)施和運(yùn)維工作提出了要求;
4、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器的層次定義:和J2EE體系架構(gòu)不同,一方面保持應(yīng)用的獨(dú)立性,另一方面保證數(shù)據(jù)庫(kù)服務(wù)器的穩(wěn)定;
5、系統(tǒng)的穩(wěn)定性壓倒一切:即使?fàn)奚阅?,也要確保系統(tǒng)的穩(wěn)定;
6、模塊的質(zhì)量保證:對(duì)測(cè)試的組織,完整的測(cè)試流程貫穿項(xiàng)目開(kāi)發(fā)實(shí)施的全過(guò)程;
7、可維護(hù)性的表現(xiàn):一方面是基于運(yùn)維的,對(duì)于系統(tǒng)軟硬件各個(gè)部分的監(jiān)控;另一方面是系統(tǒng)架構(gòu)上,編程模式上能支撐二次開(kāi)發(fā);
8、可擴(kuò)展性的表現(xiàn):系統(tǒng)架構(gòu)上和物理部署上的兩種體現(xiàn);
9、可用性:界面操作標(biāo)準(zhǔn)化,有完善的文檔制作和交互式教學(xué)課件制作工具;
10、所有的一切處理操作都是事務(wù)代碼;操作可跟蹤、可追溯;
11、符合業(yè)務(wù)特點(diǎn)的數(shù)據(jù)庫(kù)表類(lèi)型定義,即將數(shù)據(jù)庫(kù)開(kāi)發(fā)的成功實(shí)踐固化在開(kāi)發(fā)環(huán)境中。