# Maguyva 對 ABAP 的支援：SAP 自訂程式碼的類別圖譜

Canonical source: https://maguyva.ai/zh-hant/languages/abap

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 以 AST、符號與圖譜支援 ABAP，讓 AI 代理能梳理 SAP 自訂程式碼中的類別、介面、重新定義與例外。

## 支援概況

- 等級: AST 與符號支援
- 程式語言
- 副檔名: .abap
- 真正的 AST 剖析，支援語法感知搜尋與結構化情境。
- 具名符號支援語意查詢與交叉參照。啟用關係擷取後，即可使用圖譜導覽。
- 這個語言會為圖譜感知搜尋提供符號與關係；支援的邊類型會隨其原生構造而異。
- 同時支援 AST 剖析與符號擷取。

## 最適合的情境

- 將自訂 ABAP 以 `.abap` 原始檔保存在 Git 中、需要在移轉或 clean core 審查前先讀懂它的 SAP 團隊。
- 物件導向的 ABAP 資產：類別階層、介面與重新定義，讓人看不清實際執行的是哪個實作。
- 由代理輔助的影響分析，核心問題是「這個類別一改，會壞掉什麼？」

## 代理工作流程

- 梳理哪些類別繼承自某個基底類別，以及它們重新定義了哪些方法。
- 在變更方法簽章之前，找出實作某個介面的所有類別。
- 追蹤某個例外類別在哪裡被引發、又在哪裡被捕捉。

## 為什麼值得在修改 ABAP 之前先把它梳理清楚

自訂 ABAP 往往承載著數十年的商業規則。程式碼有些地方是物件導向，有些地方是程序式，而繼承與介面結構決定了實際執行哪個方法。一次只讀一個類別，是看不出這些的。

Maguyva 會先把類別圖譜交給代理，於是變更計畫從「哪些東西依賴這個類別」出發，而不是從猜測出發。

## Maguyva 在 ABAP 中擷取了什麼

Maguyva 使用專用的 ABAP 語法剖析 `.abap` 原始碼。符號包括類別定義與實作、介面、方法宣告與實作，以及 `FORM` 常式。

圖譜記錄了 ABAP 開發者在意的關係：

- 來自 `CLASS ... INHERITING FROM` 的繼承。
- 來自 `INTERFACES` 的介面實作。
- 來自 `METHODS ... REDEFINITION` 的覆寫。
- 來自 `RAISE EXCEPTION` 與 `CATCH` 的例外。
- 方法呼叫（`obj->m( )`、`cls=>m( )`、`CALL METHOD`）、來自 `TYPE` 與 `TYPE REF TO` 的型別參照，以及歸屬到所屬類別的公開區段方法匯出。
- 方法本體內的讀取、寫入與控制流程（`IF`、`CASE`、`LOOP`、`TRY`）。

## 代理提示範例

- 「哪些類別繼承自 `zcl_order_base`，它們重新定義了它的哪些方法？」（先用 `find_symbol`，再用 `dependency_search` 的 incoming 方向）
- 「`zcx_pricing_error` 在哪裡被引發，又是誰捕捉了它？」（`dependency_search`）
- 「摘要說明出貨單建立流程如何從報表走到持久化類別。」（`get_task_context`）

## 已知限制

- Open SQL（`SELECT ... FROM ... INTO`）、`EXEC SQL` 與 `AUTHORITY-CHECK` 在目前的 ABAP 語法中無法剖析，因此透過 SQL 讀取資料表目前還不是圖譜的邊。查找資料表名稱請使用 `text_pattern_search`。
- `INTERFACES` 子句是實作關係，而不是匯入。在結構搜尋中，只有 `INCLUDE` 敘述會被選為匯入。
- Maguyva 索引的是以 `.abap` 檔案形式存放在 Git 儲存庫中的 ABAP。它不會連線到 SAP 系統。

## 下一步

透過[快速入門](/zh-hant/docs/quickstart)連接儲存庫，然後在[相容性頁面](/zh-hant/docs/compatibility)查看支援矩陣。其他舊系統資產請參閱 [COBOL 指南](/zh-hant/languages/cobol)。

## 引擎細節

- ABAP 使用專用語法剖析。類別、介面、方法宣告與實作，以及 `FORM` 常式都是符號。
- 圖譜會記錄 `INHERITING FROM` 繼承、`INTERFACES` 實作、`REDEFINITION` 覆寫、`RAISE EXCEPTION` 與 `CATCH`，以及 `obj->m( )`、`cls=>m( )` 這類呼叫。
- Open SQL、`EXEC SQL` 與 `AUTHORITY-CHECK` 在目前的語法中無法剖析，因此透過 SQL 讀取資料表目前還不是圖譜的邊。

## 實用的 MCP 進入點

- `find_symbol`: 需要定義與參照時，以類別、介面或方法名稱查找。
- `dependency_search`: 變更之前，對基底類別或介面使用 incoming 走訪，找出子類別、實作類別與呼叫端。
- `text_pattern_search`: 用於查找圖譜尚未涵蓋的資料庫資料表名稱與 SQL 敘述。
