Zum Inhalt springen
cd /languages
  • Enterprise-Kern
  • Programmierung
  • AST- und Symbol-Support

ABAP in Maguyva: Klassengraphen für SAP-Eigenentwicklungen

Maguyva unterstützt ABAP mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Interfaces, Redefinitionen und Ausnahmen in SAP-Eigenentwicklungen erfassen können.

Warum es sich lohnt, ABAP vor einer Änderung zu kartieren

Eigenes ABAP trägt oft Geschäftsregeln aus Jahrzehnten. Der Code ist stellenweise objektorientiert, stellenweise prozedural, und die Vererbungs- und Interface-Struktur entscheidet, welche Methode läuft. Wer eine Klasse nach der anderen liest, sieht das nicht.

Maguyva gibt einem Agenten zuerst den Klassengraphen. So beginnt ein Änderungsplan bei dem, was von einer Klasse abhängt, statt bei einer Vermutung.

Was Maguyva in ABAP extrahiert

Maguyva parst .abap-Quelltext mit einer eigenen ABAP-Grammatik. Zu den Symbolen gehören Klassendefinitionen und -implementierungen, Interfaces, Methodendeklarationen und -implementierungen sowie FORM-Routinen.

Der Graph erfasst die Beziehungen, auf die es ABAP-Entwicklern ankommt:

  • Vererbung aus CLASS ... INHERITING FROM.
  • Interface-Implementierung aus INTERFACES.
  • Overrides aus METHODS ... REDEFINITION.
  • Ausnahmen aus RAISE EXCEPTION und CATCH.
  • Methodenaufrufe (obj->m( ), cls=>m( ), CALL METHOD), Typreferenzen aus TYPE und TYPE REF TO sowie Exporte von Methoden der Public Section, die ihrer Klasse zugeordnet werden.
  • Lese- und Schreibzugriffe sowie Kontrollfluss (IF, CASE, LOOP, TRY) innerhalb von Methodenrümpfen.

Beispiel-Prompts für Agenten

  • „Welche Klassen erben von zcl_order_base, und welche ihrer Methoden redefinieren sie?“ (find_symbol, dann dependency_search incoming)
  • „Wo wird zcx_pricing_error ausgelöst, und wer fängt sie ab?“ (dependency_search)
  • „Fasse zusammen, wie der Ablauf zur Lieferungsanlage vom Report bis zur Persistenzklasse verläuft.“ (get_task_context)

Bekannte Grenzen

  • Open SQL (SELECT ... FROM ... INTO), EXEC SQL und AUTHORITY-CHECK lassen sich mit der aktuellen ABAP-Grammatik nicht parsen, daher sind Tabellenlesezugriffe über SQL noch keine Graphkanten. Verwende text_pattern_search für Tabellennamen.
  • INTERFACES-Klauseln sind Implementierungsbeziehungen, keine Importe. In der Struktursuche werden nur INCLUDE-Anweisungen als Importe ausgewählt.
  • Maguyva indexiert ABAP, das als .abap-Dateien in einem Git-Repository liegt. Es verbindet sich nicht mit einem SAP-System.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Für andere Legacy-Bestände lies den COBOL-Leitfaden.

Am besten geeignet

  • > SAP-Teams, die eigenes ABAP als `.abap`-Quelldateien in Git ablegen und es vor einer Migration oder einem Clean-Core-Review verstehen müssen.
  • > Objektorientierte ABAP-Bestände, in denen Klassenhierarchien, Interfaces und Redefinitionen verbergen, welche Implementierung tatsächlich läuft.
  • > Agentengestützte Auswirkungsanalysen, bei denen die Frage lautet: „Was bricht, wenn sich diese Klasse ändert?“

Agentenabläufe

  • > Erfassen, welche Klassen von einer Basisklasse erben und welche Methoden sie redefinieren.
  • > Jede Klasse finden, die ein Interface implementiert, bevor sich dessen Methodensignaturen ändern.
  • > Nachverfolgen, wo eine Ausnahmeklasse ausgelöst und wo sie abgefangen wird.

Engine-Einordnung

  • > ABAP wird mit einer eigenen Grammatik geparst. Klassen, Interfaces, Methodendeklarationen und -implementierungen sowie `FORM`-Routinen sind Symbole.
  • > Der Graph erfasst Vererbung über `INHERITING FROM`, Implementierung über `INTERFACES`, Overrides über `REDEFINITION`, `RAISE EXCEPTION` und `CATCH` sowie Aufrufe wie `obj->m( )` und `cls=>m( )`.
  • > Open SQL, `EXEC SQL` und `AUTHORITY-CHECK` lassen sich mit der aktuellen Grammatik nicht parsen, daher sind Tabellenlesezugriffe über SQL noch keine Graphkanten.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen Klassen-, Interface- oder Methodennamen, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz vor einer Änderung die eingehende Traversierung auf einer Basisklasse oder einem Interface, um Unterklassen, Implementierungen und Aufrufer zu finden.

  • text_pattern_search

    Nutz es für Datenbanktabellennamen und SQL-Anweisungen, die der Graph noch nicht abdeckt.