mcpField
S
sap-migration-dossier

sap-migration-dossier

github.com/arc-mcp开发239227 次安装2 天前更新
代码仓库

关于 sap-migration-dossier

此技能将 ARC-1 迁移分析能力整合为 SAP 迁移规划档案,面向需要评估代码与集成范围的团队。默认提供简明报告,并可按需扩展为文件、图表或人工审核材料。

主要功能

  1. 01按包、命名空间或对象确定范围
  2. 02汇总对象清单与迁移信号
  3. 03分析 ATC 与 Clean Core 风险
  4. 04按需评估集成技术等级
  5. 05标注证据缺口并建议后续步骤

适用场景

  1. 01为 SAP 包或命名空间制定迁移规划
  2. 02识别高风险对象与可能退役的代码
  3. 03评估 RFC、IDoc 或 OData 集成状况

MCP 相关

该技能使用 ARC-1 检查 SAP 对象并收集证据;可用时使用 SAP Docs MCP 补充 API 状态、替代 API 与迁移指导。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/arc-mcp/arc-1 --skill sap-migration-dossier

安装后在 Claude Code 中输入/sap-migration-dossier确认已加载。

附带文件agents/openai.yamlreferences/auditor-patterns.md

详细介绍

SAP 迁移档案

构建迁移规划产物,而不是针对单个对象的修复工作流。使用此技能将现有 ARC-1 迁移技能整合为一份范围明确的档案,便于快速启动,并且只有在用户提出要求时才进一步正式化。

默认提供简洁的聊天报告。可将文件、审查卡片、HTML、CSV/JSON 和图表作为后续可选项;不要一开始就让用户设计报告系统。

仅当用户要求持久化产物、人工审查、导入的提取数据、深入提取 ECC 增强项、完整性哈希、HTML 仪表板或图形输出时,才阅读 references/auditor-patterns.md。

如有可用的 SAP Docs MCP,请使用,尤其是针对 Clean Core/API 状态、后继 API、特定版本的语法和迁移指南。如果未连接 SAP Docs MCP,仍使用 ARC-1 证据运行档案,并将 "SAP Docs MCP unavailable" 列为证据缺口。

默认流程

如果范围明确,立即开始:

  1. 确定范围。
    • 包:SAPRead(type="DEVC", name="<package>")
    • 前缀/命名空间:针对相关类型调用 SAPSearch(PROG、CLAS、FUGR、FUNC、DDLS、BDEF、SRVD、TABL)
    • 对象列表:使用 SAPSearch 消除名称歧义
    • 本地提取数据:解析文件,并说明证据是导入的,而非来自实时 ARC-1
  2. 构建精简清单:对象、类型、包、描述、可用时的代码行数,以及可用时的最后更改时间/版本。
  3. 添加迁移信号:
    • ATC:SAPDiagnose(action="atc", type="<type>", name="<name>")
    • Clean Core/API 风险:复用 sap-clean-core-atc 逻辑
    • SAP Docs MCP:使用 sap_get_object_details 补充 SAP API 参考;使用 search/fetch 查询最主要的 ATC 主题或替换指南
    • 使用情况/退役:仅当 SCMON/SUSG 数据可用时,复用 sap-unused-code
    • 依赖项/使用位置:使用 SAPContext 或 SAPNavigate(action="references")
  4. 返回简洁报告,包含:
    • 统计摘要
    • 风险最高的对象
    • 可能退役的候选对象
    • 标准修改/增强热点
    • 主要 ATC/Clean Core 主题
    • 明确的证据缺口
    • 建议的后续操作

仅在必要时提问:

  • 如果未提供范围,请询问包、命名空间/前缀或对象列表。
  • 如果范围过大,请询问是否缩小范围或保存为基于文件的档案。
  • 如果用户需要面向客户的决策,请询问是否采用人工审查流程。

集成接口(Clean Core 集成)

当用户询问接口、集成、RFC/IDoc/OData、“clean core integration”或哪些接口会阻碍迁移到云端时,运行本节。否则跳过——默认流程仍聚焦于自定义代码。

这与 sap-clean-core-atc 衡量的是不同维度。该技能评估可扩展性(SAP Note 3578329,即代码调用了哪些 API)。本节评估集成技术(SAP Note 3690029,即系统如何与此系统通信)。两者使用相同的 A–D 字母,但维度不同——SAP 的原文表述是,集成说明“补充了可扩展性指南,但与之并不重叠”。

先确定范围

复用默认流程中确定的范围——不要硬编码 Z%。根据用户实际提出的范围构建名称筛选条件:其前缀(Z*、Y*)、已注册的命名空间(/NS/*)、对象列表,或包对应的 TADIR.DEVCLASS。仅使用 Z% 的筛选条件会悄然排除 Y* 和所有命名空间对象。

EDIPO* 表(IDoc 端口)、EDP13(伙伴配置文件)和 RFCDES(目标)属于系统范围的配置——它们没有包或命名空间可供限定范围。读取这些表之前先征求用户同意,并将其作为系统全景背景信息报告,而非限定范围内的清单内容;如果用户拒绝提供深入证据,则完全跳过这些表。

证据(只读)

默认使用 SAPRead(type="TABLE_QUERY")——采用 data 范围和结构化的 where,不使用用户编写的 SQL。 始终传入 columns:省略该参数会执行 SELECT *,从配置表中提取档案没有必要读取的字段。

查询内容调用columns
范围内的接口对象TADIR,使用 where 条件 PGMID = R3TR + OBJECT IN (…) + 范围筛选OBJECT, OBJ_NAME, DEVCLASS
启用 RFC 的自定义 FMTFDIR,使用 where 条件 FMODE = 'R' + 范围筛选(见下文)FUNCNAME, PNAME
自定义 IDoc 基本类型EDBAS,按 IDOCTYP 筛选范围IDOCTYP, RELEASED
IDoc → 端口绑定EDP13(出站合作伙伴配置文件)MESTYP, IDOCTYP, RCVPOR
每个端口的端口类型EDIPORT — 包含所有端口类型的汇总表;PORTTYP 是域 EDI_PORTYPPORT, PORTTYP
XML-HTTP 端口对应的目标EDIPOXH(LOGDES 指定目标)PORT, LOGDES
出站目标RFCDES — 参见下方的 RFCTYPE 代码仅 RFCDEST, RFCTYPE
发布契约状态SAPRead(type="API_STATE", name="<obj>", objectType="<type>")—

切勿选择 RFCDES.RFCOPTIONS 或 RFCOPTION1…RFCOPTIONV。这些字段存放包含登录数据的打包连接字符串;档案只需要目标名称和类型,别无其他。

OBJECT IN (…) 列表为 IWPR IWSV IWSG IWMO SRVD SRVB EVTB EVTO IDOC SICF HTTP。

代码表(从系统自身的域中读取,而非使用硬编码假设):

EDIPORT.PORTTYP(域 EDI_PORTYP)RFCDES.RFCTYPE
0 CPI-C · 1 transactional RFC · 2 SAPcomm3 RFC to ABAP system (TCP/IP) · W RFC via WebSockets
3 File · 6 XML FileH HTTP to ABAP system · G HTTP to external server
4 Internet · 5 ABAP programming interface · 7 XML HTTPT external program · I same-database · L reference · A application

不要将 H 视为唯一的 HTTP 目标 — 与非 SAP 端点集成的出站连接类型为 G,这正是这里最重要的情况。

每个前缀执行一次查询。 TABLE_QUERY 会对每个 where 条目执行 AND 逻辑,因此,同一字段上的两个 LIKE 条件不会匹配任何内容 — 分别运行 Z%、Y% 和每个命名空间的查询,然后在客户端合并。结果上限为 10,000 行:如果某个分区恰好返回 10,000 行,必须报告为已截断,而不能视为完整。类型统计是对已获取行数的计数。

TFDIR 的范围限定。 函数模块名称不包含其包信息,因此 FUNCNAME LIKE 仅适用于名称前缀范围。对于包档案,应先解析该包的 FUGR 对象,再根据这些对象匹配 TFDIR.PNAME,然后检查 FMODE。正确构造程序名称:命名空间必须放在最前面,因此函数组 /NS/FOO 的主程序是 /NS/SAPLFOO — 而不是 SAPL/NS/FOO。只有非命名空间函数组 ZFOO 对应 SAPLZFOO。若顺序弄反,所有命名空间函数组都会静默返回零行。

只有当用户选择了深度证据且启用了自由 SQL 时,SAPQuery 才能通过一条分组语句完成统计:SELECT object, COUNT( * ) AS cnt FROM tadir WHERE pgmid = 'R3TR' AND obj_name LIKE 'Z%' GROUP BY object ORDER BY cnt DESCENDING — 将 'Z%' 替换为解析出的范围。这只是优化,并非必要条件。

这两个开关相互独立,彼此都不代表对方 — SAPQuery 需要 sql 范围和 SAP_ALLOW_FREE_SQL(未启用时甚至不会注册该工具);TABLE_QUERY 需要 data 范围和 SAP_ALLOW_DATA_PREVIEW。有些实例启用了自由 SQL 但未启用数据预览,反之亦然。

如果两者都不可用,则没有基于表的替代方案:tadir_lookup 无济于事,因为 source="db"/"both" 本身会提升至 sql 范围,而且它解析的是确切名称,而非按类型发现对象。应改为:对范围内的每个包调用 SAPRead(type="DEVC"),并按类型执行普通的 SAPSearch 对象搜索;两者均尽力而为 — 然后将 TADIR 统计、旧版 SEGW 类型以及所有 RFC/IDoc/目标覆盖标记为不可用。不要猜测。 有一个容易踩坑的地方:SAPRead(type="DEVC") 不包含旧版 SEGW 类型,因此这些类型要用 TADIR(或 tadir_lookup,它需要 sql 范围和精确名称)。此外,支持的合约因对象类型而异(SRVD 仅公开 C0),所以绝不能报告一个适用于整个系统的“C2 共享等级”。

等级(SAP Note 3690029)

以下内容精简至 ABAP 系统可公开的信息。该说明还涵盖 BW 提取器、SLT、Delta Share 和数据产品——这些超出 ARC-1 的能力范围,因此应将其列为证据缺口,而不是省略。

技术等级ARC-1 证据
通过 RAP 实现的事件传输(AMQP/MQTT)ATADIR EVTB / EVTO;SAPRead(type="EVTB")
通过 RAP 服务绑定实现的 OData;通过服务绑定实现的 CDSATADIR SRVB + SRVD
HTTP(S)ATADIR SICF / HTTP(自定义 ICF 节点)
通过 SOA Manager 实现的 Web 服务AADT 不可见 — 在 SOAMANAGER 中确认
通过 SAP Gateway Service Builder(SEGW)实现的 ODataBTADIR IWPR IWSV IWSG IWMO
通过 RFC 实现的 BAPI;RFC(CPI-C);WebSocket RFCBTFDIR.FMODE = 'R';RFCDES.RFCTYPE = '3'
通过 HTTPS 实现的 IDocBEDP13 → EDIPORT.PORTTYP = 7 且确认其目标上的 TLS
通过 RFC 实现的 IDocCEDP13 → EDIPORT.PORTTYP = 1
通过 XI 实现的 ABAP 代理C此处未涵盖 — 没有 ADT 证据;检查 SPROXY / SXMB 配置
平面文件D使用 SAPSearch(searchType="source_code") 搜索 OPEN DATASET
FTPD使用 source_code 搜索 FTP_CONNECT / FTP_COMMAND
SFTP、JDBC/ODBCD无法通过 ABAP 检测 — 需要外部工具;应询问,不要推断
RFC(ODP)禁止API 策略禁止(SAP Note 3255746)— 发现时应标记

IDoc 等级取决于端口,而端口又取决于伙伴配置文件。 EDBAS 列出基本类型,EDIPORT 列出端口,但两者之间没有关联 — 出站伙伴配置文件(EDP13)包含将消息/基本类型绑定到接收方端口的 RCVPOR。应从 EDIPORT.PORTTYP 读取类型,而不是从 EDIPO.PORTTYP 读取(在一个具有正常工作端口的实时系统中,该字段经验证为空),也不要猜测存储该行的是哪个 EDIPO* 表 — EDIPOF 是 ABAP 编程接口,不是文件端口。若没有完整的 EDP13 → EDIPORT 连接查询,应将 IDoc 报告为 B/C 未确定;绝不能将其计入某个等级。

PORTTYP = 7 能证明 XML-over-HTTP,不能证明 HTTPS。该端口只指定一个目标(EDIPOXH.LOGDES);TLS 在该目标上配置 — 通常是 RFCTYPE = 'G' 条目 — 其 SSL 设置存储在此技能拒绝读取的 RFCDES 连接数据块中。因此,应将 XML-HTTP 端口视为 候选 Level B,并请用户在 SM59 中确认该目标的 SSL。不要从端口推断 TLS,也不要解析 RFCOPTIONS 来查明。

source_code 搜索需要 SAP_BASIS 7.51+。在较旧的 ECC 系统上,该功能不可用,因此在那里得到干净的 Level-D 结果意味着“未搜索”,而不是“未发现” — 应将其记录为证据缺口。

该说明对技术评级,并指出具体场景的等级取决于用例。报告的等级应是 SAP 对该技术给出的默认等级,而不是对接口的判定。

输出

统计接口,而不是制品。 一个集成通常由多个对象组成:RAP 服务是一个 SRVD 和 一个 SRVB;IDoc 场景是一个基本类型 和 一个伙伴配置文件 和 一个端口;RFC 接口是一个函数模块 以及 可能还包含一个目标。将每个集成归并为一条接口记录 — { id, technology, level, evidence[] } — 并按这些记录统计各级别的分布。原始制品数量应单独报告并明确标注;切勿将二者相加。

然后补充:集成技术级别分布(每个级别的接口记录数量)、按 B→A 和 C→B 排序的现代化候选项,以及任何 Forbidden 命中项。不要将该分布称为升级稳定性指标 — Note 3690029 特意将升级稳定性排除在级别模型之外,因为它取决于底层 ABAP 对象的发布状态。请根据 API_STATE 和 Business Accelerator Hub 单独报告该状态。常见发现是并存的 SEGW/Gateway V2(B)与 RAP V4(A)— 将这些交给 migrate-segw-to-rap。另一个标准迁移方向是 IDoc via RFC(C)→ RAP 业务事件(A)。

何时升级处理

仅在用户提出要求,或范围大到不适合在聊天中输出时,才使用可选模式。

用户要求执行操作
“保存”、“分享”、“档案”、“客户报告”在 docs/migration-dossiers/<scope>/<date>/ 中创建 report.md,并可选创建 inventory.csv
“HTML”、“PDF”、“仪表板”生成独立的 report.html;说明可以将其打印为 PDF
“已审核”、“顾问验证”、“非纯 AI”创建草稿卡片,并且仅在最终报告中纳入已验证或已更正的卡片
“图表”、“可视化”、“依赖关系图”为高风险或高扇出对象生成范围受限的 Mermaid 图
“深度 ECC”、“用户出口”、“BAdI”、“标准修改”使用 references/auditor-patterns.md 中的深度证据;仅在允许时使用 SAPQuery
“接口”、“集成”、“RFC/IDoc/OData 清单”、“clean core 集成”运行“集成接口”部分
“后继 API”、“已发布 API”、“有什么替代方案”使用 SAP Docs MCP sap_get_object_details,然后视需要使用 search/fetch 查找指导
“此语法能在版本 X 上运行吗”使用 SAP Docs MCP abap_feature_matrix,并结合正确的 ABAP 风格进行 search
“修复这个”对选定发现切换到 migrate-custom-code;此技能不应批量修复

输出形式

聊天输出应保持简短:

Migration Dossier - <scope>

Scope: <n> objects, <types>, <packages>
Evidence: ATC=<variant/default>, docs=<SAP Docs MCP/unavailable>, usage=<SCMON/SUSG/unavailable>, clean-core=<source>, dependencies=<source>

Summary:
- <1-3 lines>

Priority objects:
| Object | Why it matters | Suggested action |

Retirement candidates:
| Object | Evidence | Caveat |

Main risks:
- <ATC/Clean Core/standard modification themes>

Evidence gaps:
- <missing usage data, skipped objects, dynamic calls, unavailable variants>

Next step:
- <one recommendation>

文件输出应尽量使用精简的默认制品集:

docs/migration-dossiers/<scope>/<date>/
  report.md
  inventory.csv
  methodology.md

仅在用户要求时添加 report.html、cards.jsonl、reviews.jsonl、graph.mmd 或 dashboard.html。

审核规则

仅对面向客户或可作为决策依据的报告设置人工审核关卡。

状态:

ai_draft | validated | corrected | skipped | ai_error

分类:

REMOVE | KEEP | ADAPT | COVERED_BY_STANDARD | UNDETERMINED

以下内容应与决策分开:

extensibilityLevel: A | B | C | D | unknown   # Note 3578329 — which SAP APIs the code calls
integrationLevel:   A | B | C | D | FORBIDDEN | indeterminate   # Note 3690029 — interface technology
usageStatus: USED | LIKELY_UNUSED | UNUSED | INDETERMINATE

这两个级别是独立的维度,绝不能合并为单一的 cleanCoreLevel。大多数卡片只包含其中一个:代码对象使用 extensibilityLevel,接口记录使用 integrationLevel。如果无法解析 IDoc 的端口,正确的值是 indeterminate — 不要将其四舍五入为 B 或 C。

最终审核报告必须排除 ai_draft 卡片,除非明确标注为草稿。

安全

  • 不要运行无范围限制的系统级提取。
  • 除非已启用自由 SQL 且用户选择了深度证据,否则不要使用 SAPQuery。
  • 如果对象位于 $TMP 中或 ATC 跳过了它,不要因 ATC 结果为零就判定其干净。
  • 不要通过此技能删除、更新、激活或传输对象。
  • 除非明确标注为草稿,否则不要将纯 AI 评估作为最终决策发布。
  • 明确说明证据缺口,不要用假设填补。

评论

支持 Markdown