SAP程式設計中最基本的概念 雲棲社群

2022-09-24 03:36:12 字數 2881 閱讀 5552

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 程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的...