abap-cloud-migration

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

ABAP 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 the
abap-cloud
skill for the level definitions.
系统性提升 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 为目标”。有关等级定义,请参阅
abap-cloud
skill。

Workflow

工作流

  1. Assess current state: run ATC clean core checks on existing code
  2. Classify findings by level: priority 1 → Level D, priority 2 → Level C, priority 3 → Level B
  3. Prioritize remediation: Level D first (must fix), then Level C (minimize), then Level B (monitor)
  4. Choose a transformation option: retire · renovate side-by-side · renovate on-stack · adapt
  5. Implement replacements: released APIs, classic APIs, or wrappers with a single ATC exemption
  6. Validate: re-run ATC checks, verify no priority 1/2 findings remain, test functionality
  1. 评估当前状态:对现有代码运行 ATC clean core 检查
  2. 按等级对发现项分类:优先级 1 → Level D,优先级 2 → Level C,优先级 3 → Level B
  3. 确定修复优先级:先处理 Level D(必须修复),然后处理 Level C(尽量减少),最后处理 Level B(持续监控)
  4. 选择转换方案:retire(淘汰)· renovate side-by-side(并行翻新)· renovate on-stack(栈内翻新)· adapt(适配)
  5. 实施替代方案:使用 released API、classic API,或带有单个 ATC exemption 的 wrapper
  6. 验证:重新运行 ATC 检查,确认不再存在优先级 1/2 的发现项,并测试功能

Migration Assessment

迁移评估

Running ATC clean core checks

运行 ATC clean core 检查

  1. In ADT: right-click package → Run As → ABAP Test Cockpit
  2. Use check variant
    ABAP_CLEAN_CORE_DEVELOPMENT
    (SAP-delivered) or build a variant from
    ABAP_CLOUD_DEVELOPMENT_DEFAULT
    including:
    • SYCM_USAGE_OF_APIS
      — released/classic API classification, SQL on SAP tables, SAP form routines
    • SYCM_ALLOWED_ENH_TECHNOLOGY
      — enhancement technology compliance
    • CI_SEARCH_CUST_MODIFICATIONS
      — modifications
    • CI_CRITICAL_STATEMENTS
      — critical statements
    • SLIN_SEC
      — Code Vulnerability Analyzer (additionally recommended)
  3. Use
    ABAP_CLOUD_READINESS
    to verify ABAP Cloud rules before switching an object's language version
  4. Review findings in the ATC Results view
If
SYCM_USAGE_OF_APIS
or
SYCM_ALLOWED_ENH_TECHNOLOGY
are unavailable, implement SAP Note 3565942.
  1. 在 ADT 中:右键单击 package → Run As → ABAP Test Cockpit
  2. 使用 SAP 提供的检查变体
    ABAP_CLEAN_CORE_DEVELOPMENT
    ,或基于
    ABAP_CLOUD_DEVELOPMENT_DEFAULT
    构建包含以下检查的变体:
    • SYCM_USAGE_OF_APIS
      ——released/classic API 分类、SAP 表上的 SQL、SAP form routines
    • SYCM_ALLOWED_ENH_TECHNOLOGY
      ——增强技术合规性
    • CI_SEARCH_CUST_MODIFICATIONS
      ——修改
    • CI_CRITICAL_STATEMENTS
      ——关键语句
    • SLIN_SEC
      ——Code Vulnerability Analyzer(另外建议启用)
  3. 使用
    ABAP_CLOUD_READINESS
    验证 ABAP Cloud 规则,然后再切换对象的 language version
  4. 在 ATC Results 视图中检查发现项
如果
SYCM_USAGE_OF_APIS
或
SYCM_ALLOWED_ENH_TECHNOLOGY
不可用,请实施 SAP Note 3565942。

ATC findings mapped to clean core levels

ATC 发现项与 clean core 等级的对应关系

ATC priorityLevelFindingAction
Priority 1 (Error)DObject is modifiedRemove modification; use a BAdI instead
Enhancement technology is not allowedDelete enhancement; use a BAdI
Implicit or explicit enhancement (source code plug-in)Delete enhancement; use a BAdI
Direct write access to SAP database tablesUse released or classic APIs
Call of form routines in SAP programUse released or classic APIs
Usage of SAP object classified as
noAPI
Use released or classic APIs; check successor info
Usage of critical ABAP statementsUse released or classic APIs
Priority 2 (Warning)CDirect read access to SAP database table/viewUse released CDS view or classic API
Usage of SAP object not classified as classic API (internal) and not releasedUse released or classic APIs
Priority 3 (Info)BUsage of deprecated APIsUse 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
使用了分类为
noAPI
的 SAP 对象
使用 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

修复优先级

  1. 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 (
      noAPI
      ) APIs → released or classic APIs
    • Remove critical ABAP statements → released or classic APIs
    • Do not call form routines within SAP programs → released or classic APIs
  2. 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
  3. 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
  4. Level A — sustain
    • Enforce with
      S_ABPLNGVS
      authorization and separate software components
  1. Level D——完全消除
    • 不进行修改 → 使用 BAdI
    • 不使用隐式或显式增强 → 使用 BAdI
    • 不直接写入 SAP 数据库表 → 使用 released 或 classic API
    • 不使用不推荐(
      noAPI
      )的 API → 使用 released 或 classic API
    • 移除关键 ABAP 语句 → 使用 released 或 classic API
    • 不在 SAP 程序内调用 form routine → 使用 released 或 classic API
  2. Level C——尽可能减少
    • 不直接读取 SAP 表 → 使用 released 或 classic CDS views
    • 将 SAP internal API 替换为 released 或 classic API
    • 如果仍需使用 internal API,请检查 SAP 对象 changelog,了解不兼容变更
    • 包装剩余的 internal 对象,并创建单个细粒度 ATC exemption
  3. Level B——持续监控
    • 对 deprecated API 的发现项采用后继项
    • 监控 SAP何时发布等效 API,然后迁移到 Level A
    • 没有业务原因时,不要重写稳定的 classic code
  4. Level A——持续保持
    • 使用
      S_ABPLNGVS
      授权并拆分软件组件来强制执行

Transformation Options for Legacy Code

遗留代码的转换方案

OptionWhen to applyTypical tasks
Retire unused code~60% of custom code in a typical ERP is not used productivelyCollect usage data with
SUSG
/
SCMON
· analyze in Custom Code Migration app · remove/backup unused code · use the clone finder
Renovate & innovate side-by-sideLoosely coupled extensions better served on SAP Business AI PlatformAnalyze dependencies in Custom Code Migration app · transfer code to BTP · adapt via ATC quick fixes
Renovate & innovate on-stackTightly coupled extensions/modifications worth reimplementing in ABAP CloudAnalyze complexity for TCO drivers · make code ABAP Cloud compliant · replace non-released objects with released APIs · use only released extension points
AdaptNone of the above is feasible — minimum viable actionAdapt 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% 的自定义代码未被有效使用使用
SUSG
/
SCMON
收集使用数据 · 在 Custom Code Migration app 中分析 · 删除或备份未使用的代码 · 使用 clone finder
并行翻新与创新松耦合扩展更适合部署在 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:
FUNC
,
CLAS
,
INTF
,
STOB
,
BDEF
.
How to use it:
  1. Download the Simplification Database file from the SAP Software Download Center (SAP Support Portal)
  2. Import it via transaction
    SYCM
  3. Run the changelog ATC check during development, or before the system upgrade like other simplification item checks
  4. 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 中移除字段
涵盖的对象类型:
FUNC
、
CLAS
、
INTF
、
STOB
、
BDEF
。
使用方法:
  1. 从 SAP Software Download Center(SAP Support Portal)下载 Simplification Database 文件
  2. 通过 transaction
    SYCM
    导入该文件
  3. 在开发期间运行 changelog ATC 检查,或像其他 simplification item checks 一样在系统升级前运行
  4. 将受影响的用法重构为 released 或 classic API
Changelog 中的对象不会被自动降级为 Level D——根据变更的范围和严重程度,持续使用可能仍被允许。

Common API Replacements

常见 API 替代方案

Database Access

数据库访问

Classic PatternABAP Cloud Replacement
SELECT FROM mara
SELECT FROM i_product
SELECT FROM bkpf / bseg
SELECT FROM i_journalentry
SELECT FROM vbak / vbap
SELECT FROM i_salesorder
SELECT FROM ekko / ekpo
SELECT FROM i_purchaseorder
SELECT FROM kna1
SELECT FROM i_customer
SELECT FROM lfa1
SELECT FROM i_supplier
SELECT FROM t001
SELECT FROM i_companycode
Direct table accessUse
I_*
released CDS views
Classic 模式ABAP Cloud 替代方案
SELECT FROM mara
SELECT FROM i_product
SELECT FROM bkpf / bseg
SELECT FROM i_journalentry
SELECT FROM vbak / vbap
SELECT FROM i_salesorder
SELECT FROM ekko / ekpo
SELECT FROM i_purchaseorder
SELECT FROM kna1
SELECT FROM i_customer
SELECT FROM lfa1
SELECT FROM i_supplier
SELECT FROM t001
SELECT FROM i_companycode
直接访问表使用
I_*
released CDS views

Function Modules → Released Classes

Function Modules → Released Classes

Classic FMReleased Replacement
GUID_CREATE
cl_system_uuid=>create_uuid_x16_static( )
CONVERSION_EXIT_ALPHA_INPUT
cl_abap_format=>alpha_input( )
CONVERSION_EXIT_ALPHA_OUTPUT
cl_abap_format=>alpha_output( )
POPUP_TO_CONFIRM
Not available — use Fiori UI
NUMBER_GET_NEXT
cl_numberrange_runtime=>number_get( )
BAPI_TRANSACTION_COMMIT
Handled by RAP framework (no explicit commit)
SO_NEW_DOCUMENT_ATT_SEND_API1
cl_bcs_mail_message
(send emails)
READ_TEXT
/
SAVE_TEXT
Not released — wrap or use custom persistence
JOB_OPEN
/
JOB_CLOSE
/
JOB_SUBMIT
cl_apj_rt_api
(Application Jobs)
ENQUEUE_*
/
DEQUEUE_*
RAP draft / managed locking or
CL_ABAP_LOCK_OBJECT
Classic FMReleased 替代项
GUID_CREATE
cl_system_uuid=>create_uuid_x16_static( )
CONVERSION_EXIT_ALPHA_INPUT
cl_abap_format=>alpha_input( )
CONVERSION_EXIT_ALPHA_OUTPUT
cl_abap_format=>alpha_output( )
POPUP_TO_CONFIRM
不可用——使用 Fiori UI
NUMBER_GET_NEXT
cl_numberrange_runtime=>number_get( )
BAPI_TRANSACTION_COMMIT
由 RAP framework 处理(无需显式 commit)
SO_NEW_DOCUMENT_ATT_SEND_API1
cl_bcs_mail_message
(发送电子邮件)
READ_TEXT
/
SAVE_TEXT
未 released——进行包装或使用 custom persistence
JOB_OPEN
/
JOB_CLOSE
/
JOB_SUBMIT
cl_apj_rt_api
(Application Jobs)
ENQUEUE_*
/
DEQUEUE_*
RAP draft/managed locking 或
CL_ABAP_LOCK_OBJECT

Language Constructs

语言构造

Incompatible ConstructCloud-Compatible Alternative
CALL TRANSACTION
Not available — use API or RAP
SUBMIT ... AND RETURN
Not available — use Application Jobs
WRITE
/
SKIP
/
ULINE
(list output)
Not available — use Fiori UI for output
CALL SCREEN
/
CALL SELECTION-SCREEN
Not available — use Fiori/UI5
MESSAGE ... RAISING
RAISE EXCEPTION TYPE ...
CALL FUNCTION ... IN UPDATE TASK
RAP saver class / managed save
EXEC SQL
(Native SQL)
ABAP SQL or AMDP
GENERATE SUBROUTINE POOL
Not available — use strategy/factory pattern
DESCRIBE FIELD ... TYPE
RTTI:
cl_abap_typedescr=>describe_by_data( )
GET/SET PARAMETER ID
Not available — use method parameters
不兼容构造Cloud 兼容替代方案
CALL TRANSACTION
不可用——使用 API 或 RAP
SUBMIT ... AND RETURN
不可用——使用 Application Jobs
WRITE
/
SKIP
/
ULINE
(列表输出)
不可用——使用 Fiori UI 输出
CALL SCREEN
/
CALL SELECTION-SCREEN
不可用——使用 Fiori/UI5
MESSAGE ... RAISING
RAISE EXCEPTION TYPE ...
CALL FUNCTION ... IN UPDATE TASK
RAP saver class/managed save
EXEC SQL
(Native SQL)
ABAP SQL 或 AMDP
GENERATE SUBROUTINE POOL
不可用——使用 strategy/factory pattern
DESCRIBE FIELD ... TYPE
RTTI:
cl_abap_typedescr=>describe_by_data( )
GET/SET PARAMETER ID
不可用——使用 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 (
    noAPI
    ) object
    → Level D, do not build it
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
  • 包装不推荐(
    noAPI
    )的对象
    → Level D,不应创建
包装还可以将 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:
  1. Go to API State tab
  2. Add Use System-Internally (C1) contract
  3. Set visibility to Use in ABAP Cloud
在 ADT 中打开 wrapper class 的属性:
  1. 转到 API State 选项卡
  2. 添加 Use System-Internally (C1) contract
  3. 将可见性设置为 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
    SU22
    data for the wrapper when releasing it, and create
    SU22
    variants for each designated usage so roles can be maintained.
  • 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 时为其提供
    SU22
    数据,并为每个指定用法创建
    SU22
    variants,以便维护 roles。
  • 在 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
    TYPES
    declarations in the wrapper's public section, so only the wrapper needs releasing.
  • 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 公共部分的
    TYPES
    声明进行包装,使只需 release wrapper。

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 app
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 app

BAPIs

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 binding
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 binding

RFC 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 中

  1. Released Object Search:
    Ctrl+Shift+A
    → Filter by "Released" APIs
  2. API State Filter: In Project Explorer, filter by C1 release state
  3. ABAP Element Info: Hover over a non-released object → see successor suggestion if available
  1. Released Object Search:
    Ctrl+Shift+A
    → 按 "Released" API 筛选
  2. API State Filter:在 Project Explorer 中按 C1 release state 筛选
  3. 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:
确定对象的 clean core 等级和后继项:

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

分步修复清单

  1. Run ATC clean core checks (
    ABAP_CLEAN_CORE_DEVELOPMENT
    ) on the package/objects
  2. Export findings and group by ATC priority → clean core level (P1=D, P2=C, P3=B)
  3. 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
      noAPI
      object usage → check successor information
    • Remove critical ABAP statements
    • Remove calls to SAP form routines
  4. 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
      SYCM
      and check for incompatible changes
  5. Review Level B findings (priority 3):
    • Adopt successors for deprecated APIs
    • Leave stable classic API usage as-is
  6. For each non-released API without a replacement:
    • Create a wrapper in the classic ABAP component and release it for ABAP Cloud
    • Provide
      SU22
      data and variants for the wrapper
  7. For each incompatible language construct: refactor to a cloud-compatible alternative
  8. For Dynpro/ALV/list-based UIs: plan the Fiori replacement (separate project)
  9. Move migrated objects to the ABAP for Cloud Development software component
  10. Run
    ABAP_CLOUD_READINESS
    before switching an object's language version
  11. Re-run ATC checks — no priority 1 or 2 findings should remain
  12. Configure ATC transport settings to block release on priority 1 and 2 findings
  13. Execute regression tests
  1. 对 package/对象运行 ATC clean core 检查(
    ABAP_CLEAN_CORE_DEVELOPMENT
    )
  2. 导出发现项,并按 ATC 优先级 → clean core 等级进行分组(P1=D、P2=C、P3=B)
  3. 消除所有 Level D 发现项(优先级 1):
    • 移除修改 → 使用 released 或 classic BAdI
    • 移除隐式/显式增强 → 使用 BAdI
    • 移除对 SAP 表的直接写入访问 → 使用 released 或 classic API
    • 替换
      noAPI
      对象用法 → 检查后继信息
    • 移除关键 ABAP 语句
    • 移除对 SAP form routines 的调用
  4. 尽量减少 Level C 发现项(优先级 2):
    • 将对 SAP 表的直接读取访问替换为 released 或 classic CDS views
    • 将 SAP internal API 替换为 released 或 classic API
    • 对不可避免的 internal 使用:进行包装并创建单个 ATC exemption
    • 通过
      SYCM
      导入 SAP 对象 changelog,并检查不兼容变更
  5. 检查 Level B 发现项(优先级 3):
    • 对 deprecated API 采用后继项
    • 保持稳定的 classic API 用法不变
  6. 对每个没有替代项的 non-released API:
    • 在 classic ABAP component 中创建 wrapper,并将其 release 以供 ABAP Cloud 使用
    • 为 wrapper 提供
      SU22
      数据和 variants
  7. 对每个不兼容的语言构造:重构为 cloud 兼容的替代方案
  8. 对 Dynpro/ALV/基于列表的 UI:规划 Fiori 替代方案(独立项目)
  9. 将已迁移对象移至 ABAP for Cloud Development software component
  10. 在切换对象的 language version 之前运行
    ABAP_CLOUD_READINESS
  11. 重新运行 ATC 检查——不应再存在优先级 1 或 2 的发现项
  12. 配置 ATC transport 设置,在出现优先级 1 或 2 的发现项时阻止 release
  13. 执行回归测试

Output Format

输出格式

When helping with migration topics, structure responses as:
markdown
undefined
在帮助处理迁移主题时,按以下结构组织回答:
markdown
undefined

Migration 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]
undefined

References

参考资料

Detailed Reference

详细参考

  • Remediation checklist: Read
    references/migration-checklist.md
    for the full level-based remediation checklist, effort estimation, and rollback planning
  • 修复清单:阅读
    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 现代化