用途
该技能用于解释 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 发现、深度(概览或详细)。
技能执行步骤包括:
- 读取对象:解析类型、读取源代码、获取方法列表(类)、获取结构化字段列表(CDS 实体)、读取相关工件、遍历 RAP 图(行为定义)、读取完整代码树(函数组)。
- 获取依赖上下文:通过 SAPContext 自动提取依赖并获取压缩的公共 API 契约。
- 可选运行 ATC 检查:按优先级分组发现,检查快速修复标志。
- 可选使用 mcp-sap-docs 研究:搜索不熟悉的 SAP API、ATC 发现解释、SAP Notes。
- 解释:呈现结构化解释,包括摘要、公共 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 解释。