Skillquality 0.46

abap-cloud-migration

Help with migrating classic ABAP custom code to ABAP Cloud including custom code adaptation, identifying unreleased API replacements, generating wrapper classes for unreleased objects, ATC Cloud Readiness checks, handling incompatible language constructs, and step-by-step migrati

Price
free
Protocol
skill
Verified
no

What it does

ABAP Cloud Migration Patterns

Guide for systematically migrating classic ABAP custom code to ABAP Cloud (Tier 1) compliance.

Workflow

  1. Assess current state: Run ATC Cloud Readiness checks on existing code
  2. Categorize findings: Group by finding type (unreleased API, language construct, etc.)
  3. Plan migration: Prioritize by impact and determine replacement strategy
  4. Implement replacements: Apply released API replacements or create wrappers
  5. Validate: Re-run ATC checks and test functionality

Migration Assessment

Running ATC Cloud Readiness Checks

  1. In ADT: Right-click package → Run AsABAP Test Cockpit
  2. Use check variant ABAP_CLOUD_READINESS or a custom variant with cloud-relevant checks
  3. Review findings in the ATC Results view

Key ATC Check Messages

Message IDDescriptionAction
NROBUse of unreleased number range APIUse CL_NUMBERRANGE_RUNTIME
BAPIDirect BAPI callUse released RAP API or wrapper
DYNPDynpro/screen usageReplace with Fiori/UI5
FUGRUnreleased function module callFind released replacement or wrap
CLASUnreleased class usageFind released replacement or wrap
TABLDirect DB table access (not released)Use released CDS view entity
LANGIncompatible language constructRefactor to use modern ABAP

Common API Replacements

Database Access

Classic PatternABAP Cloud Replacement
SELECT FROM maraSELECT FROM i_product
SELECT FROM bkpf / bsegSELECT FROM i_journalentry
SELECT FROM vbak / vbapSELECT FROM i_salesorder
SELECT FROM ekko / ekpoSELECT FROM i_purchaseorder
SELECT FROM kna1SELECT FROM i_customer
SELECT FROM lfa1SELECT FROM i_supplier
SELECT FROM t001SELECT FROM i_companycode
Direct table accessUse I_* released CDS views

Function Modules → Released Classes

Classic FMReleased Replacement
GUID_CREATEcl_system_uuid=>create_uuid_x16_static( )
CONVERSION_EXIT_ALPHA_INPUTcl_abap_format=>alpha_input( )
CONVERSION_EXIT_ALPHA_OUTPUTcl_abap_format=>alpha_output( )
POPUP_TO_CONFIRMNot available — use Fiori UI
NUMBER_GET_NEXTcl_numberrange_runtime=>number_get( )
BAPI_TRANSACTION_COMMITHandled by RAP framework (no explicit commit)
SO_NEW_DOCUMENT_ATT_SEND_API1cl_bcs_mail_message (send emails)
READ_TEXT / SAVE_TEXTNot released — wrap or use custom persistence
JOB_OPEN / JOB_CLOSE / JOB_SUBMITcl_apj_rt_api (Application Jobs)
ENQUEUE_* / DEQUEUE_*RAP draft / managed locking or CL_ABAP_LOCK_OBJECT

Language Constructs

Incompatible ConstructCloud-Compatible Alternative
CALL TRANSACTIONNot available — use API or RAP
SUBMIT ... AND RETURNNot available — use Application Jobs
WRITE / SKIP / ULINE (list output)Not available — use Fiori UI for output
CALL SCREEN / CALL SELECTION-SCREENNot available — use Fiori/UI5
MESSAGE ... RAISINGRAISE EXCEPTION TYPE ...
CALL FUNCTION ... IN UPDATE TASKRAP saver class / managed save
EXEC SQL (Native SQL)ABAP SQL or AMDP
GENERATE SUBROUTINE POOLNot available — use strategy/factory pattern
DESCRIBE FIELD ... TYPERTTI: cl_abap_typedescr=>describe_by_data( )
GET/SET PARAMETER IDNot available — use method parameters

Wrapper Pattern

When no released API exists, create a wrapper class in Tier 2 (classic ABAP) and release it for Tier 1 consumption.

Step 1: Create Wrapper Interface (Tier 2, released for Cloud)

"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 (Tier 2, released for Cloud)

"Implementation uses unreleased 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 unreleased FM internally — OK in Tier 2
    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

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

Step 4: Use in Tier 1 Code

"Tier 1 (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' ).

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"

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

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

RFC Function Modules

RFC FM → Released API class or RAP service
1. If simple logic → Released ABAP class
2. If CRUD → RAP BO with service binding
3. If complex → Wrapper class (Tier 2)

Finding Released Replacements

In 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 unreleased object → see suggestion if available

Using the Released Objects App

Fiori app Released Objects (F5865):

  • Search by classic object name
  • Filter by release state (C1, C2)
  • View successor information

Programmatic Check

"Check if an object is released for ABAP Cloud
SELECT SINGLE *
  FROM i_apistateofrepositoryobject
  WHERE ObjectType     = 'CLAS'
    AND ObjectName     = 'CL_NUMBERRANGE_RUNTIME'
    AND ReleaseState   = 'RELEASED'
  INTO @DATA(ls_state).

Step-by-Step Migration Checklist

  1. Run ATC Cloud Readiness check on the package/objects
  2. Export findings and categorize by type
  3. For each unreleased API usage:
    • Search for released replacement (CDS view I_ApiStateOfRepositoryObject)
    • If found: replace directly
    • If not found: create Tier 2 wrapper
  4. For each incompatible language construct:
    • Refactor to cloud-compatible alternative
  5. For Dynpro/ALV/list-based UIs:
    • Plan Fiori replacement (separate project)
  6. Move migrated objects to ABAP Cloud language version package
  7. Re-run ATC checks — all findings must be resolved
  8. Execute regression tests

Output Format

When helping with migration topics, structure responses as:

## Migration Guidance

### Current Code Analysis

- Unreleased APIs found: [list]
- Incompatible constructs: [list]
- Estimated effort: [low / medium / high]

### Replacement Strategy

[For each finding: original → replacement with code]

### Wrapper Requirements

[Objects needing Tier 2 wrappers]

References

Capabilities

skillsource-likweitanskill-abap-cloud-migrationtopic-abaptopic-agent-skillstopic-sap

Install

Quality

0.46/ 1.00

deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (10,462 chars)

Provenance

Indexed fromgithub
Enriched2026-04-24 01:03:15Z · deterministic:skill-github:v1 · v1
First seen2026-04-23
Last seen2026-04-24

Agent access