abap

abap

A徠BAP((Advanced Business Application Programming))是一種高級企業應用編程語言,起源於20世紀80年代。經過不斷的發展,現在的版本為ABAP/4,SAP R/3的應用程序就是用ABAP/4編寫的。

綜述


ABAP/4是面向對象語言。它支持封裝性和繼承性。封裝性是面向對象的基礎,而繼承性則是建立在封裝性基礎上的重要特性。ABAP/4具有事件驅動的特性。
ABAP/4和COBOL具有類似之處。
ABAP/4適合生成報表。
ABAP/4支持對資料庫的操作。
SAP最初開發ABAP/4(高級商業應用程序設計)語言僅為內部使用,為應用程序員提供優化的工作環境。經過不斷的改進和修改以滿足商業領域的需要。ABAP/4已成為SAP開發所有自己的應用程序的僅有工具。
SAP客戶用ABAP/4進行其自身開發。這樣的開發對R/3標準解決方案適應特殊問題非常重要。ABAP/4開發工作平台包含所有用於創建和維護ABAP/4程序的工具。
ABAP/4的可解釋特性使其易於生成、測試並運行程序的中級版本,以便將來生成最終版本。此過程也叫做早期原形處理,意味著您不必丟棄中級版本。
ABAP/4是第四代支持結構化程序設計的語言。它合併了所有通常的控制結構和模塊化概念。
- 帶有各種類型和結構的聲明數據的聲明元素
- 數據製作的操作元素
- 控制程序流的控制元素
- 反應外部事件的事件元素
· ABAP/4支持多種語言。文本摘要(例如,標題、頁眉和其他文本)將根據程序代碼分別存儲。您可以隨時在不改變程序代碼的情況下更改、轉換和維護這些文本摘要。
· ABAP/4支持商業數據類型和操作。您可以用特殊日期和時間欄位進行計算。系統會自動執行必需的類型轉換。
· ABAP/4提供一系列功能處理字元串。
· ABAP/4包含一個叫OpenSQL的SQL子集。用OpenSQL,您可以讀取和訪問資料庫表,與所用的資料庫系統無關。
· ABAP/4允許您定義和處理內部表,該表只在運行程序時存在。內部表使其更容易處理數據表,並幫助使用程序中的複雜數據結構。
· ABAP/4允許您定義和調用子程序。也可以調用其他程序的子程序。參數能夠以各種方式從子程序傳遞或傳遞到子程序。
· ABAP/4包含一種特殊子程序,叫做功能模塊。您可以在中央庫中創建和維護功能模塊。在調用程序和子程序之間功能模塊有一個明確定義的數據介面。它們能夠以調用程序的獨立模式進行分別測試。
這裡有兩種主要的ABAP/4程序類型:
· 報表程序
報表程序用於分析資料庫表中的數據。這種分析的結果可以顯示在屏幕上或發送到印表機上。邏輯資料庫支持報表程序。邏輯資料庫是特殊的ABAP/4程序,使開發者不必編碼所有的資料庫訪問。
· 對話程序
將對話程序組織為包含對話模塊的模塊池。每個動態程序(由一個屏幕及其流邏輯組成的“動態程序”)都基於一個ABAP/4對話程序。流邏輯包含對ABAP/4對話模塊的調用和熟練操作。

發展歷史


了解一下ABAP的發展歷史是必要的,ABAP產生的最初的目的是用以生成簡單列印報表程序,我們知道SAP最初是為解決財務實時數據處理問題的,ABAP(Advanced Business Application Programming->;高級業務應用編程語言)用於編寫SAP AG的幾乎全部產品源代碼。嚴格地講,ABAP/4不僅僅是一個開發工具,而且是一套完整的client/server開發環境,這很好理解,微軟的Visiual Studio是一開發環境,VB,VC++等是開發工具.ABAP開發環境包含支持程序開發的一些函數和包等。
SAP開發環境的三層(多層)概念也不新鮮,比如在安裝SAP時也可將DB instance安在一台server,Central instance在另一台所謂的Application server(我想這應是相關SAP基礎系統包括各種應用程序所在),而通常客戶端安裝的SAP Logon Front End,SAP會話管理器等是所謂的表示層,它通過TCP/IP,SAP演示協議或RFC和應用伺服器進行數據傳輸,用戶看到的只是處理后的數據返回。
Delphi的三層邏輯相近,在應用層包含多個組件象ABAP開發平台,身份驗證,系統管理維護等用以處理會話,更新,排隊,網關,數據層處理native和Open SQL等(這是從內部機制方面看),SAP各模塊應用的業務邏輯都在應用層被處理(從用戶角度)然後結果被返回。
SAP Logon,表示應用伺服器(通常企業為了節省成本和方便管理可能會將應用伺服器和資料庫安裝在同一起),System number,舉個實例,開發和測試服務共用一台伺服器,開發使用system number00,而測試使用system number 01,通過system number邏輯地將一台physical server邏輯地分成了兩台application server。

特徵


1.和SAP緊密結合,尤其在開發報表方面,坦率地講,除了和SAP集成的好處,.我認為ABAP在報表開發上比Crystal report Tool要高效簡單。
2.和VB一樣,ABAP是解釋型的,如讀者精通VB,學習ABAP應該毫不費力,倒是既然SAP是企業管理解決方案,ABAPer必須對企業管理流程熟悉。
解釋型的另一好處是可以很好跟蹤程序邏輯(使用/H),這對了解業務邏輯的實時追蹤錯誤很有效. 和VB不同的是,VB跟蹤時允許程序運行指針隨意往回或往全拉而ABAP程序卻不行,但是ABAP程序允許在運行時修改變數的值,這是編譯程序不能做到的。當然通常編譯比解釋執行的速度會更快。
ABAP程序執行並不直接讀取源代碼,而是執行內部經過“生成”的描述,對於ABAP/4字典的修改激活后將觸發內部描述的重新生成,如程序並沒激活就執行原版本,或者出現錯誤(程序沒激活可能造成ABAP Dumping ABAP)。
3.在對資料庫處理方面,除了可直接執行SQL(使用native sql,缺點是錯誤處理很難控制,相當於有開發環境將SQL語句直接傳給DB去執行),SAP在ABAP開發環境層還提供了一套Open SQL訪問底層資料庫。
4. 程序員都知道Windows平台下開發都支持事件驅動,Windows系統本身也支持事件驅動,ABAP也提供了事件驅動,這表Dialog編程方面,但是ABAP在此方面並不強,而且相對講也比較難於掌握(在後面會討論)。
5.基於面向對象的風靡,ABAP在此方面也有相當反應,在SAP強大的軟體包中提供了大量可重複使用的程序,讀者也可定義類並使用它快速建立新的對象。
6.類似Java,ABAP開發的程序能運行於任何操作系統(Java有Java虛擬機,ABAP也有ABAP processor),多種資料庫(比如在ABAP字典中實現了透明表對各種底層資料庫表的映射,這樣在ABAP層看到的透明表就和具體資料庫無關),各種網路系統。

命名規則


當創建程序名稱時請遵循如下規則:
- 使用至少1個但不超過8個字元。
- 不要使用下列字元
- 句點(.)
- 逗號(,)
- 空格()
- 括弧'('')'
- 單引號(')
- 雙引號(")
- 等號(=)
- 星號(*)
- 母音變音(_,_,_,_,_,_)和'_'
-百分號(%)和下劃線(_):因為這些符號是SQL語句的通配符,所以也會導致問題(參見為在程序中選定行指定條件)。SAP建議在程序名稱中不要使用它們。
創建程序名稱時請遵守這些命名約定:
_ 報表程序(以列表格式輸出數據分析):Yaxxxxxx或Zaxxxxxx。用應用程序區的分類字母替換a。用任何有效字元替換x。注意SAP報表程序遵守相似的命名約定:Raxxxxxx。
_ 任何其它ABAP/4程序(培訓程序或事務程序):SAPMYxxx或SAPMZxxx。用有效字元替換x。注意標準SAPABAP/4程序遵守相似的命名約定:SAPMaxxx,其中a代表某應用程序區。

程序屬性


簡介

程序屬性決定程序屬於哪種應用程序以及程序所鏈接的邏輯資料庫。必須謹慎輸入屬性以便系統能正確處理程序(有關程序屬性的詳細信息,參見重要的程序屬性(頁459))。
已經將名稱分配給程序並選擇“ABAP/4編輯器初始屏幕”上的“創建”時,出現“ABAP/4:程序屬性”屏幕。

操作

1. 在欄位“標題”中輸入程序標題。選擇描述程序功能的標題。系統自動將標題與文本摘要合併。如果以後要更改標題,請按如下操作進行:
- 選擇“ABAP/4編輯器初始屏幕”上的“文本摘要”或“屬性”。
- 選擇“更改”。
2. 完成兩個強制欄位:
- 如果創建報表程序,則在“類型”欄位中輸入1,如果創建模塊存儲,則在“類型”欄位中輸入M。關於可能類型的列表,請單擊可能條目箭頭。
- 在“應用程序”欄位中為應用程序輸入分類字母,如財務會計輸入F。
3. 如果創建報表(類型=1),請選擇“確定”。
系統將特定報表屬性自動插入輸入欄位。然後看見附加欄位“邏輯資料庫”、“從應用程序”和“選擇屏幕”(版本)。
4. 指定與程序相關的所有其他屬性(有關程序屬性的詳細信息,參見重要的程序屬性(頁459))。
5. 選擇“保存”以保存屬性。
6. 出現“維護對象目錄條目”窗口。
7. 輸入開發類。
如果為培訓或測試目的創建程序(如某私有對象),則輸入開發類$TMP或選擇“邏輯對象”。
8. 選擇“保存”以保存開發類。
這將關閉“維護對象目錄條目”窗口並返回“ABAP/4:程序屬性”屏幕。
9. 選擇“後退”離開屏幕。如果要直接轉到ABAP/4編輯器,請選擇“轉向->;源代碼”。
如果通過預定義開發類在“對象瀏覽器”中創建程序,則跳過步驟6到8。
最重要的程序如下所述。關於其它屬性的詳細信息(或關於此處描述的屬性的詳細信息),請選擇相關的輸入欄位,並單擊可能的條目箭頭。
注意下述某些屬性只適用於報表程序並不適用於其他ABAP/4程序。
1. 在“SAPR/3”初始屏幕上選擇“工具->ABAP/4工作台”。
出現“ABAP/4開發工作台”屏幕
abap
abap
2. 選擇“ABAP/4編輯器”
“ABAP/4編輯器初始屏幕”如下所示:
3. 為在“程序”欄位中創建的程序輸入名稱(關於創建程序名稱的詳細信息,參見命名程序規則(頁455))。
4. 選擇“創建”。
不論在“對象組件”下選擇什麼,都出現“ABAP/4:程序屬性”屏幕。
當命名並創建程序后,可以定義其屬性(關於定義程序屬性的詳細信息,參見指定程序屬性(頁457))。
創建ABAP/4程序還有其它過程。例如,可以:
1. 選擇“ABAP/4開發工作台”屏幕上的“對象瀏覽”。
2. 選擇“對象列表”下的“程序”。
3. 選擇“單一對象”下的“程序對象”。
4. 輸入程序名並單擊“顯示”。

類型

除了類型1(如同報表的獨立程序)和M(模塊存儲),還應該注意類型I(包含程序)。包含程序是個獨立的程序,它有兩個主要特徵。首先,它包含程序代碼,不同程序都可使用該代碼。其次,它用於模塊化程序源代碼,該代碼分成邏輯相關部分。其中每個部分都存儲在不同的包含程序中。包含程序改善源代碼的可讀性並有助於維護。(有關包含程序的詳細信息,參見包含程序)。

應用程序

“應用程序”欄位包括應用程序的縮寫,如,財務會計縮寫為F。該必需條目使系統能將程序分配給適當的業務區。
開發類
開發類對系統之間進行傳輸非常重要。執行傳輸時,可以將分配給某個開發類的工作台對象組合起來。
如果用戶在某組中工作,也許要將程序分配給現有開發類或創建新的開發類。分配給開發類$TMP的程序是私有對象並且不能傳輸到其他系統。
但是,也可以通過選擇“ABAP/4編輯器初始屏幕”上的“程序->重新分配...”更改分配給程序的開發類。
應用程序中的邏輯資料庫(僅報表程序)
這些屬性決定報表使用哪個邏輯資料庫檢索數據,以及邏輯資料庫屬於哪個應用程序。應用程序中資料庫名稱必須是唯一的。但是,整個系統可以包括數個同名資料庫。因此指定應用程序很重要。關於邏輯資料庫的詳細信息,參見邏輯資料庫的特性和維護。
如果報表程序直接讀取數據,而未使用邏輯資料庫(關於此主題的詳細信息,參見訪問帶邏輯資料庫的資料庫表),則應該象通常一樣指定應用程序,但將“邏輯資料庫”欄位置空。
選擇屏幕版本(僅報表程序)
如果沒有指定選擇屏幕版本,則系統在邏輯資料庫選擇標準、報表特定參數及選擇選項的基礎上自動創建選擇屏幕(關於選擇屏幕的詳細信息,參見使用選擇屏幕)。
如果想使用自己的選擇屏幕,請在此欄位中輸入號碼。該號碼必須小於1000。可以通過按F4或在DBxxxSEL程序中找到現有選擇屏幕號碼(詳細信息,參見邏輯資料庫選擇)。
大寫/小寫
顯示和存儲時,如果要讓ABAP/4編輯器將程序代碼與輸入時保持相同,則請將該欄位置空。如果選擇該欄位,則所有的程序代碼(除了引號中的文本及註釋外)都轉換成大寫字母。屏幕顯示依賴於所使用的編輯器模式(詳細信息,參見文檔ABAP/4工作台工具。
編輯器鎖定
如果設置此屬性,則其他用戶則不能修改、改名或刪除程序。只有用戶可以更改程序、維護屬性、文本摘要及文檔;或者解除鎖定。
定點算術
如果設置此屬性,系統則根據小數點位數將類型P欄位四捨五入,或用零填補(關於類型P欄位的詳細信息,參見數字數據類型(頁3-4))。這種情況下,無論在用戶主記錄中指定了什麼,小數點字元總是句點(.)。
通過變式啟動(僅報表程序)
如果設置該屬性,則用戶只可以使用變式啟動報表程序。在啟動程序之前,必須創建至少一個報表變式(關於創建變式的詳細信息,參見使用變式預設置選擇)。

程序應用


概述

在ABAP/4編輯器中編寫ABAP/4程序。
可以直接從“ABAP/4程序屬性”屏幕切換到編輯器,也可以從“ABAP/4編輯器初始屏幕”中調用編輯器。

編寫程序操作

1. 在“ABAP/4程序屬性”屏幕上選擇“轉向->;源代碼”或“源代碼”。
選定“源代碼”並選擇“ABAP/4編輯器初始屏幕”上的“更改”。
出現“ABAP/4編輯器編輯程序”屏幕。
系統自動輸入第一個ABAP/4語句,如
REPORT or PROGRAM .
對於 ;,系統使用在“ABAP/4編輯器初始屏幕”上輸入的名稱。
語句REPORT和PROGRAM實際上具有相同功能。它們使系統能識別報表程序或任何其他ABAP/4程序並允許為輸出列表指定一定的標準:
REPORT或PROGRAM語句可以有不同的參數,如LINE-SIZE、LINE-COUNT或NO STANDARD PAGE HEADING。這些參數主要適用於報表程序,用來分析數據並輸出結果列表。
關於列表的詳細信息,參見[ See also: 第六章 創建列表 ]或參見REPORT和PROGRAM上的關鍵字文檔。
2. 輸入程序代碼。
3. 選擇“檢查”進行語法檢查。然後系統掃描程序代碼尋找語法錯誤及不相容處。如果檢查出錯誤,則出現消息報告它並且有可能的話將建議解決方案或更正。將游標放在適當的位置上。
4. 選擇“保存”保存代碼。
源文本存儲在程序庫中。

測試程序

測試程序檢查代碼是否正確工作。
為測試目的要運行程序,選擇“ABAP/4編輯器編輯程序”屏幕上的“程序->;執行”。
系統執行該程序,如同從“ABAP/4編輯器初始屏幕”中啟動的一樣。例如,創建報表程序之後,則首先出現從中輸入條件的選擇屏幕,然後是結果列表。
如果正創建ABAP/4程序模塊,則必須在運行程序之前創建事務代碼(關於創建事務代碼的詳細信息,參見對話編程簡介)。
出於測試目的,可以先不進行保存,直接運行某個不是模塊存儲部件的程序。編輯器保留一個包含更改的臨時版本。但是,測試結束后必須返回編輯器以確保所有更改都已保存。

程序的顯示更改

本節主要說明如何顯示或更改現有程序。此處相關的是技術步驟而不是實際代碼更改。
要顯示或更改程序,請進行如下操作:
1. 在“ABAP/4編輯器初始屏幕”上的“程序”欄位中輸入要更改的程序名稱。
2. 選擇“源代碼”並選擇“顯示”或“更改”。
如果選擇“更改”則繼續步驟3。
如果選擇“顯示”,則看到“ABAP/4編輯器顯示程序”屏幕。此處也顯示源代碼,但不能進行更改。可以通過選擇“顯示->;更改”切換到更改模式。
3. 如果其他用戶鎖定該程序對編輯器的訪問,則系統顯示下列消息:
User forbade all changes.
在這種情況下,不能更改程序。要更改程序,必須將它複製到新程序中並用新程序名再開始步驟1。否則,繼續步驟5。
4. 輸入對程序代碼的更改。
5. 選擇“檢查”檢查語法。
6. 保存程序的更改版本。
如果更改程序的私有版本(開發類$TMP),則立即保存更改版本。
如果從$TMP之外的開發類更改程序,則會出現一個窗口,從中可以指定更正請求號(Change Request Number)。
7. 運行程序測試它(關於測試的詳細信息,參見測試程序(頁11))。

配給程序


介紹

可以將事務代碼分配給類型1的單獨程序,以後就將這些程序作為事務代碼處理。在[ See also: 第三部分 編寫ABAP/4事務 ]中對事務有說明。

運用

1. 按照本節上述主題所述,創建單獨程序。
2. SAP菜單樹:工具 -> ABAP 工作台 -> 開發 -> 其他工具 -> 事務,事務代碼:SE93。
3. 填入事務代碼並選擇“維護事務”屏幕上的“創建”
4. 在下列對話屏幕上選擇“報表事務”;
5. 在下列“創建報表事務”屏幕上填入所需條目“事務說明”和“程序”。
6. 將事務代碼保存在開發類中。
開發類可以用事務代碼SM30維護視圖V_TDEVC來創建或修改。

快速入門


首先、ABAP是技術開發,想要快速入門,或是遇到問題想要解決,可以找個質量高一點的技術交流論壇,比如ABAP大坑網。
想快速培訓出師,你必須得有編程基 礎。從這點考察培訓機構,你就看看他們有沒有筆試,如果 啥條件都不要求,那肯定是不能參加的。編程基礎不是一天 兩天都鍛鍊出來的。
其二、打聽定向委培的公司,是否真正有項目。這個很好辦,招聘求職的網上一搜就知道了。
其三、看培訓機構的老師水平和課程安排如何。這個沒辦法 從網上了解太多,只能實地考察了。
其四、做好這方面的求職準備。培訓機構推薦是一回事,你自 己找機會也不能忽略。
其五、ABAP職位需求非常旺盛,有點譜,學到了其實是蠻 容易找工作的。培訓帶你入門,修行看個人嘛 我見到過很好 的培訓機構,裡面有的學員照樣學不出來,為啥?不努力唄!
最後,市 面上做這方面培訓的,叫的出來的有達沃旗,sap私塾和91abap,賽跑網ABAP。選擇比較好的培訓機構至關重要。建議考慮口碑,價格,就業率等等各方面的因素。
展示報表
ABAP是SAP的基石,入門SAP,首先學好ABAP至關重要,ABAP中ALV部分也很重要,展示一個例子:
TABLES:marav. "MARA&MAKT 視圖
*---------------------------------------------------------------------*
DATA:BEGIN OF gt_tab OCCURS 100,
matnr LIKE marav-matnr,
maktx LIKE marav-maktx,
matkl LIKE marav-matkl,
ntgew LIKE marav-ntgew,
gewei LIKE marav-gewei,
END OF gt_tab.
DATA i_repid LIKE sy-repid.
***ALV設定
TYPE-POOLS: slis.
DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA is_layout TYPE slis_layout_alv.
***選擇屏幕製作
SELECT-OPTIONS:
s_matnr FOR marav-matnr MATCHCODE OBJECT mat1.
START-OF-SELECTION.
***取數據
SELECT * FROM marav
INTO CORRESPONDING FIELDS OF TABLE gt_tab
WHERE
matnr IN s_matnr.
END-OF-SELECTION.
i_repid = sy-repid.
*使用函數得到gt_fieldcat內表
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = i_repid
i_internal_tabname = 'GT_TAB' "capital letters!
i_inclname = i_repid
CHANGING
ct_fieldcat = gt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
***layout設定
is_layout-zebra = 'X'.
i徠s_layout-colwidth_optimize = 'X'. "優化列寬選項是否設置
***單擊彈出明細設定
* is_layout-f2code = '&ETA'.
* is_layout-detail_popup = 'X'.
* is_layout-detail_initial_lines = 'X'.
* 展示數據
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = i_repid
it_fieldcat = gt_fieldcat
i_save = 'A'
i_callback_user_command = 'FRM_UCOMM' "實現雙擊事件
is_layout = is_layout
TABLES
t_outtab = gt_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ABAP中的指針
1. 什麼是ABAP指針:
在ABAP裡面,field symbol就相當於c語言的指針。如果你定義並且分配了相應的結構或者變數給它,其實它就指向這個結構或者變數的地址,如果修改了field symbol的值,則相應結構或者變數的值也隨之更改。
2. 如何定義指針:
基本形式:FIELD-SYMBOLS .
附加信息:
1. ... TYPE :定義一個數據類型,然後定義指針
2. ... TYPE REF TO :指針指向類或者介面
3. ... TYPE REF TO :指針指向數據結構
4. ... TYPE LINE OF :指針內表的行項目
5. ... LIKE :指針為資料庫表類型
6. ... LIKE LINE OF :指針類型為資料庫表的行項目