2017年7月24日 星期一

SAP_ABAP_邊學邊記錄_結構宣告

SAP_ABAP_邊學邊記錄_結構宣告

WORK AREA(工作區)、INTERNAL TABLE(內表)、HEADER LINE(標題行)
INTERNAL TABLE是SAP中實在處理資料的部份,從DB把資料取回的時候,也是會進入INTERNAL TABEL中,而去執行的部份要透過WORK AREA去取INTERNAL TABLE的值。

建置INTERNAL TABLE(內表)

在另一篇變數宣告中提到,TYPES定義的部份要透過DATA實做才行!
這其中的一些作業又跟ABAP的行家話有關,像WORK AREA、INTERNAL TABLE…
一步一步來操作記錄!

宣告一個結構(想像中是一個CLASS)

TYPES: BEGIN OF LINES.
       CELL1 TYPE I,
       CELL2 TYPE I
       END OF LINES.

宣告一個WORD AREA(想像成實做CLASS成OBJ)

DATA WA TYPE LINES.

宣告一個INTERNAL TABLE(想像成宣告一個TABLE,他的資料結構是LINES)

//舊式宣告方法
DATA LINE_TABLE TYPE LINES OCCURS 0 WITH HEADER LINE.
//目前建議作法
DATA LINE_TABLE TYPE STANDARD TABLE OF LINE.

關於OCCURS 0

OCCURS主要是宣告這個TABLE的行數,0即表示沒有限制,當超過定義的時候會自動擴展,不過網路上看前輩們的討論是舊的作法了,現在都不建議再OCCURS了!

關於WITH HEADER LINE

WITH HEADER LINE可當做一個WORK AREA使用,不過網路看前輩們在說,效能上不宣告WITH HEADER LINE是較好的!

建置INTERNAL TABLE操作說明

我們透過TYPES宣告了一個LINES,這個LINES有著兩個欄位,CELL1與CELL2,就是每一行的記錄!
接著再透過DATA來實做這個LINES,就是ABAP中說的WORD AREA!
最後宣告一個TABLE,就是ABAP中說的INTERNAL TABLE!
就跟在ASP.NET一樣,宣告ROW、然後宣告CELL,將CELL給ADD進去ROW,然後再宣告一個TABLE,將這個ROW也ADD進去TABLE!(欄組成行,行加入資料表)

操作INTERNAL TABLE

方式一

WA-CELL1=1.
WA-CELL2=2.
APPEND WA TO LINE_TABLE.
//這WA是稍早所宣告的,不宣告WITH HEADER LINE的作法

方式二

LINE_TABLE-CELL1=1.
LINE_TABLE-CELL2=2.
APPEND LINE_TABLE.
//宣告了WITH HEADER LINE的作法兩種皆可行

操作方式說明

宣告了WITH HEADER LINE的時候同時也算是宣告了一個隱性的WORK AREA(LINE_TABLE),所以以方式二的方式可以直接執行!
理解上可以把WITH HEADER LINE的作法想成在INTERNAL TABLE的第0行變成是WORK AREA,待執行之後再寫入INTERNAL TABLE,所以我才會把這個動作解釋成是一個隱性的WORK AREA,而不宣告的時候還是必需透過另一個WORK AREA來做中介執行,即方式一。
//完整操作步驟
//定義結構
TYPES:BEGIN OF ADDS.
      FLAG, //沒指定會預設為C且長度為1
      ID LIKE AA-ID,
      NAME LIKE AA-NAME,
      CITY LIKE AA-CITY,
END OF ADDS.
//實作,產生WORD AREA
DATA ADDRESS TYPE ADDS.
//賦值
MOVE:'Y'      TO ADDRESS-FLAG,
     '0001'   TO ADDRESS-ID,
     'MARTY'  TO ADDRESS-NAME,
     'TAIWAN' TO ADDRESS-CITY.
//顯示
WRITE ADDRESS.

      

沒有留言:

張貼留言