ABAP Basic Concept (1)
description
Transcript of ABAP Basic Concept (1)
C-1ABAP 程式設計 楊子青
ABAP Basic Concept (1) ABAP 程式編輯工具
– ABAP Editor 、 Object Navigator 資料型態
– 簡單型態、自定型態、自定結構型態 變數
– Element Data Object
– Work Area
– Internal Table :型態定義、變數宣告、操作 常用系統參數
C-2ABAP 程式設計 楊子青
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 ,可直接編寫程式
C-3ABAP 程式設計 楊子青
ABAP Editor 進入畫面
Program nameProgram name
CheckCheck ActivateActivate ExecuteExecute
若要找 zyy 開頭之程式,可輸入 zyy* ,再按 F4
C-4ABAP 程式設計 楊子青
Object Navigator 進入畫面
Development class可建立 class來存放 user所建立的 program, table
Program 可用來找想要的程式
會將中間碼放到 Server
C-5ABAP 程式設計 楊子青
Object Navigator 內頁畫面
program可以在這裡閱讀、修改或執行
程式內所使用的物件列表
C-6ABAP 程式設計 楊子青
2. 資料型態
簡單型態 自定型態 自定結構型態
C-7ABAP 程式設計 楊子青
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 ( 格式化數值 ) …
C-8ABAP 程式設計 楊子青
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.
( 表格 - 欄位 )
C-9ABAP 程式設計 楊子青
2.3 自定結構型態
TYPES:BEGIN OF <structure name>,
<field1-name > TYPE (LIKE) <type> , <field2-name > TYPE (LIKE) <type> , …. ,
END OF <structure name>.
C-10ABAP 程式設計 楊子青
資料型態定義舉例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.
C-11ABAP 程式設計 楊子青
資料型態定義舉例 (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.
C-12ABAP 程式設計 楊子青
3. 變數 ABAP 提供三種不同的變數:
– Element Data Object • 單值變數
– Work Area• 以多個欄位表示多個值 ( 類似
record)
– Internal Table• 類似 table 的概念,多行多列
C-13ABAP 程式設計 楊子青
變數宣告語法
DATA <varname> TYPE <ABAP dictionary type> <user defined type>
DATA <varname> LIKE <data object>
TYPE+ 型態LIKE+ 資料 ( 變數 ) 物件
C-14ABAP 程式設計 楊子青
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'
.
C-15ABAP 程式設計 楊子青
練習 A
宣告單值變數 ( 程式名稱 zyyxx_ex_a)– 定義一個使用者自訂型態 MY_TYPE ,且
MY_TYPE 的型態為 C 、長度為 10
– 宣告一個變數 MY_DATA1 ,其型態為 MY_TYPE 的型態,並在宣告時給初始值。
– 宣告一個變數 MY_DATA2 ,其型態為MY_DATA1 的型態,宣告後再設定此變數的值。
– 將以上兩變數印出。
C-16ABAP 程式設計 楊子青
練習 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 按鈕看程式執行結果
C-17ABAP 程式設計 楊子青
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> 與
之對應
C-18ABAP 程式設計 楊子青
Work Area (Cont.)
複製資料:– MOVE-CORRESPONDING <wa1> TO <wa2>
PS: 二者皆有之欄位才會進行複製
C-19ABAP 程式設計 楊子青
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.
C-20ABAP 程式設計 楊子青
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.
C-21ABAP 程式設計 楊子青
練習 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 變數
– 將以上兩變數的所有欄位值印出。
C-22ABAP 程式設計 楊子青
練習 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.
C-23ABAP 程式設計 楊子青
練習 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.
C-24ABAP 程式設計 楊子青
3.3 Internal Table 與 DB 中 table 的概念相同
– 有多個欄位並且可儲存多筆資料 ( 多個 structure 的集合 )
– 類似 MS ADO 物件中的 Recordset
Key access Table scan Binary Search Hash Function
Access Using Mostly index Mostly key Key only
Uniqueness Non-unique Unique/ Non-unique
Unique
C-25ABAP 程式設計 楊子青
(1) Internal Table Type 型態定義
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.
C-26ABAP 程式設計 楊子青
(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.
C-27ABAP 程式設計 楊子青
Internal Table with Header Lines DATA <itab> TYPE <itabtype> WITH HEADER LINE
DATA <itab> TYPE <itabtype>
Header Line <itab>
Internal Table <itab>
Work Area <wa>
Internal Table <itab>
C-28ABAP 程式設計 楊子青
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.
C-29ABAP 程式設計 楊子青
(3) Internal Table 操作
INDEX ?
C-30ABAP 程式設計 楊子青
Internal Table 操作 (Cont.) 列印 Table 中之所有 records
LOOP AT TABLE 名稱 WRITE:/ TABLE 名稱 - 欄位ENDLOOP
補充– SKIP 跳一行– ULINE 畫一條線– WRITE: / 由新的一行開始列印
C-31ABAP 程式設計 楊子青
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.
C-32ABAP 程式設計 楊子青
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-33ABAP 程式設計 楊子青
練習 C
使用 Internal Table 變數 ( 程式名稱zyyxx_ex_c)– 繼續前兩頁實例,將 PERSON1 及
PERSON2 分別新增於 ITAB2 表格中。– PERSON3 插入於 ITAB2 表格之第二筆記錄。
– 跳一行,再印出一條線。– 印出『 INSERT TABLE: 』之標題。– 將 ITAB2 的所有記錄之各個欄位全部印出。
C-34ABAP 程式設計 楊子青
練習 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.
C-35ABAP 程式設計 楊子青
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 處在
第幾層 )