Spring til indhold
cd /languages
  • Virksomhedens kerne
  • Programmering
  • AST- og symbolunderstøttelse

ABAP i Maguyva: klassegrafer til egenudviklet SAP-kode

Maguyva understøtter ABAP med AST, symboler og graf, så AI-agenter kan kortlægge klasser, interfaces, redefinitioner og undtagelser i egenudviklet SAP-kode.

Hvorfor det betaler sig at kortlægge ABAP, før du ændrer det

Egenudviklet ABAP bærer ofte på årtiers forretningsregler. Koden er objektorienteret nogle steder og proceduremæssig andre steder, og det er nedarvnings- og interfacestrukturen, der afgør, hvilken metode der kører. Det ser man ikke ved at læse én klasse ad gangen.

Maguyva giver agenten klassegrafen først, så en ændringsplan tager udgangspunkt i det, der afhænger af en klasse, og ikke i et gæt.

Hvad Maguyva udtrækker i ABAP

Maguyva parser .abap-kildekode med en dedikeret ABAP-grammatik. Symbolerne omfatter klassedefinitioner og -implementeringer, interfaces, metodeerklæringer og -implementeringer samt FORM-rutiner.

Grafen registrerer de relationer, ABAP-udviklere går op i:

  • Nedarvning fra CLASS ... INHERITING FROM.
  • Interfaceimplementering fra INTERFACES.
  • Overskrivninger fra METHODS ... REDEFINITION.
  • Undtagelser fra RAISE EXCEPTION og CATCH.
  • Metodekald (obj->m( ), cls=>m( ), CALL METHOD), typereferencer fra TYPE og TYPE REF TO samt eksport af metoder i den offentlige sektion, tilskrevet deres klasse.
  • Læsninger, skrivninger og kontrolflow (IF, CASE, LOOP, TRY) i metodekroppe.

Eksempler på prompts til agenter

  • “Hvilke klasser arver fra zcl_order_base, og hvilke af dens metoder redefinerer de?” (find_symbol, derefter dependency_search incoming)
  • “Hvor kastes zcx_pricing_error, og hvem fanger den?” (dependency_search)
  • “Opsummer, hvordan flowet til oprettelse af leverancer går fra rapporten til persistensklassen.” (get_task_context)

Kendte begrænsninger

  • Open SQL (SELECT ... FROM ... INTO), EXEC SQL og AUTHORITY-CHECK parses ikke af den nuværende ABAP-grammatik, så tabellæsninger via SQL er endnu ikke kanter i grafen. Brug text_pattern_search til tabelnavne.
  • INTERFACES-klausuler er implementeringsrelationer, ikke importer. I strukturel søgning vælges kun INCLUDE-sætninger som importer.
  • Maguyva indekserer ABAP, der ligger i et Git-repository som .abap-filer. Den forbinder ikke til et SAP-system.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. Se guiden til COBOL for andre ældre miljøer.

Bedst egnet til

  • > SAP-teams, der gemmer egen ABAP i Git som `.abap`-kildefiler og skal forstå den før en migrering eller en clean core-gennemgang.
  • > Objektorienterede ABAP-miljøer, hvor klassehierarkier, interfaces og redefinitioner skjuler, hvilken implementering der faktisk kører.
  • > Agentunderstøttede konsekvensanalyser, hvor spørgsmålet er: "hvad går i stykker, hvis denne klasse ændres?"

Agent-arbejdsgange

  • > Kortlægge, hvilke klasser der arver fra en basisklasse, og hvilke metoder de redefinerer.
  • > Finde alle klasser, der implementerer et interface, før dets metodesignaturer ændres.
  • > Spore, hvor en undtagelsesklasse kastes, og hvor den fanges.

Motordetaljer

  • > ABAP parses med en dedikeret grammatik. Klasser, interfaces, metodeerklæringer og -implementeringer samt `FORM`-rutiner er symboler.
  • > Grafen registrerer nedarvning via `INHERITING FROM`, implementering via `INTERFACES`, overskrivninger via `REDEFINITION`, `RAISE EXCEPTION` og `CATCH` samt kald som `obj->m( )` og `cls=>m( )`.
  • > Open SQL, `EXEC SQL` og `AUTHORITY-CHECK` parses ikke af den nuværende grammatik, så tabellæsninger via SQL er endnu ikke kanter i grafen.

Nyttige MCP-indgange

  • find_symbol

    Brug det til et klasse-, interface- eller metodenavn, når du har brug for definitionen og referencerne.

  • dependency_search

    Brug incoming-gennemløb på en basisklasse eller et interface før en ændring for at finde subklasser, implementeringer og kaldere.

  • text_pattern_search

    Brug det til databasetabelnavne og SQL-sætninger, som grafen endnu ikke dækker.