migrate-custom-code
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMigrate Custom Code
迁移自定义代码
ATC-driven S/4HANA custom code migration assistant with automated fix proposals.
This skill replicates SAP Joule's "Custom Code Migration" capability by combining ARC-1 (SAP system access) with mcp-sap-docs (documentation & best practices). It runs ATC readiness checks, groups and explains findings, and generates replacement code following modern ABAP patterns.
基于ATC的S/4HANA自定义代码迁移助手,提供自动化修复建议。
本skill通过结合 ARC-1(SAP系统访问)与 mcp-sap-docs(文档与最佳实践),复刻 SAP Joule 的“Custom Code Migration”能力。它运行ATC就绪检查,对发现的问题进行分组和解释,并按照现代ABAP模式生成替换代码。
Smart Defaults (apply silently, do NOT ask)
智能默认设置(静默应用,不要询问)
| Setting | Default | Rationale |
|---|---|---|
| Object type | Auto-detect via SAPSearch | Don't make user look up the type |
| ATC variant | System default | Omitting |
| Scope | | Most actionable output |
| Priority filter | All priorities (start with Priority 1 errors) | Don't miss anything, but fix most critical first |
| 设置 | 默认值 | 理由 |
|---|---|---|
| 对象类型 | 通过SAPSearch自动检测 | 无需用户查找类型 |
| ATC变体 | 系统默认 | 省略 |
| 范围 | | 最具可操作性的输出 |
| 优先级过滤 | 全部优先级(从 Priority 1 错误开始) | 不遗漏任何发现,但先修复最关键的 |
Input
输入
The user provides an object or package to check (e.g., , , ).
ZCL_SALES_HANDLERZ_REPORT_POSTINGZSALES_PKGOnly the object name is required. If the user provides just an object name, auto-detect the type and proceed with the default variant and fix scope.
Optionally, the user may specify:
- Object type (default: auto-detect via SAPSearch)
- Target release variant (e.g., ,
S4HANA_2023; default: system default)S4HANA_READINESS - Scope — (findings only) or
explain(explain + fix proposals; default:fix)fix
用户提供要检查的对象或包(例如 、、)。
ZCL_SALES_HANDLERZ_REPORT_POSTINGZSALES_PKG仅需要对象名称。如果用户只提供对象名称,自动检测类型并使用默认变体与修复范围继续。
可选地,用户可以指定:
- 对象类型(默认:通过SAPSearch自动检测)
- 目标版本变体(例如 、
S4HANA_2023;默认:系统默认)S4HANA_READINESS - 范围 —— (仅发现的问题)或
explain(解释 + 修复建议;默认:fix)fix
Step 1: Run ATC Readiness Check
第1步:运行ATC就绪检查
ATC gotchas (verified live on S/4HANA 2023):
- ATC skips
/ local objects. A check run against a$TMPobject resolves to an empty object set and returns zero findings — this is not "clean code", it's "not checked". Run ATC against objects in a transportable package. If the user points you at$TMPcode, say so and ask them to assign it to a transportable package first.$TMP- The check variant must exist on the system.
is the standard name on SAP BTP ABAP / S/4HANA Cloud, but on-premise systems often shipABAP_CLOUD_READINESS(e.g.S4HANA_READINESS_<release>) orS4HANA_READINESS_2023instead. If the named variant is absent ARC-1 rejects the call (SAP would silently runSAP_CLOUD_PLATFORM_DEFAULT) — list the real names withDEFAULT, or omitSAPDiagnose(action="atc_variants")to bind the system's configured default.variant
ATC 注意事项(已在 S/4HANA 2023 上实测):
- ATC 会跳过
/ 本地对象。 对$TMP对象执行检查会解析为空对象集,并返回零发现——这不是“代码干净”,而是“未检查”。ATC 应针对可传输包中的对象运行。如果用户指向$TMP代码,请说明情况,并请其先将代码分配到可传输包中。$TMP- 检查变体必须存在于系统中。
是 SAP BTP ABAP / S/4HANA Cloud 上的标准名称,但本地(on-premise)系统通常提供ABAP_CLOUD_READINESS(例如S4HANA_READINESS_<release>)或S4HANA_READINESS_2023。如果指定的变体不存在,ARC-1 会拒绝该调用(SAP 会静默运行SAP_CLOUD_PLATFORM_DEFAULT)——使用DEFAULT列出真实名称,或省略SAPDiagnose(action="atc_variants")以绑定系统配置的默认值。variant
1a. Run ATC on the target object
1a. 对目标对象运行 ATC
SAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="<variant>")If no variant was specified, run with the system default first (omitting makes ARC-1 resolve from ATC customizing and send it explicitly — SAP's own empty- behavior would run the Code Inspector variant instead):
variantsystemCheckVariantcheckVariantDEFAULTSAPDiagnose(action="atc", type="<type>", name="<object_name>")Then suggest a readiness variant if available (e.g., , ). If a run returns zero findings on code you expect to be flagged, first confirm the object is not in (see the gotcha above).
S4HANA_READINESS_2023ABAP_CLOUD_READINESS$TMPSAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="<variant>")如果未指定变体,首先使用系统默认值运行(省略 会使 ARC-1 从 ATC 自定义设置中解析 并显式发送——SAP 自身的空 行为会改为运行 Code Inspector 变体 ):
variantsystemCheckVariantcheckVariantDEFAULTSAPDiagnose(action="atc", type="<type>", name="<object_name>")然后,如果可用,建议一个就绪变体(例如 、)。如果对预期会被标记的代码执行检查却返回零发现,首先确认该对象不在 中(见上面的注意事项)。
S4HANA_READINESS_2023ABAP_CLOUD_READINESS$TMP1b. For package-level checks — find all objects first
1b. 对于包级检查——先查找所有对象
SAPRead(type="DEVC", name="<package_name>")This returns all objects in the package. Then run ATC on each object individually. For large packages, prioritize PROG, CLAS, FUGR, FUNC types first as they typically contain the most migration-relevant findings.
SAPRead(type="DEVC", name="<package_name>")这将返回包中的所有对象。然后对每个对象单独运行 ATC。对于大型包,优先处理 PROG、CLAS、FUGR、FUNC 类型,因为它们通常包含最多与迁移相关的发现。
Step 2: Group and Prioritize Findings
第2步:对发现进行分组和排序
Organize findings into a structured summary. Deduplicate findings with the same checkTitle across multiple locations.
将发现组织成结构化摘要。对多个位置中具有相同 checkTitle 的发现进行去重。
Summary Table
摘要表
Present findings grouped by priority and category:
Migration Readiness Report for <object_name>
=============================================
Total findings: <N>
Priority 1 (Errors): <n>
Priority 2 (Warnings): <n>
Priority 3 (Info): <n>
| # | Priority | Check | Category | Count | Affected Objects |
|---|----------|-------|----------|-------|------------------|
| 1 | 1 | Use of obsolete statement MOVE | Syntax Change | 3 | Z_REPORT_POSTING |
| 2 | 1 | Call to released API CL_GUI_ALV_GRID | Deprecated API | 1 | Z_REPORT_POSTING |
| 3 | 2 | SELECT...ENDSELECT pattern | Performance | 5 | Z_REPORT_POSTING |
| ...按优先级和类别分组呈现发现:
Migration Readiness Report for <object_name>
=============================================
Total findings: <N>
Priority 1 (Errors): <n>
Priority 2 (Warnings): <n>
Priority 3 (Info): <n>
| # | Priority | Check | Category | Count | Affected Objects |
|---|----------|-------|----------|-------|------------------|
| 1 | 1 | Use of obsolete statement MOVE | Syntax Change | 3 | Z_REPORT_POSTING |
| 2 | 1 | Call to released API CL_GUI_ALV_GRID | Deprecated API | 1 | Z_REPORT_POSTING |
| 3 | 2 | SELECT...ENDSELECT pattern | Performance | 5 | Z_REPORT_POSTING |
| ...Categories
类别
Group findings into these categories:
- Deprecated API: Calls to functions, classes, or methods that are deprecated or not released in S/4HANA
- Syntax Change: Obsolete ABAP statements that must be replaced
- Semantic Change: Behavior differences in S/4HANA (e.g., changed table structures, removed fields)
- Performance: Patterns that need optimization for S/4HANA
- Simplification: Items from the S/4HANA simplification list
Ask the user: "Which findings should I explain and fix? (all / specific numbers / errors only)"
将发现归入以下类别:
- 已弃用API(Deprecated API):对 S/4HANA 中已弃用或未发布的函数、类或方法的调用
- 语法变更(Syntax Change):必须替换的过时 ABAP 语句
- 语义变更(Semantic Change):S/4HANA 中的行为差异(例如表结构变化、字段移除)
- 性能(Performance):需要针对 S/4HANA 优化的模式
- 简化(Simplification):来自 S/4HANA 简化列表的项目
询问用户:“我应该解释并修复哪些发现?(全部 / 指定编号 / 仅错误)”
Step 3: Explain Findings
第3步:解释发现
For each selected finding, provide a detailed explanation.
对于每个选中的发现,提供详细解释。
3a. Read the affected source code
3a. 读取受影响的源代码
SAPRead(type="<type>", name="<object_name>")Show the code context around each finding (the line with the issue and a few lines before/after).
SAPRead(type="<type>", name="<object_name>")显示每个发现周围的代码上下文(有问题的行及其前后几行)。
3b. Search documentation for migration guidance
3b. 搜索迁移指导文档
search("<checkTitle> S/4HANA migration")
search("<deprecated_api> replacement ABAP")For specific simplification items:
search("<simplification_item_id> simplification list")search("<checkTitle> S/4HANA migration")
search("<deprecated_api> replacement ABAP")对于特定的简化项目:
search("<simplification_item_id> simplification list")3c. Search SAP Notes (if SAP Notes MCP is available)
3c. 搜索 SAP Notes(如果 SAP Notes MCP 可用)
sap_notes_search(q="<checkTitle>")
sap_notes_search(q="<deprecated_api> replacement")sap_notes_search(q="<checkTitle>")
sap_notes_search(q="<deprecated_api> replacement")3d. Present explanation for each finding
3d. 呈现每个发现的解释
For each finding, present:
- What: The finding description and where it occurs (file, line)
- Why: Why this is a problem for S/4HANA (compatibility, removal, behavior change)
- Replacement: The recommended modern ABAP pattern or API to use instead
- Impact: Risk level of the change (low = syntax swap, medium = logic change, high = redesign needed)
对于每个发现,呈现:
- 内容(What):发现的描述及其出现位置(文件、行)
- 原因(Why):为什么这对 S/4HANA 是一个问题(兼容性、移除、行为变更)
- 替换方案(Replacement):推荐使用的现代 ABAP 模式或 API
- 影响(Impact):变更的风险级别(低 = 语法替换,中 = 逻辑变更,高 = 需要重新设计)
Step 4: Generate Fix Proposals
第4步:生成修复建议
For each fixable finding, generate replacement code based on documentation and modern ABAP patterns.
对于每个可修复的发现,基于文档和现代 ABAP 模式生成替换代码。
4a. Check SAP quickfix first (before LLM-generated fixes)
4a. 先检查 SAP quickfix(在 LLM 生成的修复之前)
For each finding location, first check whether SAP provides a native quickfix:
SAPDiagnose(action="quickfix", type="<type>", name="<object_name>", source="<current_source>", line=<finding_line>, column=0)If proposals are returned:
- Present them as SAP-verified fixes (higher confidence than LLM-generated fixes)
- If the user selects one, apply it and get exact text deltas:
SAPDiagnose(action="apply_quickfix", type="<type>", name="<object_name>", source="<current_source>", line=<finding_line>, column=0, proposalUri="<proposal_uri>", proposalUserContent="<proposal_user_content>")- returns ranged text deltas — it does not persist. Apply the returned deltas to the source yourself, then write the result via
apply_quickfix. When applying multiple fixes to the same object, re-resolve each finding's line after each write (earlier edits shift later line numbers), or fix top-to-bottom.SAPWrite(action="update")
Quickfix availability is system-dependent. SAP only offers quickfix proposals where the system has the corresponding check/cloudification content installed. On a bare ABAP trial or a system without the Clean-Core remediation content,returnsgetFixProposalsand ATC findings carry[]— that's expected, not a bug. In that case skip straight to LLM-generated fixes (the options below). Prefer SAP quickfixes only when they actually come back.hasQuickfix=false
Match the proposal to the finding — don't blindly apply.proposals[0]returns every proposal applicable at that source position, which often includes generic refactorings unrelated to the finding (verified live on S/4HANA 2023: a position returned "Rename", "Convert to attribute", "Convert to importing parameter", "Extract local variable", …). Pick the proposal whosequickfix/nameactually addresses the finding; ignore the rest.description
Refactoring-style proposals can't be auto-applied here. Proposals whosecontainsuri(rename / convert-to-X / extract / introduce) are interactive refactorings that ride the separate/providers/refactoring/multi-step flow —/sap/bc/adt/refactoringsreturns HTTP 500 for them (verified live). They are not finding fixes; skip them for automated apply and fall back to an LLM-generated fix. Only proposals from non-refactoring providers apply cleanly throughapply_quickfix.apply_quickfix
对于每个发现位置,首先检查 SAP 是否提供原生 quickfix:
SAPDiagnose(action="quickfix", type="<type>", name="<object_name>", source="<current_source>", line=<finding_line>, column=0)如果返回了建议:
- 将其作为 SAP 验证的修复(比 LLM 生成的修复更可信)呈现
- 如果用户选择其中一个,应用它并获取精确的文本差异(text deltas):
SAPDiagnose(action="apply_quickfix", type="<type>", name="<object_name>", source="<current_source>", line=<finding_line>, column=0, proposalUri="<proposal_uri>", proposalUserContent="<proposal_user_content>")- 返回范围化的文本差异(text deltas)——它不会持久化。自行将返回的差异应用到源码,然后通过
apply_quickfix写入结果。当对同一对象应用多个修复时,在每次写入后重新解析每个发现的行号(先前的编辑会使后续行号偏移),或从上到下修复。SAPWrite(action="update")
Quickfix 可用性取决于系统。 仅当系统安装了相应的检查/云化(cloudification)内容时,SAP 才会提供 quickfix 建议。在裸 ABAP trial 或没有 Clean-Core 修复内容的系统上,返回getFixProposals,ATC 发现的[]——这是预期行为,不是 bug。这种情况下直接跳转到 LLM 生成的修复(下面的选项)。只有当 SAP quickfix 实际返回时才优先使用它们。hasQuickfix=false
将建议与发现匹配——不要盲目应用。proposals[0]返回该源码位置适用的所有建议,其中通常包含与发现无关的通用重构(refactoring)(已在 S/4HANA 2023 上实测:同一位置返回了 "Rename"、"Convert to attribute"、"Convert to importing parameter"、"Extract local variable" 等)。选择quickfix/name真正针对该发现的建议,忽略其余内容。description
重构类建议无法在此自动应用。包含uri的建议(重命名 / 转换为 X / 提取 / 引入)是交互式重构,走独立的/providers/refactoring/多步骤流程——/sap/bc/adt/refactorings对它们返回 HTTP 500(已实测)。它们不是发现修复;跳过它们进行自动应用,并回退到 LLM 生成的修复。只有来自非重构提供者的建议才能通过apply_quickfix干净地应用。apply_quickfix
Fix Options
修复选项
Present 4 options per finding:
- Apply — Auto-write the fix via ARC-1
- Show — Display the before/after diff without applying
- Skip — Move to the next finding
- SAP Quick Fix — Apply SAP's quickfix proposal when available (preferred over LLM-generated fix)
Group related fixes that can be applied together (e.g., multiple deprecated statements in the same method).
每个发现提供 4 个选项:
- 应用(Apply) — 通过 ARC-1 自动写入修复
- 显示(Show) — 显示前后差异但不应用
- 跳过(Skip) — 转到下一个发现
- SAP 快速修复(SAP Quick Fix) — 可用时应用 SAP 的 quickfix 建议(优先于 LLM 生成的修复)
将可以一起应用的修复分组(例如同一方法中的多个弃用语句)。
Common Migration Patterns
常见迁移模式
Use these replacement patterns when generating fixes:
| Old Pattern | New Pattern | Notes |
|---|---|---|
| Class method call | Find replacement class in documentation |
| | Avoid row-by-row processing |
| | New ABAP syntax |
| | Use table expressions |
| Method call | Extract to class method |
| | Built-in function |
| | Functional call syntax |
| | NEW operator |
| | Built-in function |
| Classic DB view | CDS view entity | Redesign required |
| Fiori / RAP service | Major redesign |
生成修复时使用以下替换模式:
| 旧模式 | 新模式 | 备注 |
|---|---|---|
| 类方法调用 | 在文档中查找替代类 |
| | 避免逐行处理 |
| | 新的 ABAP 语法 |
| | 使用表表达式 |
| 方法调用 | 提取为类方法 |
| | 内置函数 |
| | 函数式调用语法 |
| | NEW 运算符 |
| | 内置函数 |
| 经典数据库视图 | CDS 视图实体 | 需要重新设计 |
| Fiori / RAP 服务 | 重大重新设计 |
Step 5: Apply Selected Fixes
第5步:应用选定的修复
5a. Apply fixes
5a. 应用修复
For method-level fixes in classes:
SAPWrite(action="edit_method", type="CLAS", name="<class>", method="<method>", source="<fixed_source>", transport="<transport>")For full-source updates (programs, functions):
SAPWrite(action="update", type="<type>", name="<object_name>", source="<fixed_source>", transport="<transport>")对于类中的方法级修复:
SAPWrite(action="edit_method", type="CLAS", name="<class>", method="<method>", source="<fixed_source>", transport="<transport>")对于全源码更新(程序、函数):
SAPWrite(action="update", type="<type>", name="<object_name>", source="<fixed_source>", transport="<transport>")5b. Validate after each batch of fixes
5b. 在每批修复后验证
SAPDiagnose(action="syntax", type="<type>", name="<object_name>")If syntax errors are introduced: revert by writing back the original source and report the issue.
SAPDiagnose(action="syntax", type="<type>", name="<object_name>")如果引入了语法错误:写回原始源码并报告问题。
5c. Activate
5c. 激活
SAPActivate(type="<type>", name="<object_name>")SAPActivate(type="<type>", name="<object_name>")Step 6: Re-validate
第6步:重新验证
Run ATC again to confirm findings are resolved:
SAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="<variant>")再次运行 ATC 以确认发现已解决:
SAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="<variant>")Report results
报告结果
Present a final summary:
Migration Fix Summary for <object_name>
========================================
Findings fixed: <n>
Findings remaining: <n>
Findings needing manual fix: <n>
Fixed:
- [FIXED] Use of obsolete statement MOVE (3 occurrences)
- [FIXED] SELECT...ENDSELECT replaced with SELECT INTO TABLE
Remaining:
- [MANUAL] CL_GUI_ALV_GRID replacement requires UI redesign
- [SKIPPED] User skipped FORM/PERFORM migration
Next steps:
- Address remaining manual findings
- Run full regression tests
- Consider running ATC on dependent objects呈现最终摘要:
Migration Fix Summary for <object_name>
========================================
Findings fixed: <n>
Findings remaining: <n>
Findings needing manual fix: <n>
Fixed:
- [FIXED] Use of obsolete statement MOVE (3 occurrences)
- [FIXED] SELECT...ENDSELECT replaced with SELECT INTO TABLE
Remaining:
- [MANUAL] CL_GUI_ALV_GRID replacement requires UI redesign
- [SKIPPED] User skipped FORM/PERFORM migration
Next steps:
- Address remaining manual findings
- Run full regression tests
- Consider running ATC on dependent objectsError Handling
错误处理
Common Issues and Fixes
常见问题与修复
| Error | Cause | Fix |
|---|---|---|
| ATC variant not found | Variant doesn't exist on this system (hard error — SAP would otherwise silently run | List the real names with |
| Object locked by another user | Object is being edited elsewhere | Inform user, suggest trying later or contacting the lock holder |
| Fix causes new syntax error | Generated replacement code is incorrect | Revert to original source, show the diff, suggest manual correction |
| No mcp-sap-docs available | Documentation MCP not configured | Explain findings using ATC finding text only, recommend user check SAP Help Portal |
| Package has too many objects | Large package with 100+ objects | Suggest breaking into smaller batches by sub-package or object type |
| ATC returns no findings | Object is already S/4HANA ready | Inform user — no findings is good news, suggest checking with a stricter variant |
| Transport required but not provided | Object is in a transportable package | Ask user for transport request number before applying fixes |
| 错误 | 原因 | 修复 |
|---|---|---|
| 未找到 ATC 变体 | 变体在此系统上不存在(硬错误——否则 SAP 会静默运行 | 使用 |
| 对象被其他用户锁定 | 对象正在其他地方被编辑 | 告知用户,建议稍后重试或联系锁持有者 |
| 修复导致新的语法错误 | 生成的替换代码不正确 | 恢复到原始源码,显示差异,建议手动更正 |
| 没有可用的 mcp-sap-docs | 文档 MCP 未配置 | 仅使用 ATC 发现文本来解释发现,建议用户查看 SAP Help Portal |
| 包包含太多对象 | 大型包,100+ 对象 | 建议按子包或对象类型拆分为更小的批次 |
| ATC 返回零发现 | 对象已具备 S/4HANA 就绪性 | 告知用户——没有发现是好消息,建议使用更严格的变体检查 |
| 需要传输但未提供 | 对象位于可传输包中 | 在应用修复前向用户索要传输请求号 |
Notes
备注
BTP vs On-Premise Differences
BTP 与本地部署(On-Premise)的差异
- BTP: Limited ATC variants — primarily cloud readiness checks. BTP objects already use ABAP Cloud syntax, so migration focus is different: deprecated released APIs, not classic ABAP constructs. Fewer findings expected since ABAP Cloud enforces modern patterns.
- On-Premise: Full range of S/4HANA readiness variants available (2020, 2021, 2022, 2023+). Classic ABAP objects may have many findings. FORM/PERFORM, function modules, classic reports, and DB views are common migration targets. Custom Code Migration Worklist (SCMA) may provide additional context.
- BTP:ATC 变体有限——主要是云就绪检查。BTP 对象已使用 ABAP Cloud 语法,因此迁移重点不同:已弃用的已发布 API,而不是经典 ABAP 构造。由于 ABAP Cloud 强制使用现代模式,预期发现较少。
- 本地部署(On-Premise):提供完整的 S/4HANA 就绪变体范围(2020、2021、2022、2023+)。经典 ABAP 对象可能有许多发现。FORM/PERFORM、函数模块、经典报表和数据库视图是常见的迁移目标。Custom Code Migration Worklist (SCMA) 可能提供额外上下文。
Quickfix Availability
Quickfix 可用性
- SAP quickfixes are available for many common ATC findings (for example obsolete statements, missing declarations, straightforward syntax issues).
- Not every finding has a quickfix. Deprecated API replacements and architecture-level redesign usually still require manual/LLM-guided refactoring.
- SAP quickfix 可用于许多常见的 ATC 发现(例如过时语句、缺失声明、直接的语法问题)。
- 并非每个发现都有 quickfix。已弃用 API 替换和架构级重新设计通常仍需要手动/LLM 引导的重构。
What This Skill Does NOT Do
此 Skill 不做什么
- No transport management: User is responsible for creating and releasing transport requests
- No migration dossier: Handles one object or one package finding workflow — for reviewed, saved, or visual package-level dossiers, use sap-migration-dossier
- No custom ATC variant creation: Uses existing ATC variants on the system
- No table structure migration: Cannot modify DDIC table structures (e.g., field length changes for S/4HANA)
- No test execution: Does not run regression tests after fixes — user should validate manually or use generate-abap-unit-test skill
- 不管理传输:用户负责创建和释放传输请求
- 不生成迁移档案(migration dossier):处理单个对象或单个包的发现工作流——对于已审阅、已保存或可视化的包级档案,请使用 sap-migration-dossier
- 不创建自定义 ATC 变体:使用系统中现有的 ATC 变体
- 不迁移表结构:无法修改 DDIC 表结构(例如针对 S/4HANA 的字段长度变更)
- 不执行测试:修复后不运行回归测试——用户应手动验证或使用 generate-abap-unit-test skill
When to Use This Skill
何时使用此 Skill
- When preparing custom code for S/4HANA migration
- When checking if code meets ABAP Cloud readiness standards
- When investigating ATC findings and needing explanation + fix proposals
- When modernizing legacy ABAP code patterns (FORM, obsolete statements)
- NOT for greenfield development — use generate-rap-service for new objects
- 在准备将自定义代码迁移到 S/4HANA 时
- 在检查代码是否符合 ABAP Cloud 就绪标准时
- 在调查 ATC 发现并需要解释 + 修复建议时
- 在现代化遗留 ABAP 代码模式(FORM、过时语句)时
- 不用于绿地开发——新对象请使用 generate-rap-service