跳至主要內容
cd /languages
  • 企業核心
  • 程式語言
  • AST 與符號支援

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

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

為什麼值得在修改 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 系統。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。其他舊系統資產請參閱 COBOL 指南。

最適合的情境

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

代理工作流程

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

引擎細節

  • > 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 敘述。