abap

abap

ABAP((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,[1]表示套用伺服器(通常企業為了節省成本和方便管理可能會將套用伺服器和資料庫安裝在同一起),[2]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 <report name> or PROGRAM <program name>.

對於 <report/program name>;,系統使用在“ABAP/4編輯器初始螢幕”上輸入的名稱。

語句REPORT和PROGRAM實際上具有相同功能。它們使系統能識別報表程式或任何其他ABAP/4程式並允許為輸出列表指定一定的標準:

REPORT或PROGRAM語句可以有不同的參數,如LINE-SIZE、LINE-COUNT或NO STANDARD PAGE HEADING。這些參數主要適用於報表程式,用來分析數據並輸出結果列表。

關於列表的詳細信息,參見[ See also: 第六章 創建列表 <file://nyf:\1\2\5\> ]或參見REPORT和PROGRAM上的關鍵字文檔。

2. 輸入程式代碼。

3. 選擇“檢查”進行語法檢查。然後系統掃描程式代碼尋找語法錯誤及不相容處。如果檢查出錯誤,則出現訊息報告它並且有可能的話將建議解決方案或更正。將游標放在適當的位置上。

4. 選擇“保存”保存代碼。

源文本存儲在程式庫中。

測試程式

測試程式檢查代碼是否正確工作。

為測試目的要運行程式,選擇“ABAP/4編輯器編輯程式”螢幕上的“程式->;執行”。

系統執行該程式,如同從“ABAP/4編輯器初始螢幕”中啟動的一樣。例如,創建報表程式之後,則首先出現從中輸入條件的選擇螢幕,然後是結果列表。

如果正創建ABAP/4程式模組,則必須在運行程式之前創建事務代碼(關於創建事務代碼的詳細信息,參見對話編程簡介)。

出於測試目的,可以先不進行保存,直接運行某個不是模組存儲部件的程式。編輯器保留一個包含更改的臨時版本。但是,測試結束後必須返回編輯器以確保所有更改都已保存。

程式的顯示更改

本節主要說明如何顯示或更改現有程式。此處相關的是技術步驟而不是實際代碼更改。

要顯示或更改程式,請進行如下操作:

1. 在“ABAP/4編輯器初始螢幕”上的“程式”欄位中輸入要更改的程式名稱。

2. 選擇“原始碼”並選擇“顯示”或“更改”。

如果選擇“更改”則繼續步驟3。

如果選擇“顯示”,則看到“ABAP/4編輯器顯示程式”螢幕。此處也顯示原始碼,但不能進行更改。可以通過選擇“顯示->;更改”切換到更改模式。

3. 如果其他用戶鎖定該程式對編輯器的訪問,則系統顯示下列訊息:

User <name> forbade all changes.

在這種情況下,不能更改程式。要更改程式,必須將它複製到新程式中並用新程式名再開始步驟1。否則,繼續步驟5。

4. 輸入對程式代碼的更改。

5. 選擇“檢查”檢查語法。

6. 保存程式的更改版本。

如果更改程式的私有版本(開發類$TMP),則立即保存更改版本。

如果從$TMP之外的開發類更改程式,則會出現一個視窗,從中可以指定更正請求號(Change Request Number)。

7. 運行程式測試它(關於測試的詳細信息,參見測試程式(頁11))。

配給程式

介紹

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

運用

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'.

is_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 :指針類型為資料庫表的行項目

相關詞條

相關搜尋

熱門詞條

聯絡我們