abap-cloud-migration
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseABAP Cloud Migration & Clean Core Level Remediation
ABAP Cloud 迁移与 Clean Core 等级修复
Guide for systematically raising the clean core level of classic ABAP custom code — eliminating Level D, minimizing Level C, and moving toward Level A (ABAP Cloud).
Terminology note: the former 3-tier extensibility model is superseded by the clean core level concept (A, B, C, D). Migration is no longer "get everything to Tier 1" — it is "eliminate Level D, minimize Level C, accept stable Level B, target Level A for new work". See theskill for the level definitions.abap-cloud
系统性提升 classic ABAP 自定义代码 clean core 等级的指南——消除 Level D、将 Level C 降至最少,并逐步迈向 Level A(ABAP Cloud)。
术语说明:旧版三层扩展性模型已由 clean core 等级概念(A、B、C、D)取代。迁移不再等同于“让所有内容都达到 Tier 1”,而是“消除 Level D、尽量减少 Level C、接受稳定的 Level B,并为新工作以 Level A 为目标”。有关等级定义,请参阅skill。abap-cloud
Workflow
工作流
- Assess current state: run ATC clean core checks on existing code
- Classify findings by level: priority 1 → Level D, priority 2 → Level C, priority 3 → Level B
- Prioritize remediation: Level D first (must fix), then Level C (minimize), then Level B (monitor)
- Choose a transformation option: retire · renovate side-by-side · renovate on-stack · adapt
- Implement replacements: released APIs, classic APIs, or wrappers with a single ATC exemption
- Validate: re-run ATC checks, verify no priority 1/2 findings remain, test functionality
- 评估当前状态:对现有代码运行 ATC clean core 检查
- 按等级对发现项分类:优先级 1 → Level D,优先级 2 → Level C,优先级 3 → Level B
- 确定修复优先级:先处理 Level D(必须修复),然后处理 Level C(尽量减少),最后处理 Level B(持续监控)
- 选择转换方案:retire(淘汰)· renovate side-by-side(并行翻新)· renovate on-stack(栈内翻新)· adapt(适配)
- 实施替代方案:使用 released API、classic API,或带有单个 ATC exemption 的 wrapper
- 验证:重新运行 ATC 检查,确认不再存在优先级 1/2 的发现项,并测试功能
Migration Assessment
迁移评估
Running ATC clean core checks
运行 ATC clean core 检查
- In ADT: right-click package → Run As → ABAP Test Cockpit
- Use check variant (SAP-delivered) or build a variant from
ABAP_CLEAN_CORE_DEVELOPMENTincluding:ABAP_CLOUD_DEVELOPMENT_DEFAULT- — released/classic API classification, SQL on SAP tables, SAP form routines
SYCM_USAGE_OF_APIS - — enhancement technology compliance
SYCM_ALLOWED_ENH_TECHNOLOGY - — modifications
CI_SEARCH_CUST_MODIFICATIONS - — critical statements
CI_CRITICAL_STATEMENTS - — Code Vulnerability Analyzer (additionally recommended)
SLIN_SEC
- Use to verify ABAP Cloud rules before switching an object's language version
ABAP_CLOUD_READINESS - Review findings in the ATC Results view
IforSYCM_USAGE_OF_APISare unavailable, implement SAP Note 3565942.SYCM_ALLOWED_ENH_TECHNOLOGY
- 在 ADT 中:右键单击 package → Run As → ABAP Test Cockpit
- 使用 SAP 提供的检查变体 ,或基于
ABAP_CLEAN_CORE_DEVELOPMENT构建包含以下检查的变体:ABAP_CLOUD_DEVELOPMENT_DEFAULT- ——released/classic API 分类、SAP 表上的 SQL、SAP form routines
SYCM_USAGE_OF_APIS - ——增强技术合规性
SYCM_ALLOWED_ENH_TECHNOLOGY - ——修改
CI_SEARCH_CUST_MODIFICATIONS - ——关键语句
CI_CRITICAL_STATEMENTS - ——Code Vulnerability Analyzer(另外建议启用)
SLIN_SEC
- 使用 验证 ABAP Cloud 规则,然后再切换对象的 language version
ABAP_CLOUD_READINESS - 在 ATC Results 视图中检查发现项
如果或SYCM_USAGE_OF_APIS不可用,请实施 SAP Note 3565942。SYCM_ALLOWED_ENH_TECHNOLOGY
ATC findings mapped to clean core levels
ATC 发现项与 clean core 等级的对应关系
| ATC priority | Level | Finding | Action |
|---|---|---|---|
| Priority 1 (Error) | D | Object is modified | Remove modification; use a BAdI instead |
| Enhancement technology is not allowed | Delete enhancement; use a BAdI | ||
| Implicit or explicit enhancement (source code plug-in) | Delete enhancement; use a BAdI | ||
| Direct write access to SAP database tables | Use released or classic APIs | ||
| Call of form routines in SAP program | Use released or classic APIs | ||
Usage of SAP object classified as | Use released or classic APIs; check successor info | ||
| Usage of critical ABAP statements | Use released or classic APIs | ||
| Priority 2 (Warning) | C | Direct read access to SAP database table/view | Use released CDS view or classic API |
| Usage of SAP object not classified as classic API (internal) and not released | Use released or classic APIs | ||
| Priority 3 (Info) | B | Usage of deprecated APIs | Use the successor |
| Usage of classic APIs | — acceptable, no action required |
Configure ATC transport settings so priority 1 and 2 findings block transport release.
| ATC 优先级 | 等级 | 发现项 | 操作 |
|---|---|---|---|
| 优先级 1(错误) | D | 对象已被修改 | 移除修改;改用 BAdI |
| 使用了不允许的增强技术 | 删除增强;改用 BAdI | ||
| 隐式或显式增强(源代码插件) | 删除增强;改用 BAdI | ||
| 对 SAP 数据库表的直接写入访问 | 使用 released 或 classic API | ||
| 调用 SAP 程序中的 form routine | 使用 released 或 classic API | ||
使用了分类为 | 使用 released 或 classic API;检查后继信息 | ||
| 使用了关键 ABAP 语句 | 使用 released 或 classic API | ||
| 优先级 2(警告) | C | 对 SAP 数据库表或视图的直接读取访问 | 使用 released CDS view 或 classic API |
| 使用了未分类为 classic API(internal)且未 released 的 SAP 对象 | 使用 released 或 classic API | ||
| 优先级 3(信息) | B | 使用了 deprecated API | 使用后继项 |
| 使用了 classic API | ——可以接受,无需操作 |
配置 ATC transport 设置,使优先级 1 和 2 的发现项阻止 transport release。
Remediation priority
修复优先级
-
Level D — eliminate entirely
- No modifications → use BAdIs
- No implicit or explicit enhancements → use BAdIs
- No direct write access to SAP DB tables → released or classic APIs
- No not-recommended () APIs → released or classic APIs
noAPI - Remove critical ABAP statements → released or classic APIs
- Do not call form routines within SAP programs → released or classic APIs
-
Level C — minimize as much as possible
- No direct read access to SAP tables → released or classic CDS views
- Replace SAP internal APIs with released or classic APIs
- If internal APIs are still needed, explore the changelog for SAP objects for incompatible changes
- Wrap remaining internal objects and create a single fine-grained ATC exemption
-
Level B — monitor
- Adopt successors for deprecated API findings
- Monitor when SAP releases an equivalent API, then migrate to Level A
- Do not rewrite stable classic code without a business reason
-
Level A — sustain
- Enforce with authorization and separate software components
S_ABPLNGVS
- Enforce with
-
Level D——完全消除
- 不进行修改 → 使用 BAdI
- 不使用隐式或显式增强 → 使用 BAdI
- 不直接写入 SAP 数据库表 → 使用 released 或 classic API
- 不使用不推荐()的 API → 使用 released 或 classic API
noAPI - 移除关键 ABAP 语句 → 使用 released 或 classic API
- 不在 SAP 程序内调用 form routine → 使用 released 或 classic API
-
Level C——尽可能减少
- 不直接读取 SAP 表 → 使用 released 或 classic CDS views
- 将 SAP internal API 替换为 released 或 classic API
- 如果仍需使用 internal API,请检查 SAP 对象 changelog,了解不兼容变更
- 包装剩余的 internal 对象,并创建单个细粒度 ATC exemption
-
Level B——持续监控
- 对 deprecated API 的发现项采用后继项
- 监控 SAP何时发布等效 API,然后迁移到 Level A
- 没有业务原因时,不要重写稳定的 classic code
-
Level A——持续保持
- 使用 授权并拆分软件组件来强制执行
S_ABPLNGVS
- 使用
Transformation Options for Legacy Code
遗留代码的转换方案
| Option | When to apply | Typical tasks |
|---|---|---|
| Retire unused code | ~60% of custom code in a typical ERP is not used productively | Collect usage data with |
| Renovate & innovate side-by-side | Loosely coupled extensions better served on SAP Business AI Platform | Analyze dependencies in Custom Code Migration app · transfer code to BTP · adapt via ATC quick fixes |
| Renovate & innovate on-stack | Tightly coupled extensions/modifications worth reimplementing in ABAP Cloud | Analyze complexity for TCO drivers · make code ABAP Cloud compliant · replace non-released objects with released APIs · use only released extension points |
| Adapt | None of the above is feasible — minimum viable action | Adapt via readiness ATC checks, Simplification Database, ADT quick fixes (up to ~60% automation) · SQL Monitor · CDS/AMDP pushdown |
Recommendation: leave behind as much legacy code as possible during the conversion — cleaning up afterwards costs significantly more.
| 方案 | 适用场景 | 典型任务 |
|---|---|---|
| 淘汰未使用的代码 | 典型 ERP 中约 60% 的自定义代码未被有效使用 | 使用 |
| 并行翻新与创新 | 松耦合扩展更适合部署在 SAP Business AI Platform 上 | 在 Custom Code Migration app 中分析依赖关系 · 将代码迁移到 BTP · 通过 ATC quick fixes 进行适配 |
| 在现有技术栈上翻新与创新 | 紧密耦合的扩展或修改值得在 ABAP Cloud 中重新实现 | 分析影响 TCO 的复杂性因素 · 使代码符合 ABAP Cloud 要求 · 将 non-released 对象替换为 released API · 仅使用 released extension points |
| 适配 | 上述方案均不可行——采用最低可行措施 | 通过 readiness ATC checks、Simplification Database、ADT quick fixes 进行适配(自动化程度最高约 60%)· SQL Monitor · CDS/AMDP pushdown |
建议:在转换过程中尽可能淘汰遗留代码——事后再清理的成本会显著增加。
Changelog for SAP Objects (Level C risk mitigation)
SAP 对象 Changelog(Level C 风险缓解)
Custom code using internal SAP objects is not upgrade-stable by definition. Internal objects can change during an upgrade, a feature pack import, or even an SAP Note import.
Incompatible changes include:
- Deletion of objects (e.g., function modules)
- Renaming or deletion of function module parameters
- Incompatible changes to parameter types
- Renaming or deletion of methods in SAP classes
- Removal of fields from CDS views
Covered object types: , , , , .
FUNCCLASINTFSTOBBDEFHow to use it:
- Download the Simplification Database file from the SAP Software Download Center (SAP Support Portal)
- Import it via transaction
SYCM - Run the changelog ATC check during development, or before the system upgrade like other simplification item checks
- Refactor affected usages toward released or classic APIs
Objects in the changelog are not automatically demoted to Level D — continued usage may be allowed depending on the change's scope and criticality.
从定义上讲,使用 internal SAP 对象的 custom code 不具备 upgrade stability。Internal 对象可能会在 upgrade、Feature Pack 导入,甚至 SAP Note 导入期间发生变化。
不兼容变更包括:
- 删除对象(例如 function modules)
- 重命名或删除 function module 参数
- 参数类型发生不兼容变更
- 重命名或删除 SAP classes 中的方法
- 从 CDS views 中移除字段
涵盖的对象类型:、、、、。
FUNCCLASINTFSTOBBDEF使用方法:
- 从 SAP Software Download Center(SAP Support Portal)下载 Simplification Database 文件
- 通过 transaction 导入该文件
SYCM - 在开发期间运行 changelog ATC 检查,或像其他 simplification item checks 一样在系统升级前运行
- 将受影响的用法重构为 released 或 classic API
Changelog 中的对象不会被自动降级为 Level D——根据变更的范围和严重程度,持续使用可能仍被允许。
Common API Replacements
常见 API 替代方案
Database Access
数据库访问
| Classic Pattern | ABAP Cloud Replacement |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| Direct table access | Use |
| Classic 模式 | ABAP Cloud 替代方案 |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| 直接访问表 | 使用 |
Function Modules → Released Classes
Function Modules → Released Classes
| Classic FM | Released Replacement |
|---|---|
| |
| |
| |
| Not available — use Fiori UI |
| |
| Handled by RAP framework (no explicit commit) |
| |
| Not released — wrap or use custom persistence |
| |
| RAP draft / managed locking or |
| Classic FM | Released 替代项 |
|---|---|
| |
| |
| |
| 不可用——使用 Fiori UI |
| |
| 由 RAP framework 处理(无需显式 commit) |
| |
| 未 released——进行包装或使用 custom persistence |
| |
| RAP draft/managed locking 或 |
Language Constructs
语言构造
| Incompatible Construct | Cloud-Compatible Alternative |
|---|---|
| Not available — use API or RAP |
| Not available — use Application Jobs |
| Not available — use Fiori UI for output |
| Not available — use Fiori/UI5 |
| |
| RAP saver class / managed save |
| ABAP SQL or AMDP |
| Not available — use strategy/factory pattern |
| RTTI: |
| Not available — use method parameters |
| 不兼容构造 | Cloud 兼容替代方案 |
|---|---|
| 不可用——使用 API 或 RAP |
| 不可用——使用 Application Jobs |
| 不可用——使用 Fiori UI 输出 |
| 不可用——使用 Fiori/UI5 |
| |
| RAP saver class/managed save |
| ABAP SQL 或 AMDP |
| 不可用——使用 strategy/factory pattern |
| RTTI: |
| 不可用——使用 method parameters |
Wrapper Pattern
Wrapper 模式
When no released API exists, create a wrapper class in a classic ABAP software component and release it for ABAP Cloud (Level A) consumption.
Wrapper level classification:
- Wrapping a classic API (Level B object) → the wrapper is Level B
- Wrapping an internal object (Level C object) → the wrapper is Level C
- Wrapping a not-recommended () object → Level D, do not build it
noAPI
Wrapping also collapses N ATC findings into 1, so a single fine-grained exemption covers the usage. This is SAP's recommended practice for working with internal SAP objects.
当不存在 released API 时,在 classic ABAP software component 中创建 wrapper class,并将其 release,以供 **ABAP Cloud(Level A)**使用。
Wrapper 等级分类:
- 包装 classic API(Level B 对象)→ wrapper 为 Level B
- 包装 internal 对象(Level C 对象)→ wrapper 为 Level C
- 包装不推荐()的对象 → Level D,不应创建
noAPI
包装还可以将 N 个 ATC 发现项合并为 1 个,从而通过单个细粒度 exemption 覆盖相关用法。这是 SAP 针对 internal SAP 对象的推荐实践。
Step 1: Create Wrapper Interface (classic ABAP, released for Cloud)
第 1 步:创建 Wrapper 接口(classic ABAP,released for Cloud)
abap
"Released for use in ABAP Cloud (C1 contract)
INTERFACE zif_text_handler
PUBLIC.
METHODS read_text
IMPORTING iv_id TYPE thead-tdid
iv_name TYPE thead-tdname
iv_object TYPE thead-tdobject
iv_language TYPE sy-langu DEFAULT sy-langu
RETURNING VALUE(rt_text) TYPE tline_tab
RAISING zcx_text_error.
METHODS save_text
IMPORTING iv_id TYPE thead-tdid
iv_name TYPE thead-tdname
iv_object TYPE thead-tdobject
iv_language TYPE sy-langu DEFAULT sy-langu
it_text TYPE tline_tab
RAISING zcx_text_error.
ENDINTERFACE.abap
"Released for use in ABAP Cloud (C1 contract)
INTERFACE zif_text_handler
PUBLIC.
METHODS read_text
IMPORTING iv_id TYPE thead-tdid
iv_name TYPE thead-tdname
iv_object TYPE thead-tdobject
iv_language TYPE sy-langu DEFAULT sy-langu
RETURNING VALUE(rt_text) TYPE tline_tab
RAISING zcx_text_error.
METHODS save_text
IMPORTING iv_id TYPE thead-tdid
iv_name TYPE thead-tdname
iv_object TYPE thead-tdobject
iv_language TYPE sy-langu DEFAULT sy-langu
it_text TYPE tline_tab
RAISING zcx_text_error.
ENDINTERFACE.Step 2: Create Wrapper Class (classic ABAP, released for Cloud)
第 2 步:创建 Wrapper 类(classic ABAP,released for Cloud)
abap
"Implementation uses non-released FMs internally
"Released for use in ABAP Cloud (C1 contract)
CLASS zcl_text_handler DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_text_handler.
ENDCLASS.
CLASS zcl_text_handler IMPLEMENTATION.
METHOD zif_text_handler~read_text.
"Uses non-released FM internally — acceptable inside the wrapper
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = iv_id
name = iv_name
object = iv_object
language = iv_language
TABLES
lines = rt_text
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_text_error.
ENDIF.
ENDMETHOD.
METHOD zif_text_handler~save_text.
DATA ls_header TYPE thead.
ls_header-tdid = iv_id.
ls_header-tdname = iv_name.
ls_header-tdobject = iv_object.
ls_header-tdspras = iv_language.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING header = ls_header
TABLES lines = it_text
EXCEPTIONS OTHERS = 1.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_text_error.
ENDIF.
ENDMETHOD.
ENDCLASS.abap
"Implementation uses non-released FMs internally
"Released for use in ABAP Cloud (C1 contract)
CLASS zcl_text_handler DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_text_handler.
ENDCLASS.
CLASS zcl_text_handler IMPLEMENTATION.
METHOD zif_text_handler~read_text.
"Uses non-released FM internally — acceptable inside the wrapper
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = iv_id
name = iv_name
object = iv_object
language = iv_language
TABLES
lines = rt_text
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_text_error.
ENDIF.
ENDMETHOD.
METHOD zif_text_handler~save_text.
DATA ls_header TYPE thead.
ls_header-tdid = iv_id.
ls_header-tdname = iv_name.
ls_header-tdobject = iv_object.
ls_header-tdspras = iv_language.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING header = ls_header
TABLES lines = it_text
EXCEPTIONS OTHERS = 1.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_text_error.
ENDIF.
ENDMETHOD.
ENDCLASS.Step 3: Release the Wrapper
第 3 步:Release Wrapper
In ADT, open the wrapper class properties:
- Go to API State tab
- Add Use System-Internally (C1) contract
- Set visibility to Use in ABAP Cloud
在 ADT 中打开 wrapper class 的属性:
- 转到 API State 选项卡
- 添加 Use System-Internally (C1) contract
- 将可见性设置为 Use in ABAP Cloud
Step 4: Use in ABAP Cloud (Level A) Code
第 4 步:在 ABAP Cloud(Level A)代码中使用
abap
"ABAP Cloud code — uses released wrapper
DATA(lo_text) = NEW zcl_text_handler( ).
DATA(lt_text) = lo_text->zif_text_handler~read_text(
iv_id = 'ST'
iv_name = lv_doc_name
iv_object = 'VBBK' ).abap
"ABAP Cloud code — uses released wrapper
DATA(lo_text) = NEW zcl_text_handler( ).
DATA(lt_text) = lo_text->zif_text_handler~read_text(
iv_id = 'ST'
iv_name = lv_doc_name
iv_object = 'VBBK' ).Step 5: Handle authorizations and exemptions
第 5 步:处理授权和 Exemptions
- Classic APIs often check non-released authorization objects, which cannot be used in ABAP Cloud. PFCG roles may mix released and non-released authorization objects.
- Provide data for the wrapper when releasing it, and create
SU22variants for each designated usage so roles can be maintained.SU22 - Create a single fine-grained ATC exemption on the wrapper's internal usage rather than one per call site.
- Retire the wrapper once SAP releases the API — replace it and move the code to the ABAP Cloud software component.
- Classic API 通常会检查 non-released authorization objects,这些对象无法在 ABAP Cloud 中使用。PFCG roles 可能混合了 released 和 non-released authorization objects。
- Release wrapper 时为其提供 数据,并为每个指定用法创建
SU22variants,以便维护 roles。SU22 - 在 wrapper 的内部使用上创建单个细粒度 ATC exemption,而不是为每个调用点分别创建。
- SAP release 对应 API 后,淘汰该 wrapper——进行替换并将代码迁移到 ABAP Cloud software component。
Wrapper guidance by object type
按对象类型划分的 Wrapper 指南
- CDS views: create a custom CDS view on top of the non-released SAP CDS view and release it. Association targets and value help views may also need wrappers. If no SAP CDS view exists at all, wrap the database table.
- Classes / interfaces: wrap the non-released FM or class. Do not copy non-released data types (data elements, structures, table types) used in the signature — wrap them via declarations in the wrapper's public section, so only the wrapper needs releasing.
TYPES
- CDS views:在 non-released SAP CDS view 之上创建 custom CDS view 并 release。Association targets 和 value help views 也可能需要 wrapper。如果完全不存在 SAP CDS view,则包装数据库表。
- Classes / interfaces:包装 non-released FM 或 class。不要复制签名中使用的 non-released data types(data elements、structures、table types)——应通过 wrapper 公共部分的 声明进行包装,使只需 release wrapper。
TYPES
Migration Strategy by Object Type
按对象类型划分的迁移策略
Reports / Programs
报表/程序
Classic Report → Application Job class + CDS view + Fiori app
1. Extract data logic → CDS view entities
2. Extract business logic → ABAP Cloud class
3. Create Application Job catalog entry (CL_APJ_DT_CREATE_CONTENT)
4. Schedule via Fiori app "Application Jobs"Classic Report → Application Job class + CDS view + Fiori app
1. Extract data logic → CDS view entities
2. Extract business logic → ABAP Cloud class
3. Create Application Job catalog entry (CL_APJ_DT_CREATE_CONTENT)
4. Schedule via Fiori app "Application Jobs"Dynpro Transactions
Dynpro Transactions
Dynpro Transaction → RAP BO + Fiori Elements app
1. Identify CRUD operations → RAP behavior definition
2. Map screen fields → CDS view entity
3. Create service definition/binding
4. Generate Fiori Elements appDynpro Transaction → RAP BO + Fiori Elements app
1. Identify CRUD operations → RAP behavior definition
2. Map screen fields → CDS view entity
3. Create service definition/binding
4. Generate Fiori Elements appBAPIs
BAPIs
BAPI → RAP BO with custom actions
1. Map BAPI parameters → CDS abstract entities
2. Implement as RAP actions or factory actions
3. Expose via OData service bindingBAPI → RAP BO with custom actions
1. Map BAPI parameters → CDS abstract entities
2. Implement as RAP actions or factory actions
3. Expose via OData service bindingRFC Function Modules
RFC Function Modules
RFC FM → Released API class or RAP service
1. If simple logic → Released ABAP class (Level A)
2. If CRUD → RAP BO with service binding (Level A)
3. If complex → Wrapper class in classic ABAP (Level B or C)RFC FM → Released API class or RAP service
1. If simple logic → Released ABAP class (Level A)
2. If CRUD → RAP BO with service binding (Level A)
3. If complex → Wrapper class in classic ABAP (Level B or C)Finding Released and Classic Replacements
查找 Released 和 Classic 替代项
In ADT
在 ADT 中
- Released Object Search: → Filter by "Released" APIs
Ctrl+Shift+A - API State Filter: In Project Explorer, filter by C1 release state
- ABAP Element Info: Hover over a non-released object → see successor suggestion if available
- Released Object Search:→ 按 "Released" API 筛选
Ctrl+Shift+A - API State Filter:在 Project Explorer 中按 C1 release state 筛选
- ABAP Element Info:将鼠标悬停在 non-released 对象上 → 如果有后继建议,则会显示
Using the Released Objects App
使用 Released Objects App
Fiori app Released Objects ():
F5865- Search by classic object name
- Filter by release state (C1, C2)
- View successor information
Fiori app Released Objects():
F5865- 按 classic object name 搜索
- 按 release state(C1、C2)筛选
- 查看后继信息
Using the Cloudification Repository
使用 Cloudification Repository
Determine an object's clean core level and successor:
- Classic APIs (Level B): — viewer at https://sap.github.io/abap-atc-cr-cv-s4hc/?version=objectClassifications_SAP.json
objectClassifications_SAP.json - Not recommended (Level D): filter the viewer for =
statenoAPI - Internal with successor (Level C): flagged
internalAPI - Anything unclassified and not released defaults to Level C
确定对象的 clean core 等级和后继项:
- Classic APIs(Level B):——查看器位于 https://sap.github.io/abap-atc-cr-cv-s4hc/?version=objectClassifications_SAP.json
objectClassifications_SAP.json - 不推荐(Level D):在查看器中筛选 =
statenoAPI - 有后继项的 internal(Level C):标记为
internalAPI - 所有未分类且未 released 的对象默认归为 Level C
Programmatic Check
以编程方式检查
abap
"Check if an object is released for ABAP Cloud (Level A)
SELECT SINGLE *
FROM i_apistateofrepositoryobject
WHERE ObjectType = 'CLAS'
AND ObjectName = 'CL_NUMBERRANGE_RUNTIME'
AND ReleaseState = 'RELEASED'
INTO @DATA(ls_state).abap
"Check if an object is released for ABAP Cloud (Level A)
SELECT SINGLE *
FROM i_apistateofrepositoryobject
WHERE ObjectType = 'CLAS'
AND ObjectName = 'CL_NUMBERRANGE_RUNTIME'
AND ReleaseState = 'RELEASED'
INTO @DATA(ls_state).Step-by-Step Remediation Checklist
分步修复清单
- Run ATC clean core checks () on the package/objects
ABAP_CLEAN_CORE_DEVELOPMENT - Export findings and group by ATC priority → clean core level (P1=D, P2=C, P3=B)
- Eliminate all Level D findings (priority 1):
- Remove modifications → use released or classic BAdIs
- Remove implicit/explicit enhancements → use BAdIs
- Remove direct write access to SAP tables → released or classic APIs
- Replace object usage → check successor information
noAPI - Remove critical ABAP statements
- Remove calls to SAP form routines
- Minimize Level C findings (priority 2):
- Replace direct read access to SAP tables → released or classic CDS views
- Replace SAP internal APIs → released or classic APIs
- For unavoidable internal usage: wrap + single ATC exemption
- Import the changelog for SAP objects via and check for incompatible changes
SYCM
- Review Level B findings (priority 3):
- Adopt successors for deprecated APIs
- Leave stable classic API usage as-is
- For each non-released API without a replacement:
- Create a wrapper in the classic ABAP component and release it for ABAP Cloud
- Provide data and variants for the wrapper
SU22
- For each incompatible language construct: refactor to a cloud-compatible alternative
- For Dynpro/ALV/list-based UIs: plan the Fiori replacement (separate project)
- Move migrated objects to the ABAP for Cloud Development software component
- Run before switching an object's language version
ABAP_CLOUD_READINESS - Re-run ATC checks — no priority 1 or 2 findings should remain
- Configure ATC transport settings to block release on priority 1 and 2 findings
- Execute regression tests
- 对 package/对象运行 ATC clean core 检查()
ABAP_CLEAN_CORE_DEVELOPMENT - 导出发现项,并按 ATC 优先级 → clean core 等级进行分组(P1=D、P2=C、P3=B)
- 消除所有 Level D 发现项(优先级 1):
- 移除修改 → 使用 released 或 classic BAdI
- 移除隐式/显式增强 → 使用 BAdI
- 移除对 SAP 表的直接写入访问 → 使用 released 或 classic API
- 替换 对象用法 → 检查后继信息
noAPI - 移除关键 ABAP 语句
- 移除对 SAP form routines 的调用
- 尽量减少 Level C 发现项(优先级 2):
- 将对 SAP 表的直接读取访问替换为 released 或 classic CDS views
- 将 SAP internal API 替换为 released 或 classic API
- 对不可避免的 internal 使用:进行包装并创建单个 ATC exemption
- 通过 导入 SAP 对象 changelog,并检查不兼容变更
SYCM
- 检查 Level B 发现项(优先级 3):
- 对 deprecated API 采用后继项
- 保持稳定的 classic API 用法不变
- 对每个没有替代项的 non-released API:
- 在 classic ABAP component 中创建 wrapper,并将其 release 以供 ABAP Cloud 使用
- 为 wrapper 提供 数据和 variants
SU22
- 对每个不兼容的语言构造:重构为 cloud 兼容的替代方案
- 对 Dynpro/ALV/基于列表的 UI:规划 Fiori 替代方案(独立项目)
- 将已迁移对象移至 ABAP for Cloud Development software component
- 在切换对象的 language version 之前运行
ABAP_CLOUD_READINESS - 重新运行 ATC 检查——不应再存在优先级 1 或 2 的发现项
- 配置 ATC transport 设置,在出现优先级 1 或 2 的发现项时阻止 release
- 执行回归测试
Output Format
输出格式
When helping with migration topics, structure responses as:
markdown
undefined在帮助处理迁移主题时,按以下结构组织回答:
markdown
undefinedMigration Guidance
Migration Guidance
Current Code Analysis
Current Code Analysis
- Current clean core level: [A / B / C / D] (lowest level used)
- Level D findings (must fix): [list]
- Level C findings (minimize): [list]
- Level B findings (monitor): [list]
- Incompatible constructs: [list]
- Estimated effort: [low / medium / high]
- Current clean core level: [A / B / C / D] (lowest level used)
- Level D findings (must fix): [list]
- Level C findings (minimize): [list]
- Level B findings (monitor): [list]
- Incompatible constructs: [list]
- Estimated effort: [low / medium / high]
Remediation Strategy
Remediation Strategy
[Ordered by level: D first, then C, then B]
[For each finding: original → replacement with code, target level]
[Ordered by level: D first, then C, then B]
[For each finding: original → replacement with code, target level]
Wrapper Requirements
Wrapper Requirements
[Objects needing wrappers, with the resulting wrapper level (B or C)]
[Objects needing wrappers, with the resulting wrapper level (B or C)]
Target State
Target State
- Achievable clean core level: [A / B]
- Residual exemptions required: [list with justification]
undefined- Achievable clean core level: [A / B]
- Residual exemptions required: [list with justification]
undefinedReferences
参考资料
- Clean Core Extensibility Whitepaper — the authoritative source for the level concept
- Extend SAP S/4HANA in the cloud and on premise with ABAP based extensions (Version 2.3, August 2025)
- Custom Code Migration Guide: https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/custom-code-migration
- ABAP Cloud API Release Info: https://help.sap.com/docs/abap-cloud/abap-rap/released-abap-objects
- Cloudification Repository: https://github.com/SAP/abap-atc-cr-cv-s4hc
- Wrapper Pattern: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/19_ABAP_Cloud.md
- ATC Cloud Readiness: https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/checking-abap-cloud-readiness
- SAP Note 3565942 — clean core ATC checks
- SAP Note 3578329 — classic technology classification
- Clean Core Extensibility Whitepaper——clean core 等级概念的权威来源
- Extend SAP S/4HANA in the cloud and on premise with ABAP based extensions(版本 2.3,2025 年 8 月)
- Custom Code Migration Guide:https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/custom-code-migration
- ABAP Cloud API Release Info:https://help.sap.com/docs/abap-cloud/abap-rap/released-abap-objects
- Cloudification Repository:https://github.com/SAP/abap-atc-cr-cv-s4hc
- Wrapper Pattern:https://github.com/SAP-samples/abap-cheat-sheets/blob/main/19_ABAP_Cloud.md
- ATC Cloud Readiness:https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/checking-abap-cloud-readiness
- SAP Note 3565942——clean core ATC 检查
- SAP Note 3578329——classic technology 分类
Detailed Reference
详细参考
- Remediation checklist: Read for the full level-based remediation checklist, effort estimation, and rollback planning
references/migration-checklist.md
- 修复清单:阅读 ,了解完整的基于等级的修复清单、工作量估算和回滚规划
references/migration-checklist.md
Related Skills
相关 Skills
- abap-cloud: Use for clean core level definitions, development models, and wrapper classification
- atc-cloudification: Use for configuring ATC clean core checks and level governance
- released-abap-classes: Use for finding Level A released API replacements
- badi-enhancement: Use for replacing modifications and enhancements with BAdIs
- abap-sql-amdp: Use for modernizing ABAP SQL and AMDP during migration
- abap-cloud:用于查询 clean core 等级定义、开发模型和 wrapper 分类
- atc-cloudification:用于配置 ATC clean core 检查和等级治理
- released-abap-classes:用于查找 Level A released API 替代项
- badi-enhancement:用于将修改和增强替换为 BAdI
- abap-sql-amdp:用于在迁移过程中将 ABAP SQL 和 AMDP 现代化