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.
沒有留言:
張貼留言