关于 sap-clean-core-atc
sap-clean-core-atc 用于按 Clean Core A–D 级别分类自定义 SAP 代码对象。它结合依赖分析、ATC 检查结果和 SAP API 发布数据,生成逐对象报告,支持云就绪评估与迁移规划。
主要功能
- 01盘点包或对象列表中的自定义对象
- 02提取引用的 SAP API
- 03运行 ATC 云就绪检查
- 04将 API 分为 Clean Core A–D 级
- 05报告逐对象风险和替代建议
适用场景
- 01评估自定义代码迁移至 SAP 云的准备情况
- 02升级前确定高风险对象的优先级
- 03规划 BTP 迁移或代码退役
- 04检查整个包的 Clean Core 状态
MCP 相关
该技能使用 ARC-1 MCP 工具发现 SAP 对象、分析依赖、执行 ATC 检查并读取源代码。它还调用 mcp-sap-docs 对 SAP API 分类;若该服务不可用,则退化为仅基于 ATC 的分类。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ arc-mcp/ arc-1 --skill sap-clean-core-atc安装后在 Claude Code 中输入/sap-clean-core-atc确认已加载。
详细介绍
SAP Clean Core ATC 分类
盘点一个自定义代码包,并根据其使用的 SAP API,将每个 Z/Y 对象归入 Clean Core A–D 级——这是一项“是否已为云做好准备?”审计。
这与 migrate-custom-code 不同:该技能修复单个对象的 ATC 检查结果;此技能则生成覆盖整个包的分类报告,列出每个对象的级别,用于规划 Clean Core / BTP 迁移。它结合了 ARC-1(ATC + 源代码访问)与 mcp-sap-docs(来自 SAP/abap-atc-cr-cv-s4hc 的已发布 API 分类数据)。
Clean Core 级别(含义)
| 级别 | 含义 | 已为云做好准备? |
|---|---|---|
| A | 仅使用已发布的 SAP API | ✅ 是 — 可原样迁移到 ABAP Cloud / BTP |
| B | 使用经典 API(仅限本地部署,有文档记录) | 🟡 可在本地部署的 S/4HANA 上运行;迁移到云端需要重写 |
| C | 使用 SAP 内部 / 稳定对象(未向客户发布) | 🔴 当前受支持,但不保证 API 稳定 |
| D | 使用没有 API 状态的对象(深层内部对象、无文档记录) | 🔴 迁移风险高,升级时可能出问题 |
来源:SAP/abap-atc-cr-cv-s4hc — SAP 官方机器可读的发布状态列表。
这些是扩展性级别(SAP Note 3578329)——表示你的代码调用了哪些 SAP API。SAP 在 Note 3690029 中为集成技术另行定义了一套 A–D 级别(RFC、IDoc、SEGW OData、文件传输等),该级别“与这套级别互为补充,但不重叠”。字母相同, 评估维度不同:切勿将两者合并为一个分数。集成维度请参阅 sap-migration-dossier 的 Integration Interfaces 部分。
智能默认值(静默应用,切勿询问)
| 设置 | 默认值 | 原因 |
|---|---|---|
| 目标系统类型 | public_cloud | Clean Core 审计几乎总是针对云就绪情况 |
| ATC 变体 | 如果可用则使用 ABAP_CLOUD_READINESS,否则使用系统默认值 | 练习的目的就是检查云就绪情况;先用 atc_variants 确认名称 |
| 纳入范围 | Z*、Y*,以及用户指定的任何 /namespace/* | 仅检查客户代码;跳过 SAP 提供的代码 |
| 报告详情 | 汇总表 + 级别分布 + 主要违规项 | 提供可采取行动的概览;按需深入查看 |
输入
用户提供一个包(优先)或以逗号分隔的对象列表,并可选提供目标系统类型。
- 包(例如
Z_FI_CUSTOM):审计包中的所有自定义对象 - 对象列表(例如
ZCL_POSTING, ZR_SALES_REPORT):仅审计指定对象 - 目标系统类型:
public_cloud(默认)|btp|private_cloud|on_premise
如果用户既未提供包,也未提供对象列表,请询问要使用哪一种。切勿审计“所有内容”——用户绝不会想这么做。
步骤 1:枚举自定义对象
1a. 包路径
SAPRead(type="DEVC", name="<package>")
筛选结果,仅保留名称以 Z、Y 或客户命名空间开头的 PROG | CLAS | INTF | FUGR | FUNC | DDLS | BDEF | SRVD | TABL。跳过子包(单独审计),除非用户要求“递归”。
1b. 对象列表路径
对每个名称解析其类型:
SAPSearch(query="<name>")
使用第一个完全匹配项。
步骤 2:提取每个对象的 SAP API 引用
对每个自定义对象,收集其引用的 SAP 提供对象列表。
2a. 使用 SAPContext 提取依赖项
SAPContext(type="<type>", name="<object_name>", depth=1)
SAPContext 会返回依赖项列表。仅保留名称不以 Z/Y/客户命名空间开头的依赖项——这些是 SAP 引用。将每项记录为 (objectType, objectName)。
SAPContext 支持 CLAS、INTF、PROG、FUNC、DDLS(本地部署)以及 CLAS、INTF、DDLS(BTP)。对于其他类型(FUGR、BDEF、SRVD、TABL),改为使用 SAPRead 读取源代码,并通过对各行执行正则表达式扫描来提取 SAP 类 / 接口 / 函数引用(例如 CL_*、IF_*、SAP*、CALL FUNCTION '...')。在报告中将这些引用标记为“static-scan”,以便用户了解其可信度低于基于 AST 提取的依赖项。
2b. 同时运行 ATC 检查云就绪情况
SAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="ABAP_CLOUD_READINESS")
如果系统上不存在 ABAP_CLOUD_READINESS,ARC-1 会拒绝此调用,而不是静默运行 DEFAULT——使用 SAPDiagnose(action="atc_variants") 列出实际名称并选择一个,或者省略 variant,以绑定系统配置的默认值(systemCheckVariant),并在报告中注明选择。本地部署系统通常附带 S4HANA_READINESS_<release>(例如 S4HANA_READINESS_2023)或 SAP_CLOUD_PLATFORM_DEFAULT,而不是 ABAP_CLOUD_READINESS。ATC 检查结果可补充 API 分类——已发布的 API 仍可能被错误使用。
ATC 会跳过
$TMP/ 本地对象(已在 S/4HANA 2023 上实时验证)。 针对$TMP对象运行检查时,会解析为空对象集并返回零条发现——这表示“未检查”,而不是“干净”。仅对可传输包进行包级分类。如果包是本地包 /$TMP,请在报告中注明 ATC 结果不可用,并仅使用 mcp-sap-docs API 分类作为替代。对于你预期会被标记的代码,如果发现数量为 0,几乎总是遇到了$TMP陷阱,而不是代码没有问题。
步骤 3:通过 mcp-sap-docs 对每个 SAP 引用进行分类
对于自定义代码引用的每个唯一 SAP 对象:
sap_get_object_details(object_type="<type>", object_name="<name>", system_type="<target>", target_clean_core_level="A")
此操作会返回:
cleanCoreLevel— A、B、C 或 D。这是扩展性维度(Note 3578329);为sap-migration-dossier卡片提供数据时,将其映射到extensibilityLevel,以免与集成级别混淆state— released | deprecated | classicAPI | stable | notToBeReleased | noAPIcomplianceStatus— 相对于目标级别的compliant|non_compliantsuccessorObjects— 对已弃用对象的替代建议
按 (object_type, object_name) 缓存结果——同一个 SAP 类常被多个 Z 对象引用。
如果数据集中找不到某个对象(found: false),则将其归类为 D(未知 / 无 API),并标记为需要人工审核。
步骤 4:汇总到每个对象的级别
每个自定义对象的级别取其 SAP 引用中的最高(最差)级别:
| 如果任何引用是…… | 对象级别 |
|---|---|
| D | D |
| C(且没有 D) | C |
| B(且没有 C/D) | B |
| 全部为 A | A |
记录每个对象的:
- 对象级别(A/B/C/D)
- 引用明细(各级别的数量)
- 最差的 3 个引用及其后继对象(如果有)
- ATC 云就绪检查发现数量(优先级 1/2/3)
步骤 5:生成报告
5a. 标题摘要
Clean Core Audit — <package_or_list>
Target system: <target> ATC variant: <variant>
Objects audited: 42
Level A: 12 (29%) — ready for ABAP Cloud as-is
Level B: 18 (43%) — on-prem only; rewrite for cloud
Level C: 8 (19%) — uses internal APIs; plan replacement
Level D: 4 (9%) — high risk; manual review required
5b. 各级别表格
按级别逐一展示(从 D 开始,依次向下——先列最差级别):
Level D — High Risk (4 objects)
Object Non-compliant refs Top violation ATC P1
ZCL_MIGRATION_HELPER 8 CL_SALV_TREE_WRAPPER 3
ZR_OLD_POSTING 12 SAPLSMTR_NAVIGATION 5
...
5c. 替换建议(仅限级别 B/C/D)
对于引用次数最多的前 10 个已弃用 API,显示 {deprecated → successor} 配对及其数量:
CL_GUI_ALV_GRID (used in 18 Z-objects) → CL_SALV_TABLE (A)
CL_IXML (used in 12 Z-objects) → XML transformations (A)
...
5d. 后续选项
提供后续步骤:
- “想查看级别 D 对象的详细信息吗?”(深入分析风险最高的 4 个)
- “想现在迁移其中一个对象吗?”(→ migrate-custom-code)
- “想看看哪些 Z 对象实际被使用了吗?”(→ sap-unused-code——迁移死代码没有意义)
- “想将级别 A 对象整理为参考示例吗?”(→ sap-object-documenter)
- “想要一份经过审核的资料包,其中包含已保存的证据、客户问题和可视化内容吗?”(→ sap-migration-dossier)
错误处理
| 错误 | 原因 | 修复方法 |
|---|---|---|
sap_get_object_details 返回 found: false | SAP 对象不在该版本状态数据集中 | 分类为 D,并标记为需要人工审核;数据集仅涵盖 S/4HANA |
找不到 ABAP_CLOUD_READINESS 变体 | 系统未配置该变体(这是硬错误,不会静默回退) | 通过 SAPDiagnose(action="atc_variants") 列出名称,并选择最接近的变体;或者省略 variant,使用系统默认值;在报告中注明检查结果针对云环境的特异性较低 |
| 对象类型不支持 SAPContext | 例如动态程序、生成的代码 | 回退到对源代码进行正则扫描,查找 CL_*、IF_*、SAP* 模式 |
| 包为空 | 拼写错误,或该包仅为结构包 | 通过 SAPSearch 验证;请用户选择一个子包 |
| mcp-sap-docs 未连接 | 缺少 MCP 服务 | 技能将降级为仅使用 ATC 进行分类;警告用户 |
注意事项
本技能不是什么
- 不是迁移工具——它用于分类风险;要实际修复,请使用 migrate-custom-code。
- 不能替代 SAP 的 Custom Code Migration 应用——该工具更全面(运行时使用情况分析、简化数据库、传输影响)。本技能是快速且适合 LLM 的近似方案。
- 准确性取决于 mcp-sap-docs 数据集的新鲜度——SAP/abap-atc-cr-cv-s4hc 仓库会随 S/4HANA 版本更新。
BTP 与本地部署
- BTP 审计(
system_type=btp):B 级别将被判定为不合规——BTP 仅接受 A 级别。要求比 public_cloud 更严格。 - 本地部署审计(
system_type=on_premise):A 级别和 B 级别均合规。如果目标是“我的自定义代码能否经受下一次 S/4HANA 升级?”,而不是“我能否在云端运行?”,请使用此选项。
何时使用本技能
- 规划从 ECC 迁移到 S/4HANA Cloud
- 规划从 ECC 迁移到 BTP 上的 ABAP Cloud
- 每季度进行自定义代码健康检查
- 重大版本升级前(以便尽早标记高风险对象)
- 确定自定义代码退役项目的范围(与 sap-unused-code 配合使用)