跳转到内容
cd /languages
  • 企业核心
  • 编程语言
  • AST 和符号支持

Maguyva 的 ABAP 支持:面向 SAP 自定义代码的类图谱

Maguyva 以 AST、符号和图谱支持 ABAP,让 AI 智能体能够梳理 SAP 自定义代码中的类、接口、重定义和异常。

为什么值得在修改 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 的类型引用,以及归属到所属类的公共部分方法导出。
  • 方法体内的读取、写入和控制流(IF、CASE、LOOP、TRY)。

智能体提示词示例

  • “哪些类继承自 zcl_order_base,它们重定义了它的哪些方法?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “zcx_pricing_error 在哪里被抛出,谁捕获了它?”(dependency_search)
  • “概述交货单创建流程如何从报表走到持久化类。”(get_task_context)

已知限制

  • Open SQL(SELECT ... FROM ... INTO)、EXEC SQL 和 AUTHORITY-CHECK 在当前的 ABAP 语法中无法解析,因此通过 SQL 读取数据表暂时还不是图谱的边。查找表名请使用 text_pattern_search。
  • INTERFACES 子句是实现关系,而不是导入。在结构搜索中,只有 INCLUDE 语句会被选为导入。
  • Maguyva 索引的是以 .abap 文件形式存放在 Git 仓库中的 ABAP。它不会连接 SAP 系统。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。其他遗留系统请参阅 COBOL 指南。

最适合场景

  • > 把自定义 ABAP 以 `.abap` 源文件形式保存在 Git 中、需要在迁移或 clean core 评审前先读懂它的 SAP 团队。
  • > 面向对象的 ABAP 资产:类层次、接口和重定义让人看不清到底运行的是哪个实现。
  • > 智能体辅助的影响分析,核心问题是“这个类一改,会坏掉什么?”

智能体工作流

  • > 梳理哪些类继承自某个基类,以及它们重定义了哪些方法。
  • > 在修改方法签名之前,找出实现某个接口的所有类。
  • > 追踪某个异常类在哪里被抛出、在哪里被捕获。

引擎细节

  • > 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 语句。