# ABAP i Maguyva: klassgrafer för egenutvecklad SAP-kod

Canonical source: https://maguyva.ai/sv/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 stöder ABAP med AST, symboler och graf, så att AI-agenter kan kartlägga klasser, gränssnitt, omdefinitioner och undantag i egenutvecklad SAP-kod.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .abap
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

## Bäst lämpad för

- SAP-team som lagrar egen ABAP i Git som `.abap`-källfiler och behöver förstå den före en migrering eller en clean core-granskning.
- Objektorienterade ABAP-miljöer där klasshierarkier, gränssnitt och omdefinitioner döljer vilken implementation som faktiskt körs.
- Agentstödda konsekvensanalyser där frågan är: "vad går sönder om den här klassen ändras?"

## Agentarbetsflöden

- Kartlägga vilka klasser som ärver från en basklass och vilka metoder de omdefinierar.
- Hitta alla klasser som implementerar ett gränssnitt innan dess metodsignaturer ändras.
- Spåra var en undantagsklass kastas och var den fångas.

## Varför det lönar sig att kartlägga ABAP innan du ändrar det

Egenutvecklad ABAP bär ofta på årtionden av affärsregler. Koden är objektorienterad på vissa ställen och procedurell på andra, och arvs- och gränssnittsstrukturen avgör vilken metod som körs. Det syns inte om man läser en klass i taget.

Maguyva ger agenten klassgrafen först, så att en ändringsplan utgår från det som beror på en klass i stället för från en gissning.

## Vad Maguyva extraherar i ABAP

Maguyva parsar `.abap`-källkod med en egen ABAP-grammatik. Symbolerna omfattar klassdefinitioner och -implementationer, gränssnitt, metoddeklarationer och -implementationer samt `FORM`-rutiner.

Grafen registrerar de relationer som ABAP-utvecklare bryr sig om:

- Arv från `CLASS ... INHERITING FROM`.
- Gränssnittsimplementation från `INTERFACES`.
- Överskrivningar från `METHODS ... REDEFINITION`.
- Undantag från `RAISE EXCEPTION` och `CATCH`.
- Metodanrop (`obj->m( )`, `cls=>m( )`, `CALL METHOD`), typreferenser från `TYPE` och `TYPE REF TO` samt exporter av metoder i den publika sektionen som tillskrivs sin klass.
- Läsningar, skrivningar och kontrollflöde (`IF`, `CASE`, `LOOP`, `TRY`) i metodkroppar.

## Exempel på prompter för agenter

- "Vilka klasser ärver från `zcl_order_base`, och vilka av dess metoder omdefinierar de?" (`find_symbol`, sedan `dependency_search` incoming)
- "Var kastas `zcx_pricing_error`, och vem fångar den?" (`dependency_search`)
- "Sammanfatta hur flödet för att skapa leveranser går från rapporten till persistensklassen." (`get_task_context`)

## Kända begränsningar

- Open SQL (`SELECT ... FROM ... INTO`), `EXEC SQL` och `AUTHORITY-CHECK` parsas inte av den nuvarande ABAP-grammatiken, så tabelläsningar via SQL är ännu inte kanter i grafen. Använd `text_pattern_search` för tabellnamn.
- `INTERFACES`-satser är implementationsrelationer, inte importer. I strukturell sökning väljs bara `INCLUDE`-satser som importer.
- Maguyva indexerar ABAP som ligger i ett Git-repo som `.abap`-filer. Den ansluter inte till ett SAP-system.

## Nästa steg

Anslut ett repo med [snabbstarten](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För andra äldre miljöer, se [guiden för COBOL](/sv/languages/cobol).

## Motordetaljer

- ABAP parsas med en egen grammatik. Klasser, gränssnitt, metoddeklarationer och -implementationer samt `FORM`-rutiner är symboler.
- Grafen registrerar arv via `INHERITING FROM`, implementation via `INTERFACES`, överskrivningar via `REDEFINITION`, `RAISE EXCEPTION` och `CATCH` samt anrop som `obj->m( )` och `cls=>m( )`.
- Open SQL, `EXEC SQL` och `AUTHORITY-CHECK` parsas inte av den nuvarande grammatiken, så tabelläsningar via SQL är ännu inte kanter i grafen.

## Användbara MCP-ingångar

- `find_symbol`: Använd det för ett klass-, gränssnitts- eller metodnamn när du behöver definitionen och referenserna.
- `dependency_search`: Använd incoming-traversering på en basklass eller ett gränssnitt före en ändring för att hitta subklasser, implementationer och anropare.
- `text_pattern_search`: Använd det för databastabellnamn och SQL-satser som grafen ännu inte täcker.
