# ABAP trên Maguyva: đồ thị lớp cho mã SAP tùy chỉnh

Canonical source: https://maguyva.ai/vi/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 hỗ trợ ABAP với AST, ký hiệu và đồ thị, để agent AI có thể lập bản đồ lớp, interface, định nghĩa lại và ngoại lệ trong mã SAP tùy chỉnh.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .abap
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Các nhóm SAP lưu ABAP tùy chỉnh trong Git dưới dạng tệp nguồn `.abap` và cần hiểu nó trước một đợt di chuyển hoặc review clean core.
- Môi trường ABAP hướng đối tượng, nơi hệ thống phân cấp lớp, interface và định nghĩa lại che khuất phần triển khai thực sự chạy.
- Phân tích tác động có agent hỗ trợ, nơi câu hỏi là: “nếu lớp này thay đổi thì cái gì sẽ hỏng?”

## Workflow agent

- Lập bản đồ các lớp kế thừa từ một lớp cơ sở và các phương thức chúng định nghĩa lại.
- Tìm mọi lớp triển khai một interface trước khi chữ ký phương thức của nó thay đổi.
- Lần theo nơi một lớp ngoại lệ được raise và nơi nó được catch.

## Vì sao nên lập bản đồ ABAP trước khi thay đổi

ABAP tùy chỉnh thường mang theo quy tắc nghiệp vụ tích lũy qua hàng chục năm. Mã có chỗ hướng đối tượng, có chỗ thủ tục, và cấu trúc kế thừa cùng interface quyết định phương thức nào sẽ chạy. Điều đó không thể thấy khi bạn đọc từng lớp một.

Maguyva đưa cho agent đồ thị lớp trước, để kế hoạch thay đổi bắt đầu từ những gì phụ thuộc vào một lớp chứ không từ phỏng đoán.

## Maguyva trích xuất gì từ ABAP

Maguyva phân tích mã nguồn `.abap` bằng một ngữ pháp ABAP chuyên biệt. Ký hiệu bao gồm định nghĩa và triển khai lớp, interface, khai báo và triển khai phương thức, cùng các routine `FORM`.

Đồ thị ghi lại những quan hệ quan trọng với lập trình viên ABAP:

- Kế thừa từ `CLASS ... INHERITING FROM`.
- Triển khai interface từ `INTERFACES`.
- Ghi đè từ `METHODS ... REDEFINITION`.
- Ngoại lệ từ `RAISE EXCEPTION` và `CATCH`.
- Lời gọi phương thức (`obj->m( )`, `cls=>m( )`, `CALL METHOD`), tham chiếu kiểu từ `TYPE` và `TYPE REF TO`, và việc export phương thức ở phần public, được gán cho lớp của chúng.
- Đọc, ghi và luồng điều khiển (`IF`, `CASE`, `LOOP`, `TRY`) bên trong thân phương thức.

## Ví dụ prompt cho agent

- "Những lớp nào kế thừa từ `zcl_order_base`, và chúng định nghĩa lại những phương thức nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "`zcx_pricing_error` được raise ở đâu, và ai catch nó?" (`dependency_search`)
- "Tóm tắt luồng tạo giao hàng đi từ báo cáo tới lớp lưu trữ như thế nào." (`get_task_context`)

## Giới hạn đã biết

- Open SQL (`SELECT ... FROM ... INTO`), `EXEC SQL` và `AUTHORITY-CHECK` chưa được ngữ pháp ABAP hiện tại phân tích, nên thao tác đọc bảng qua SQL chưa phải là cạnh đồ thị. Hãy dùng `text_pattern_search` cho tên bảng.
- Câu lệnh `INTERFACES` là quan hệ triển khai, không phải nhập. Trong tìm kiếm cấu trúc, chỉ câu lệnh `INCLUDE` được chọn làm nhập.
- Maguyva lập chỉ mục ABAP nằm trong kho Git dưới dạng tệp `.abap`. Nó không kết nối với hệ thống SAP.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Với các môi trường cũ khác, hãy xem [hướng dẫn COBOL](/vi/languages/cobol).

## Chi tiết engine

- ABAP được phân tích bằng một ngữ pháp chuyên biệt. Lớp, interface, khai báo và triển khai phương thức, và routine `FORM` đều là ký hiệu.
- Đồ thị ghi lại kế thừa qua `INHERITING FROM`, triển khai qua `INTERFACES`, ghi đè qua `REDEFINITION`, `RAISE EXCEPTION` và `CATCH`, cùng các lời gọi như `obj->m( )` và `cls=>m( )`.
- Open SQL, `EXEC SQL` và `AUTHORITY-CHECK` chưa được ngữ pháp hiện tại phân tích, nên thao tác đọc bảng qua SQL chưa phải là cạnh đồ thị.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng với tên lớp, interface hoặc phương thức khi bạn cần định nghĩa và các tham chiếu.
- `dependency_search`: Trước khi thay đổi, dùng duyệt theo chiều vào trên một lớp cơ sở hoặc interface để tìm lớp con, phần triển khai và nơi gọi.
- `text_pattern_search`: Dùng cho tên bảng cơ sở dữ liệu và câu lệnh SQL mà đồ thị chưa bao phủ.
