mcpField
S
sap-clean-core-atc

sap-clean-core-atc

github.com/arc-mcp测试与质量239263 次安装2 天前更新
代码仓库

关于 sap-clean-core-atc

sap-clean-core-atc 用于按 Clean Core A–D 级别分类自定义 SAP 代码对象。它结合依赖分析、ATC 检查结果和 SAP API 发布数据,生成逐对象报告,支持云就绪评估与迁移规划。

主要功能

  1. 01盘点包或对象列表中的自定义对象
  2. 02提取引用的 SAP API
  3. 03运行 ATC 云就绪检查
  4. 04将 API 分为 Clean Core A–D 级
  5. 05报告逐对象风险和替代建议

适用场景

  1. 01评估自定义代码迁移至 SAP 云的准备情况
  2. 02升级前确定高风险对象的优先级
  3. 03规划 BTP 迁移或代码退役
  4. 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_cloudClean 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 | noAPI
  • complianceStatus — 相对于目标级别的 compliant | non_compliant
  • successorObjects — 对已弃用对象的替代建议

按 (object_type, object_name) 缓存结果——同一个 SAP 类常被多个 Z 对象引用。

如果数据集中找不到某个对象(found: false),则将其归类为 D(未知 / 无 API),并标记为需要人工审核。

步骤 4:汇总到每个对象的级别

每个自定义对象的级别取其 SAP 引用中的最高(最差)级别:

如果任何引用是……对象级别
DD
C(且没有 D)C
B(且没有 C/D)B
全部为 AA

记录每个对象的:

  • 对象级别(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: falseSAP 对象不在该版本状态数据集中分类为 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 配合使用)

评论

支持 Markdown