SuperAPI AI 工具集

explain-abap-code

编程与开发

查看项目

更新于 10-15 14:34

技能介绍

用途

该技能用于解释 ABAP 对象,提供完整的依赖上下文,并可选进行 ATC 代码质量分析。它复刻了 SAP Joule 的“Explain Code”能力,通过结合 ARC-1(SAP 系统访问)与 mcp-sap-docs(文档与最佳实践)实现,并借助 SAPContext 提供压缩的依赖图,从而超越 J4D。

主要能力

  • 自动检测对象类型(通过 SAPSearch),无需用户手动查找。
  • 默认深度为“概览”,用户可要求详细解释。
  • 默认不运行 ATC,仅在用户询问代码质量时执行。
  • 始终通过 SAPContext 获取依赖图。
  • 对于行为定义(BDEF),能从实现类子句中自动发现处理程序类。
  • 支持读取类、CDS 实体、行为定义、函数组等多种对象类型。
  • 可读取方法列表、结构化字段列表、相关工件(如测试类、行为定义、访问控制、元数据扩展)。
  • 对于函数组,可通过 expand_includes 一次性读取完整代码树。
  • 可运行 ATC 检查并按优先级分组发现,检查是否有快速修复。
  • 可借助 mcp-sap-docs 搜索 SAP API 文档、ATC 发现解释及 SAP Notes。

使用方式

用户提供 ABAP 对象名称(例如 ZCL_TRAVEL_HANDLER、ZI_SALESORDER、Z_REPORT_POSTING)。仅需对象名称即可,技能会自动检测类型并立即进行概览解释。用户可选指定对象类型、是否解释 ATC 发现、深度(概览或详细)。

技能执行步骤包括:

  1. 读取对象:解析类型、读取源代码、获取方法列表(类)、获取结构化字段列表(CDS 实体)、读取相关工件、遍历 RAP 图(行为定义)、读取完整代码树(函数组)。
  2. 获取依赖上下文:通过 SAPContext 自动提取依赖并获取压缩的公共 API 契约。
  3. 可选运行 ATC 检查:按优先级分组发现,检查快速修复标志。
  4. 可选使用 mcp-sap-docs 研究:搜索不熟悉的 SAP API、ATC 发现解释、SAP Notes。
  5. 解释:呈现结构化解释,包括摘要、公共 API、业务逻辑、行为定义(如适用)、依赖、安全/授权、代码质量(如运行 ATC)、后续选项。

适用场景

  • 加入不熟悉的代码库时。
  • 调查缺陷或理解现有行为时。
  • 迁移前审查代码质量时。
  • 为未记录的对象编写文档时。
  • 理解更改共享类或 CDS 视图的影响时。

限制

  • 不修改代码:仅读取和解释,从不写入或更改代码。
  • 不提供重构建议:如需改进建议,请使用 ATC 分析或迁移技能。
  • 不生成测试:如需生成测试,请使用 generate-abap-unit-test 或 generate-cds-unit-test 技能。
  • 不进行跨系统比较:一次只解释一个系统上的对象。
  • 屏幕流不可用:Dynpros(屏幕)和 GUI 状态(CUA)不通过 ADT over REST 暴露,仅限 SAPGUI(SE51/SE41),端点返回 404。因此对于函数组,可以解释业务目的、功能模块职责和流逻辑,但无法解释屏幕布局或 PBO-PAI 屏幕序列。
  • BTP 与本地部署差异:BTP 可用对象类型较少(无 PROG、INCL、FUGR),主要类型为 DDLS、DCLS、CLAS、INTF、BDEF、DDLX、SRVD,ATC 变体限于云就绪检查。本地部署支持全部对象类型和所有 ATC 变体,可解释遗留对象(FORM 例程、功能模块、经典报表)。
  • SAPContext 不支持 BDEF 类型,需对绑定的 CDS 根实体运行影响分析。

错误处理

常见问题及修复:

  • 对象未找到:名称拼写错误或对象不存在,使用 SAPSearch 查找相似名称。
  • SAPContext 失败:对象类型不支持依赖分析,回退到手动读取源代码中的关键依赖。
  • ATC 检查无发现:无 ATC 配置或代码干净,告知用户无发现是好消息。
  • ATC 变体未找到:指定变体在系统上不存在,运行默认 ATC,列出可用变体。
  • 方法列表为空:对象不是类或没有方法,跳过方法列表,仅从源代码解释。
  • 源代码为空:对象存在但无源代码(如生成的代理),告知用户,尝试读取相关对象。
  • SAPContext 拒绝 BDEF 类型:BDEF 不是支持的 SAPContext 类型,对绑定的 CDS 根实体运行 SAPContext(action="impact", name="<root_cds>")。
  • BDEF 池类未找到:投影 BDEF(无自己的池)或类名解析错误,跳过类读取,从投影的 use 子句和基础 BDEF 解释。