# 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)