# ABAP บน Maguyva: กราฟคลาสสำหรับโค้ด SAP ที่พัฒนาเอง

Canonical source: https://maguyva.ai/th/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 รองรับ ABAP ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ทำแผนที่คลาส อินเทอร์เฟซ การนิยามใหม่ และเอกซ์เซปชันในโค้ด SAP ที่พัฒนาเองได้

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .abap
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- ทีม SAP ที่เก็บ ABAP ที่พัฒนาเองไว้ใน Git เป็นไฟล์ซอร์ส `.abap` และต้องเข้าใจโค้ดก่อนการย้ายระบบหรือการรีวิวแบบ clean core
- สภาพแวดล้อม ABAP เชิงวัตถุที่ลำดับชั้นคลาส อินเทอร์เฟซ และการนิยามใหม่ซ่อนไว้ว่าการทำงานใดถูกเรียกจริง
- การวิเคราะห์ผลกระทบที่มีเอเจนต์ช่วย ซึ่งคำถามคือ “ถ้าคลาสนี้เปลี่ยน อะไรจะพัง”

## เวิร์กโฟลว์ของเอเจนต์

- ทำแผนที่คลาสที่สืบทอดจากคลาสฐาน และเมธอดที่คลาสเหล่านั้นนิยามใหม่
- หาคลาสทั้งหมดที่อิมพลีเมนต์อินเทอร์เฟซหนึ่ง ก่อนเปลี่ยนซิกเนเจอร์ของเมธอด
- ติดตามว่าคลาสเอกซ์เซปชันถูกโยนที่ใดและถูก catch ที่ใด

## ทำไมควรทำแผนที่ ABAP ก่อนแก้ไข

ABAP ที่พัฒนาเองมักบรรจุกฎทางธุรกิจที่สะสมมาหลายสิบปี โค้ดบางส่วนเป็นเชิงวัตถุ บางส่วนเป็นเชิงกระบวนการ และโครงสร้างการสืบทอดกับอินเทอร์เฟซเป็นตัวตัดสินว่าเมธอดใดจะทำงาน สิ่งนี้มองไม่เห็นเมื่ออ่านทีละคลาส

Maguyva ให้กราฟคลาสกับเอเจนต์ก่อน เพื่อให้แผนการเปลี่ยนแปลงเริ่มจากสิ่งที่พึ่งพาคลาสนั้น ไม่ใช่จากการเดา

## Maguyva ดึงอะไรจาก ABAP ได้บ้าง

Maguyva แยกวิเคราะห์ซอร์ส `.abap` ด้วยไวยากรณ์เฉพาะของ ABAP สัญลักษณ์ครอบคลุมนิยามและการอิมพลีเมนต์คลาส อินเทอร์เฟซ การประกาศและการอิมพลีเมนต์เมธอด และรูทีน `FORM`

กราฟบันทึกความสัมพันธ์ที่นักพัฒนา ABAP ให้ความสำคัญ:

- การสืบทอดจาก `CLASS ... INHERITING FROM`
- การอิมพลีเมนต์อินเทอร์เฟซจาก `INTERFACES`
- การ override จาก `METHODS ... REDEFINITION`
- เอกซ์เซปชันจาก `RAISE EXCEPTION` และ `CATCH`
- การเรียกเมธอด (`obj->m( )`, `cls=>m( )`, `CALL METHOD`) การอ้างอิงชนิดข้อมูลจาก `TYPE` และ `TYPE REF TO` และการ export เมธอดในส่วนสาธารณะ ซึ่งระบุว่าเป็นของคลาสนั้น
- การอ่าน การเขียน และโฟลว์การควบคุม (`IF`, `CASE`, `LOOP`, `TRY`) ภายในตัวเมธอด

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "คลาสใดสืบทอดจาก `zcl_order_base` และนิยามเมธอดใดใหม่บ้าง" (`find_symbol` แล้วตามด้วย `dependency_search` ทิศทางขาเข้า)
- "`zcx_pricing_error` ถูกโยนที่ใด และใครเป็นผู้ catch" (`dependency_search`)
- "สรุปว่าโฟลว์การสร้างการส่งมอบเดินจากรีพอร์ตไปยังคลาสจัดเก็บข้อมูลอย่างไร" (`get_task_context`)

## ข้อจำกัดที่ทราบ

- ไวยากรณ์ ABAP ปัจจุบันไม่แยกวิเคราะห์ Open SQL (`SELECT ... FROM ... INTO`), `EXEC SQL` และ `AUTHORITY-CHECK` การอ่านตารางผ่าน SQL จึงยังไม่เป็นเส้นเชื่อมในกราฟ ใช้ `text_pattern_search` สำหรับชื่อตาราง
- คำสั่ง `INTERFACES` เป็นความสัมพันธ์การอิมพลีเมนต์ ไม่ใช่การนำเข้า ในการค้นหาเชิงโครงสร้าง มีเพียงคำสั่ง `INCLUDE` ที่ถูกเลือกเป็นการนำเข้า
- Maguyva ทำดัชนี ABAP ที่อยู่ในรีโพซิทอรี Git เป็นไฟล์ `.abap` และไม่เชื่อมต่อกับระบบ SAP

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) สำหรับสภาพแวดล้อมรุ่นเก่าอื่น ๆ ดู[คู่มือภาษา COBOL](/th/languages/cobol)

## รายละเอียดเอนจิน

- ABAP ถูกแยกวิเคราะห์ด้วยไวยากรณ์เฉพาะ คลาส อินเทอร์เฟซ การประกาศและการอิมพลีเมนต์เมธอด และรูทีน `FORM` ล้วนเป็นสัญลักษณ์
- กราฟบันทึกการสืบทอดผ่าน `INHERITING FROM` การอิมพลีเมนต์ผ่าน `INTERFACES` การ override ผ่าน `REDEFINITION` รวมถึง `RAISE EXCEPTION` และ `CATCH` และการเรียกอย่าง `obj->m( )` และ `cls=>m( )`
- ไวยากรณ์ปัจจุบันไม่แยกวิเคราะห์ Open SQL, `EXEC SQL` และ `AUTHORITY-CHECK` การอ่านตารางผ่าน SQL จึงยังไม่เป็นเส้นเชื่อมในกราฟ

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้กับชื่อคลาส อินเทอร์เฟซ หรือเมธอด เมื่อต้องการนิยามและการอ้างอิง
- `dependency_search`: ก่อนการเปลี่ยนแปลง ใช้การท่องกราฟทิศทางขาเข้าบนคลาสฐานหรืออินเทอร์เฟซ เพื่อหาคลาสลูก การอิมพลีเมนต์ และผู้เรียก
- `text_pattern_search`: ใช้กับชื่อตารางฐานข้อมูลและคำสั่ง SQL ที่กราฟยังไม่ครอบคลุม
