# Maguyva में ABAP: कस्टम SAP कोड के लिए क्लास ग्राफ़

Canonical source: https://maguyva.ai/hi/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 कोड में क्लास, इंटरफ़ेस, redefinition और exception का नक्शा बना सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .abap
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- SAP टीमें, जो कस्टम ABAP को Git में `.abap` सोर्स फ़ाइलों के रूप में रखती हैं और माइग्रेशन या clean-core समीक्षा से पहले उसे समझना चाहती हैं।
- ऑब्जेक्ट-ओरिएंटेड ABAP परिवेश, जहाँ क्लास पदानुक्रम, इंटरफ़ेस और redefinition यह छिपा देते हैं कि असल में कौन-सा इम्प्लीमेंटेशन चलता है।
- एजेंट की मदद से होने वाला इम्पैक्ट एनालिसिस, जहाँ सवाल यह है: “यह क्लास बदली तो क्या टूटेगा?”

## एजेंट वर्कफ़्लो

- किसी बेस क्लास से इनहेरिट करने वाली क्लास और उनके रीडिफ़ाइन किए गए मेथड का नक्शा बनाना।
- मेथड सिग्नेचर बदलने से पहले किसी इंटरफ़ेस को इम्प्लीमेंट करने वाली सभी क्लास ढूँढना।
- कोई एक्सेप्शन क्लास कहाँ रेज़ होती है और कहाँ catch होती है, इसे ट्रेस करना।

## 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` से टाइप रेफ़रेंस, और पब्लिक-सेक्शन मेथड के export, जो उनकी क्लास से जोड़े जाते हैं।
- मेथड बॉडी के अंदर रीड, राइट और कंट्रोल फ़्लो (`IF`, `CASE`, `LOOP`, `TRY`)।

## एजेंट प्रॉम्प्ट के उदाहरण

- "कौन-सी क्लास `zcl_order_base` से इनहेरिट करती हैं, और वे उसके कौन-से मेथड रीडिफ़ाइन करती हैं?" (`find_symbol`, फिर incoming दिशा में `dependency_search`)
- "`zcx_pricing_error` कहाँ रेज़ होती है, और उसे कौन catch करता है?" (`dependency_search`)
- "डिलीवरी बनाने का फ़्लो रिपोर्ट से persistence क्लास तक कैसे जाता है, इसका सार दो।" (`get_task_context`)

## ज्ञात सीमाएँ

- Open SQL (`SELECT ... FROM ... INTO`), `EXEC SQL` और `AUTHORITY-CHECK` को मौजूदा ABAP व्याकरण पार्स नहीं करता, इसलिए SQL के ज़रिए टेबल रीड अभी ग्राफ़ एज नहीं हैं। टेबल नामों के लिए `text_pattern_search` इस्तेमाल करें।
- `INTERFACES` स्टेटमेंट इम्प्लीमेंटेशन संबंध हैं, इम्पोर्ट नहीं। स्ट्रक्चरल सर्च में सिर्फ़ `INCLUDE` स्टेटमेंट ही इम्पोर्ट के रूप में चुने जाते हैं।
- Maguyva उस ABAP को इंडेक्स करता है जो Git रिपॉज़िटरी में `.abap` फ़ाइलों के रूप में मौजूद है। यह SAP सिस्टम से कनेक्ट नहीं होता।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। दूसरे legacy परिवेशों के लिए [COBOL गाइड](/hi/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 स्टेटमेंट के लिए इस्तेमाल करें जिन्हें ग्राफ़ अभी कवर नहीं करता।
