370 likes | 659 Views
ABAP Basic Concept (1). ABAP 程式編輯工具 ABAP Editor 、 Object Navigator 資料型態 簡單型態、自定型態、自定結構型態 變數 Element Data Object Work Area Internal Table :型態定義、變數宣告、操作 常用系統參數. 1. ABAP 程式編輯工具. ABAP Editor (SE38) 或 Tools → ABAP Workbench → Development→ User Interface → ABAP Editor 編輯、編譯與執行程式
E N D
ABAP Basic Concept (1) • ABAP程式編輯工具 • ABAP Editor、Object Navigator • 資料型態 • 簡單型態、自定型態、自定結構型態 • 變數 • Element Data Object • Work Area • Internal Table:型態定義、變數宣告、操作 • 常用系統參數
1. ABAP程式編輯工具 • ABAP Editor (SE38) • 或Tools → ABAP Workbench → Development→ User Interface → ABAP Editor • 編輯、編譯與執行程式 • SAP規定user欲create之objects名稱,必需以z為開頭 • Object Navigator (SE80) • 或Tools → ABAP Workbench → Overview → Object Navigator • 協助使用者尋找物件(程式) 、將程式中的物件列出 • 結合ABAP Editor,可直接編寫程式
Check Activate Program name 若要找zyy開頭之程式, 可輸入zyy*,再按F4 Execute ABAP Editor進入畫面
Program 可用來找想要的程式 Development class可建立class來存放user所建立的program, table 會將中間碼放到Server Object Navigator進入畫面
程式內所使用的物件列表 program可以在這裡閱讀、修改或執行 Object Navigator內頁畫面
2. 資料型態 • 簡單型態 • 自定型態 • 自定結構型態
2.1 簡單型態 • ABAP 預先定義的簡單型態 • C Character • N Numeric Text • D Date (YYYYMMDD) • T Time (HHMMSS) • I Integer • F Floating Point Number • X Byte • P Packet Number (格式化數值) …
2.2 自定型態 • TYPES <user defined type> TYPE <basic type> <user defined type> • Ex: 定義My_Type1為6個字元之字串: TYPES My_Type1(6) TYPE C. TYPES My_Type2 TYPE My_Type1. • TYPES <user defined type> LIKE <abap-dictionary field> • Ex: TYPES MY_TYPE3 LIKE BKPF-BUKRS. (表格-欄位)
2.3 自定結構型態 • TYPES:BEGIN OF <structure name>, <field1-name > TYPE (LIKE) <type> , <field2-name > TYPE (LIKE) <type> , …. ,END OF <structure name>.
資料型態定義舉例 TYPES FIELD1 TYPE C. TYPES: BEGIN OF MY_STRUC1, FIELD1 TYPE C, FIELD2 TYPE I, FIELD3 TYPE MY_STRUC1-FIELD1, FIELD4 TYPE FIELD1, FIELD5 LIKE BKPF-BUKRS, END OF MY_STRUC1.
資料型態定義舉例 (Cont.) TYPES: BEGIN OF MY_STRUC2, FIELD6 TYPE C, FIELD7 TYPE I, END OF MY_STRUC2. TYPES: BEGIN OF MY_STRUC3. INCLUDE TYPE MY_STRUC1 AS STRUC1. INCLUDE TYPE MY_STRUC2 AS STRUC2. TYPES: END OF MY_STRUC3.
3. 變數 • ABAP提供三種不同的變數: • Element Data Object • 單值變數 • Work Area • 以多個欄位表示多個值(類似record) • Internal Table • 類似table的概念,多行多列
變數宣告語法 • DATA <varname> TYPE <ABAP dictionary type> <user defined type> • DATA <varname> LIKE <data object> TYPE+型態 LIKE+資料(變數)物件
3.1 Element Data Object • 宣告變數與常數值 • Variable,例如: • DATA MY_DATA1(10) TYPE C. • DATA MY_DATA2 TYPE I. • MY_DATA1 = 'test'. • MY_DATA2 = 1234. • DATA MY_DATA3(10) TYPE C VALUE 'pucsim'. • WRITE: MY_DATA1, MY_DATA2 , MY_DATA3. • Constants,例如: • CONSTANTS pi TYPE P DECIMALS 4 VALUE '3.1415' .
練習A • 宣告單值變數 (程式名稱zyyxx_ex_a) • 定義一個使用者自訂型態MY_TYPE,且MY_TYPE的型態為C、長度為10 • 宣告一個變數MY_DATA1,其型態為MY_TYPE 的型態,並在宣告時給初始值。 • 宣告一個變數MY_DATA2,其型態為MY_DATA1的型態,宣告後再設定此變數的值。 • 將以上兩變數印出。
練習A參考解答 REPORT zyytc_ex_a. TYPES MY_TYPE(10) TYPE C. DATA MY_DATA1 TYPE MY_TYPE VALUE 'george'. DATA MY_DATA2 LIKE MY_DATA1. MY_DATA2 = 'yang'. WRITE: MY_Data1, MY_DATA2. Test按鈕看程式執行結果
3.2 Work Area • 將多個變數組合在一個物件中,以利資料的處理 • 基本上就是一個Structure,或是Record • 兩種宣告方法 • 先定義structure type,再提供給Work Area使用 • DATA <name> TYPE <structure type> • 直接定義 • DATA : BEGIN OF wa_struc , field1 TYPE <type>, field2 TYPE <type>, END OF wa_struc. Work Area中各欄位所存值以<Work Area>-<Field name>與 之對應
Work Area (Cont.) • 複製資料: • MOVE-CORRESPONDING <wa1> TO <wa2> PS: 二者皆有之欄位才會進行複製
Work Area舉例 TYPES: BEGIN OF MY_STRUC1, FIELD1(10) TYPE C, FIELD2 TYPE I, FIELD3(5) TYPE N, END OF MY_STRUC1. DATA WA_MYDATA1 TYPE MY_STRUC1. WA_MYDATA1-FIELD1 = 'MY_DATA1-C'. WA_MYDATA1-FIELD2 = 11111. WA_MYDATA1-FIELD3 = '12345'. WRITE: WA_MYDATA1-FIELD1, WA_MYDATA1-FIELD2, WA_MYDATA1-FIELD3.
Work Area舉例 (Cont.) DATA: BEGIN OF WA_MYDATA2, FIELD1(10) TYPE C, FIELD2 TYPE I, FIELD3(5) TYPE N, END OF WA_MYDATA2. WA_MYDATA2-FIELD1 = 'MY_DATA2-C'. WA_MYDATA2-FIELD2 = 22222. WA_MYDATA2-FIELD3 = '67890'. WRITE: / WA_MYDATA2-FIELD1, WA_MYDATA2-FIELD2, WA_MYDATA2-FIELD3. MOVE-CORRESPONDING WA_MYDATA2 TO WA_MYDATA1. WRITE: / WA_MYDATA1-FIELD1, WA_MYDATA1-FIELD2, WA_MYDATA1-FIELD3.
練習B • 宣告Work Area變數 (程式名稱zyyxx_ex_b) • 自定一個Structure type,包含2個欄位(NAME為10個字元;AGE為整數) • 宣告第一個Work Area變數,使用上述之自訂Structure type,並令NAME為'Tom',AGE為22 • 宣告第二個Work Area變數,並直接定義其結構,包含2個欄位 (NAME為10個字元;INCOME為整數) ,並令NAME為'Peter',INCOME為28000 • 複製第二個Work Area變數至第一個Work Area變數 • 將以上兩變數的所有欄位值印出。
練習B參考解答 REPORT zyytc_ex_b. TYPES: BEGIN OF TCYANG_STRUCTURE, NAME(10) TYPE C, AGE TYPE I, END OF TCYANG_STRUCTURE. DATA PERSON1 TYPE TCYANG_STRUCTURE. PERSON1-NAME = 'Tom'. PERSON1-AGE = 22.
練習B參考解答 (Cont.) DATA: BEGIN OF PERSON2, NAME(10) TYPE C, INCOME TYPE I, END OF PERSON2. PERSON2-NAME = 'Peter'. PERSON2-INCOME = 28000. MOVE-CORRESPONDING PERSON2 TO PERSON1. WRITE: / PERSON1-NAME, PERSON1-AGE. WRITE: / PERSON2-NAME, PERSON2-INCOME.
3.3 Internal Table • 與DB中table的概念相同 • 有多個欄位並且可儲存多筆資料(多個structure的集合) • 類似MS ADO物件中的 Recordset
(1) Internal TableType型態定義 • TYPES itabtype TYPE <tabkind> OF <structure type> [WITH <key>] • Tabkind有三種:STANDARD TABLE, SORTED TABLE, HASHED TABLE • 範例:定義ITAB為sorted table,參考line之結構型態,並以COLUMN1為unique key 。 • TYPES: BEGIN OF LINE, COLUMN1 TYPE I, COLUMN2 TYPE I, COLUMN3 TYPE I, END OF LINE. TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.
(2) Internal Table變數宣告 • Reference to Declared Internal Table Types • DATA <itab> TYPE <itabtype> [WITH HEADER LINE]. • WITH HEADER line: declares an extra data object with the same name. You use it as a work area when working with the internal table.
Internal Table with Header Lines Header Line <itab> • DATA <itab> TYPE <itabtype> WITH HEADER LINE Internal Table <itab> • DATA <itab> TYPE <itabtype> Work Area <wa> Internal Table <itab>
Internal Table變數宣告 (Cont.) • Declaring New Internal Tables • DATA <itab> TYPE<tabkind> OF <structure type或abap table> WITH <key> [WITH HEADER LINE]. • 範例:宣告ITAB為 hashed table,參考ABAP Dictionary中的SPFLI表格,並以CARRID及CONNID 為 unique key。 • DATA ITAB TYPE HASHED TABLE OF SPFLI WITH UNIQUE KEY CARRID CONNID.
(3) Internal Table操作 INDEX ?
Internal Table操作 (Cont.) • 列印Table中之所有records LOOP AT TABLE名稱 WRITE:/ TABLE名稱-欄位 ENDLOOP • 補充 • SKIP 跳一行 • ULINE 畫一條線 • WRITE: / 由新的一行開始列印
Internal Table舉例 TYPES: BEGIN OF MY_STRUC, NAME(10) TYPE C, AGE TYPE I, END OF MY_STRUC. TYPES TAB1 TYPE STANDARD TABLE OF MY_STRUC. DATA ITAB1 TYPE TAB1 WITH HEADER LINE. DATA ITAB2 TYPE STANDARD TABLE OF MY_STRUC WITH HEADER LINE. DATA PERSON1 TYPE MY_STRUC. DATA PERSON2 TYPE MY_STRUC. DATA PERSON3 TYPE MY_STRUC.
Internal Table舉例 (Cont.) PERSON1-NAME = 'George'. PERSON1-AGE = 34. PERSON2-NAME = 'Tom'. PERSON2-AGE = 22. PERSON3-NAME = 'Doris'. PERSON3-AGE = 30. APPEND PERSON1 TO ITAB1. APPEND PERSON2 TO ITAB1. WRITE: / 'APPEND TABLE:'. LOOP AT ITAB1 . WRITE : / ITAB1-NAME, ITAB1-AGE. ENDLOOP.
練習C • 使用Internal Table變數 (程式名稱zyyxx_ex_c) • 繼續前兩頁實例,將PERSON1及PERSON2分別新增於ITAB2表格中。 • PERSON3插入於ITAB2表格之第二筆記錄。 • 跳一行,再印出一條線。 • 印出『INSERT TABLE:』之標題。 • 將ITAB2的所有記錄之各個欄位全部印出。
練習C參考解答 APPEND PERSON1 TO ITAB2. APPEND PERSON2 TO ITAB2. INSERT PERSON3 INTO ITAB2 INDEX 2. SKIP. ULINE. WRITE: / 'INSERT TABLE:'. LOOP AT ITAB2 . WRITE : / ITAB2-NAME, ITAB2-AGE. ENDLOOP.
4. 常用系統參數 • Sy-datum • Date and time, current application server date • Sy-uzeit • Date and time, current application server time • Sy-subrc • Return value, return value after ABAP statements • Ex: 搜尋資料庫時,至少找到一筆資料,則其值為 0 • Sy-lsind • List processing, details list index (表示Detail List處在第幾層)