---
# System prepended metadata

title: 113-2 SAP ABAP 總複習

---

# 113-2 SAP ABAP 總複習

## ABAP

### ABAP
**A**dvanced **B**usiness **A**pplication **P**rogramming
高級商務應用程式語言

- SAP 上開發工具的程式語言
- 處理 Application Program 的開發（報表 Reporting、對話程式 Dialog …）
- 結合 SQL 語法特性的**第四代程式語言**
- 事件導向 Event-Orient


### T-code

- ABAP Dictionary (SE11)
創建資料表、結構表等等的開發工具

- Object Navigator (SE80)
集合所有 ABAP 開發相關的工作集 (包括SE38及SE11)

- ABAP Editor(SE38)
新增/修改/查詢 ABAP 程式的開發工具 (Z開頭)

- SU3
用於管理 SAP 系統使用者資料的T-code，使用者可以通過這個T-code來修改個人參數和設置。
![image](https://hackmd.io/_uploads/H1TgWIeWlg.png)

### Structure of Repository

![image](https://hackmd.io/_uploads/HJrGZUxbgg.png)

### Structure of Repository in SAP
![image](https://hackmd.io/_uploads/HJPSWLlbex.png)


## Work Area / Internal Table

### Variables、Internal Table
ABAP提供三種不同變數：
- **Element Data Object**：單值變數 (e.g. 年齡)
- **Work Area**：一個變數存放多個欄位，每個欄位型態不限。
![image](https://hackmd.io/_uploads/BJftb8ebxx.png)

- **Internal Table**：一個變數存放一整張table的資料。
![image](https://hackmd.io/_uploads/ByxcWLlbgg.png)

### Work Area
1. 先定義 structure type
![image](https://hackmd.io/_uploads/rJiRrUe-ll.png)

2. 宣告一個 WORK AREA 變數，參照剛建立好的 structure type
![截圖 2025-05-13 下午1.17.13](https://hackmd.io/_uploads/SkS1IIxZgg.png)
3. 利用建立好的 WORK AREA 來指定要給值的欄位並給值
![截圖 2025-05-13 下午1.17.23](https://hackmd.io/_uploads/HkAkUIebgl.png)

![image](https://hackmd.io/_uploads/Hkj-LLe-gx.png)

### Internal Table 與  Transparent table 的差別
**Transparent table**
ABAP Dictionary 中的表，儲存交易型資料，定義結構，資料庫

**Internal table**
建立在ABAP 程式內的變數，不在資料庫層級

![image](https://hackmd.io/_uploads/SklIILeWgl.png)


### Internal Table

1. 先建立 structure 
![截圖 2025-05-13 下午1.19.45](https://hackmd.io/_uploads/rk3dLLl-gl.png)

2. 使用Structure分別建立 Work Area 與 Interal table 
![image](https://hackmd.io/_uploads/BJ-n8Il-gx.png)

3. Work Area 填值
![截圖 2025-05-13 下午1.21.20](https://hackmd.io/_uploads/Hy2CU8lWlx.png)

4. Internal table Append!
![截圖 2025-05-13 下午1.21.51](https://hackmd.io/_uploads/H1igw8lZxx.png)

5. Work Area 填值
![截圖 2025-05-13 下午1.22.17](https://hackmd.io/_uploads/BJ4fvLx-gl.png)

6. Internal table Append!
![截圖 2025-05-13 下午1.22.39](https://hackmd.io/_uploads/Hk9mP8ebgl.png)

### 建立Internal Table的Type

![image](https://hackmd.io/_uploads/HJEoPIl-xl.png)


## 增刪改查、語法補充

### Return Code: sy-subrc

**常見系統變數 SY**
- ==SY-SUBRC==： (subroutine return code)
    - 系統執行某指令的Return Code
        - 前一個動作正確回傳0
        - 錯誤則是其他數字
- SY-UNAME：當前使用者username
- SY-DATUM：系統日期與時間
- ==SY-INDEX==：loop當前循環次數
- SY-MANDT：登入的client number
- SY-VLINE：畫垂直線
- SY-ULINE：畫水平線

### 增
![image](https://hackmd.io/_uploads/rJZ_dIxZxl.png)

### 刪
![image](https://hackmd.io/_uploads/HJfYu8ebgl.png)

### 改
![image](https://hackmd.io/_uploads/HkuY_8ebeg.png)

### 查
![image](https://hackmd.io/_uploads/SklaYOLlbgl.png)



## ABAP Dictionary

### What is ABAP Dictionary ?
SAP定義和管理資料的主要工具
負責操控、維護 ABAP 程式與資料庫 (Database) 之間的聯繫
可以用來定義系統中的各類資料對象，包括資料類型、資料表等

### ABAP 基本物件關係
![image](https://hackmd.io/_uploads/ryX1Y8g-xg.png)


## ABAP 程式語言

### ABAP  Program

#### 基礎
- 定義變數 (TYPE & DATA)
- 輸入 (PARAMETER)
- 輸出 (WRITE)
- 判斷式 (IF ELSE/CASE WHEN)
- 迴圈 (DO/WHILE/LOOP AT)
- 自訂函式 (PERFORM)

#### 特殊
WORK AREA
INTERNAL TABLE


### 以結構化程式設計歸納
- 循序(Sequential) :  WRITE, PARAMETER
- 選擇(Selection) :    IF…ELSE, CASE…WHEN
- 重複(Repeat) :       DO...TIMES, WHILE

![image](https://hackmd.io/_uploads/BkPFtLlZee.png)

## Modulation

### Modulation Overview


All ABAP programs are modular in structure and made up of processing. There are 2 types of processing blocks
1. Called from **outside a program** by the ABAP runtime system
2. Called by ABAP statements in **ABAP programs**.

建立副程式(subroutine)需考慮:
- **高內聚力(cohesion)**: 一個模組內只專注完成一件工作。
- **低耦合力(coupling)**: 模組與之間的互不影響，僅靠參數傳遞。

### Called from ABAP Program
- **Subroutine** -  內部 (local)
It is a reusable section of code.
- **Function Module** - 外部 (global)
可在SAP系統之間共享。
- **Method** – OOP 物件導向
It refers to a specific function or procedure within a class. It is a way of organizing and encapsulating code related to a specific task or behavior.
    - 封裝 (Encapsulation)
    - 繼承 (Inheritance)
    - 多型 (Polymorphism)

![image](https://hackmd.io/_uploads/HycWcIx-lg.png)


### Subroutine
- 主程式：透過 PERFORM 來呼叫子程式。
- 子程式：由 FORM 開頭，ENDFORM 結尾。
(可從當前程式及外部程式呼叫，也可以在Subroutuine內呼叫另一個Subroutuine)

![image](https://hackmd.io/_uploads/ryJVqUx-gl.png)

#### Call by Value

![image](https://hackmd.io/_uploads/ryVB58xbxg.png)


#### Call by Reference
![image](https://hackmd.io/_uploads/HyVU58gWxg.png)

#### Call by Value and Result
![image](https://hackmd.io/_uploads/HJUxoIl-xe.png)

## Screens

### Selection Screen
- 使用者輸入欲查詢的條件範圍，系統從資料庫中讀取資料並顯示報表
- 可讓使用者根據以下方式，選擇輸入方式：
    - 單一欄位搜尋 PARAMETERS
![image](https://hackmd.io/_uploads/H1UHoIgWlg.png)
    - 進階搜尋 SELECT-OPTIONS
![image](https://hackmd.io/_uploads/SkKSjLxWge.png)

### 什麼是 Screen?
1. 即為一般所指的 Graphical User Interface (GUI)
2. 可與使用者互動 (對話程式；Dialog program)，使畫面變化更多，可跨多個 screens 執行程式。
![image](https://hackmd.io/_uploads/Sk3wjIxblg.png)


### Screen Layout

![image](https://hackmd.io/_uploads/rkTYoUg-ge.png)


### SAP 的 Flow Logic Control
一個Dialog Program通常會包含PBO與PAI模組，透過Screen的Flow Logic來呼叫。

**程式執行的呼叫順序:**
- **PBO (Process Before Output) module**
      設定 Screen 在顯示前預先處理的動作，一般用來設定預設值，例如: 清空欄位。

- **PAI (Process After Input) module**
      設定 Screen 在使用者輸入後須處理的動作，例如: 呼叫下一個 Screen
![image](https://hackmd.io/_uploads/SJ1sj8l-gl.png)

## BAPI

### BAPI

**B**usiness **A**pplication **P**rogramming **I**nterface


**API**(Application Programming Interface)是廠商提供的連線接口
有預先寫好的 functions 可以提供給第三方開發者使用
給予 functions 指定的參數，可回傳想要的結果
BAPI 是基於 ABAP 語言

### Tcode: BAPI
![image](https://hackmd.io/_uploads/B1jyn8lWxe.png)

### Standard Operating Procedures (SOP)
![image](https://hackmd.io/_uploads/rJTg2Ulbxx.png)

#### Step1: 建立 Structure
![image](https://hackmd.io/_uploads/SydU38xZex.png)

#### Step2: 建立 Function Group
![image](https://hackmd.io/_uploads/ryWPhIl-eg.png)

#### Step3: 建立 Function Module
![image](https://hackmd.io/_uploads/SyuwnIgZxe.png)


#### Step4: 建立 Business Object Type
![image](https://hackmd.io/_uploads/BJZO3UgWxe.png)


#### 測試已建置的 BAPI
![image](https://hackmd.io/_uploads/S1DonUeZll.png)

#### BAPI 測試結果
![image](https://hackmd.io/_uploads/Bk3j2Ix-ge.png)

### Business Object 架構
![image](https://hackmd.io/_uploads/rkah2LeWel.png)


## SAP JCo (Java Connector)

### Java Connector (JCo) 特色
- JCo 是 Java 跟 SAP 的中介層
- 可讓更多 Java 工程師簡單上手 SAP 開發
- 透過 Remote function call (RFC) 連結，可雙向溝通
- Java 可攜帶性高，可跨平台開發

![image](https://hackmd.io/_uploads/SyfkaUx-xl.png)
