# ABAP w Maguyva: grafy klas dla własnego kodu SAP

Canonical source: https://maguyva.ai/pl/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 obsługuje ABAP przez AST, symbole i graf, dzięki czemu agenci AI mapują klasy, interfejsy, redefinicje i wyjątki we własnym kodzie SAP.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .abap
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Zespoły SAP, które trzymają własny ABAP w Gicie jako pliki źródłowe `.abap` i muszą go zrozumieć przed migracją lub przeglądem clean core.
- Obiektowe zasoby ABAP, w których hierarchie klas, interfejsy i redefinicje ukrywają, która implementacja faktycznie się wykonuje.
- Analizy wpływu wspierane przez agentów, w których pytanie brzmi: „co się zepsuje, jeśli ta klasa się zmieni?”

## Workflow agentów

- Zmapować, które klasy dziedziczą po klasie bazowej i które metody redefiniują.
- Znaleźć wszystkie klasy implementujące interfejs przed zmianą sygnatur jego metod.
- Prześledzić, gdzie klasa wyjątku jest zgłaszana i gdzie jest przechwytywana.

## Dlaczego warto zmapować ABAP przed jego zmianą

Własny ABAP często niesie dziesięciolecia reguł biznesowych. Kod jest w jednych miejscach obiektowy, w innych proceduralny, a to struktura dziedziczenia i interfejsów decyduje, która metoda się wykona. Czytanie klasy po klasie tego nie pokazuje.

Maguyva najpierw daje agentowi graf klas, więc plan zmiany zaczyna się od tego, co zależy od klasy, a nie od zgadywania.

## Co Maguyva wyodrębnia w ABAP

Maguyva parsuje kod źródłowy `.abap` za pomocą dedykowanej gramatyki ABAP. Symbole obejmują definicje i implementacje klas, interfejsy, deklaracje i implementacje metod oraz procedury `FORM`.

Graf zapisuje relacje, na których zależy programistom ABAP:

- Dziedziczenie z `CLASS ... INHERITING FROM`.
- Implementację interfejsów z `INTERFACES`.
- Nadpisania z `METHODS ... REDEFINITION`.
- Wyjątki z `RAISE EXCEPTION` i `CATCH`.
- Wywołania metod (`obj->m( )`, `cls=>m( )`, `CALL METHOD`), odwołania do typów z `TYPE` i `TYPE REF TO` oraz eksporty metod z sekcji publicznej przypisane do ich klasy.
- Odczyty, zapisy i przepływ sterowania (`IF`, `CASE`, `LOOP`, `TRY`) w ciałach metod.

## Przykładowe prompty dla agentów

- „Które klasy dziedziczą po `zcl_order_base` i które z jej metod redefiniują?” (`find_symbol`, potem `dependency_search` incoming)
- „Gdzie zgłaszany jest `zcx_pricing_error` i kto go przechwytuje?” (`dependency_search`)
- „Podsumuj, jak przepływ tworzenia dostaw przechodzi od raportu do klasy trwałości.” (`get_task_context`)

## Znane ograniczenia

- Open SQL (`SELECT ... FROM ... INTO`), `EXEC SQL` i `AUTHORITY-CHECK` nie są parsowane przez obecną gramatykę ABAP, więc odczyty tabel przez SQL nie są jeszcze krawędziami grafu. Do nazw tabel używaj `text_pattern_search`.
- Klauzule `INTERFACES` to relacje implementacji, a nie importy. W wyszukiwaniu strukturalnym jako importy wybierane są tylko instrukcje `INCLUDE`.
- Maguyva indeksuje ABAP przechowywany w repozytorium Git jako pliki `.abap`. Nie łączy się z systemem SAP.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). W przypadku innych systemów legacy zajrzyj do [przewodnika po COBOL-u](/pl/languages/cobol).

## Szczegóły silnika

- ABAP jest parsowany za pomocą dedykowanej gramatyki. Klasy, interfejsy, deklaracje i implementacje metod oraz procedury `FORM` są symbolami.
- Graf zapisuje dziedziczenie z `INHERITING FROM`, implementację z `INTERFACES`, nadpisania z `REDEFINITION`, `RAISE EXCEPTION` i `CATCH` oraz wywołania takie jak `obj->m( )` i `cls=>m( )`.
- Open SQL, `EXEC SQL` i `AUTHORITY-CHECK` nie są parsowane przez obecną gramatykę, więc odczyty tabel przez SQL nie są jeszcze krawędziami grafu.

## Przydatne punkty wejścia MCP

- `find_symbol`: Używaj go z nazwą klasy, interfejsu lub metody, gdy potrzebujesz definicji i odwołań.
- `dependency_search`: Przed zmianą użyj przejścia incoming na klasie bazowej lub interfejsie, aby znaleźć podklasy, implementacje i wywołujących.
- `text_pattern_search`: Używaj go do nazw tabel bazy danych i instrukcji SQL, których graf jeszcze nie obejmuje.
