abap程式設計的語句(statement)功能和樣子上與j**a語言沒什麼重大區別,所以很多學習其他語言的程式設計師看了一些abap語言環境下的report**後,會認為abap的語法可以直接上手,很容易推測語句的含義和語法的用法。
abap程式設計的語句(statement)功能和樣子上與j**a語言沒什麼重大區別,所以很多學習其他語言的程式設計師看了一些abap語言環境下的report**後,會認為abap的語法可以直接上手,很容易推測語句的含義和語法的用法。
事實上,我們在學習abap語言的過程中,作為乙個嚴謹的專業人士,我們還是應該看官方資料,將abap程式設計的基本概念屢清楚。
我們回憶一下j**a語言環境下的程式設計,我們使用eclipse編寫j**a原始檔的**,
1.j**a基本型別(int long string之類的)
2.j**a內建容器型別(list vector之類的)
3.自定義po(基本型別、內建容器的組合,帶有get set方法的po)
4.dao 檔案(資料庫操作基本方法,不帶有業務含義的方法)
5.service 檔案(帶有業務含義的方法)
從上述描述我們知道,程式設計的過程必須會涉及到:使用基本型別,建立自定義資料型別,宣告變數or物件,例項化變數or物件,然後在方法中使用變數和物件。
我們的abap程式設計百分之一百也會有這個過程。
比如我們看下面一段**:
types: begin of ty_tab,
ebeln type ekko-ebeln,
ebelp type ekpo-ebelp,
verkf type ekko-verkf, "
matnr type ekpo-matnr, "
maktx type makt-maktx, "
datum type sy-datum,
ktmng type ekpo-ktmng, "
lifnr type lfa1-lifnr,
name1 type lfa1-name1,
werks type ekpo-werks, "
end of ty_tab.
data: gt_tab type table of ty_tab.
data: ls_tab like line of gt_tab.
我們在abap程式設計過程中常常會寫上面的語句,或者經常複製貼上上面的語句,久而久之就機械的習以為常。
上述語句貌似幹了三件事:
1.建立了乙個內錶吧?ty_tab,不對好像只是乙個結構而已
2.建立了乙個內錶吧?應該是
3.建立了同內錶結構一毛一樣的結構吧?用來在**中臨時存一條資料用。
我們往往就這樣囫圇過去了。
實際上,上述**的解釋,就是abap程式設計中,有關於建立型別建立物件的基本功。
這些基本功,不應該通過百度去學習,不應該通過看別人部落格,看二道販子的知識去學習。我們應該直接去看官方資料,解釋最基本的基本功。
看哪個官方資料?
這裡我就推薦training course和abap keyword documentation
我們的abap**,簡單的**,最終一定會用到內錶,比如用內錶儲存資料,然後用alv顯示內錶中的資料。
什麼是內錶?
內錶只是中文翻譯,不科學而且有歧義,內錶的學名叫做【internal table】
內錶的本質是什麼?
其實不用我來廢話,sap又不是我的作品,我在這裡矯揉造作裝成大師,有必要麼?沒有必要
直接看abap keyword documentation,自己看,就能看懂
我還是解釋下
【內錶的本質是data object 】就這句話,如果沒人告訴你,我只能說非蠢既壞。
abap 程式設計中最重要的兩個概念就是data type 和data object
我們編寫**中建立的內錶的本質,就是個物件,物件導向的物件。內錶不是型別,內錶是物件,生動吧。
那麼我們都是學習過物件導向程式設計的人,我們都知道物件的建立基於型別,自己定義個class然後new乙個物件,都是這麼搞的。
那麼在abap的世界中,我們怎麼搞?
abap中的internal table相當於你在j**a中new出來的物件,那麼abap中的class在**?泛泛的說,abap中的class就是data type
什麼是data type?
這時候就不得不提到bc400了,作為乙個abap開發,沒看過bc400就是個笑話,還是個不怎麼好笑的笑話。
在sap中有三類data type: predefined elemantary type / local data type /global data type
elemantary type 就是abap中的基本資料型別
local data type 就是你在具體的某乙個abap程式中,最開始用types關鍵字建立的型別
global data type就是你在程式設計以前,用se11在abap dictionary預先建立的structure或者transparent table
看了我複述pa教材的內容,是不是豁然開朗?沒有?我給你解釋下
我們本文之前的**,本質上就是先定義了乙個local data type,然後用這個data type建立了data object。明白了吧?這就是官方解釋。
我們現在提出乙個任務:為了執行collect語句(statement)我們要建立乙個內錶,這個內錶必須擁有某幾個固定的key,然後對於non-key的numeric欄位進行累計。
經過之前的學習,我們必須有這種意識:
建立內錶的前提是必須擁有data type,這個data type可以是se11預先定義的global data type也可以是程式一開始預先定義的local data type
然後我們看需求,要求內錶必須擁有key,這是什麼意思?
看來我們需要一起去學習內錶的基礎知識了。
最基本的Socket程式設計
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...
最基本的Socket程式設計
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...
最基本的Socket程式設計
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的 socket 程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的...