$npx -y skills add likweitan/abap-skills --skill abap-cloud-migrationHelp 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
| 1 | # ABAP Cloud Migration Patterns |
| 2 | |
| 3 | Guide for systematically migrating classic ABAP custom code to ABAP Cloud (Tier 1) compliance. |
| 4 | |
| 5 | ## Workflow |
| 6 | |
| 7 | 1. **Assess current state**: Run ATC Cloud Readiness checks on existing code |
| 8 | 2. **Categorize findings**: Group by finding type (unreleased API, language construct, etc.) |
| 9 | 3. **Plan migration**: Prioritize by impact and determine replacement strategy |
| 10 | 4. **Implement replacements**: Apply released API replacements or create wrappers |
| 11 | 5. **Validate**: Re-run ATC checks and test functionality |
| 12 | |
| 13 | ## Migration Assessment |
| 14 | |
| 15 | ### Running ATC Cloud Readiness Checks |
| 16 | |
| 17 | 1. In ADT: Right-click package → **Run As** → **ABAP Test Cockpit** |
| 18 | 2. Use check variant `ABAP_CLOUD_READINESS` or a custom variant with cloud-relevant checks |
| 19 | 3. Review findings in the ATC Results view |
| 20 | |
| 21 | ### Key ATC Check Messages |
| 22 | |
| 23 | | Message ID | Description | Action | |
| 24 | | ---------- | ------------------------------------- | --------------------------------- | |
| 25 | | `NROB` | Use of unreleased number range API | Use `CL_NUMBERRANGE_RUNTIME` | |
| 26 | | `BAPI` | Direct BAPI call | Use released RAP API or wrapper | |
| 27 | | `DYNP` | Dynpro/screen usage | Replace with Fiori/UI5 | |
| 28 | | `FUGR` | Unreleased function module call | Find released replacement or wrap | |
| 29 | | `CLAS` | Unreleased class usage | Find released replacement or wrap | |
| 30 | | `TABL` | Direct DB table access (not released) | Use released CDS view entity | |
| 31 | | `LANG` | Incompatible language construct | Refactor to use modern ABAP | |
| 32 | |
| 33 | ## Common API Replacements |
| 34 | |
| 35 | ### Database Access |
| 36 | |
| 37 | | Classic Pattern | ABAP Cloud Replacement | |
| 38 | | ------------------------- | ----------------------------- | |
| 39 | | `SELECT FROM mara` | `SELECT FROM i_product` | |
| 40 | | `SELECT FROM bkpf / bseg` | `SELECT FROM i_journalentry` | |
| 41 | | `SELECT FROM vbak / vbap` | `SELECT FROM i_salesorder` | |
| 42 | | `SELECT FROM ekko / ekpo` | `SELECT FROM i_purchaseorder` | |
| 43 | | `SELECT FROM kna1` | `SELECT FROM i_customer` | |
| 44 | | `SELECT FROM lfa1` | `SELECT FROM i_supplier` | |
| 45 | | `SELECT FROM t001` | `SELECT FROM i_companycode` | |
| 46 | | Direct table access | Use `I_*` released CDS views | |
| 47 | |
| 48 | ### Function Modules → Released Classes |
| 49 | |
| 50 | | Classic FM | Released Replacement | |
| 51 | | --------------------------------------- | ---------------------------------------------------- | |
| 52 | | `GUID_CREATE` | `cl_system_uuid=>create_uuid_x16_static( )` | |
| 53 | | `CONVERSION_EXIT_ALPHA_INPUT` | `cl_abap_format=>alpha_input( )` | |
| 54 | | `CONVERSION_EXIT_ALPHA_OUTPUT` | `cl_abap_format=>alpha_output( )` | |
| 55 | | `POPUP_TO_CONFIRM` | Not available — use Fiori UI | |
| 56 | | `NUMBER_GET_NEXT` | `cl_numberrange_runtime=>number_get( )` | |
| 57 | | `BAPI_TRANSACTION_COMMIT` | Handled by RAP framework (no explicit commit) | |
| 58 | | `SO_NEW_DOCUMENT_ATT_SEND_API1` | `cl_bcs_mail_message` (send emails) | |
| 59 | | `READ_TEXT` / `SAVE_TEXT` | Not released — wrap or use custom persistence | |
| 60 | | `JOB_OPEN` / `JOB_CLOSE` / `JOB_SUBMIT` | `cl_apj_rt_api` (Application Jobs) | |
| 61 | | `ENQUEUE_*` / `DEQUEUE_*` | RAP draft / managed locking or `CL_ABAP_LOCK_OBJECT` | |
| 62 | |
| 63 | ### Language Constructs |
| 64 | |
| 65 | | Incompatible Construct | Cloud-Compatible Alternative | |
| 66 | | ---------------------------------------- | ---------------------------------------------- | |
| 67 | | `CALL TRANSACTION` | Not available — use API or RAP | |
| 68 | | `SUBMIT ... AND RETURN` | Not available — use Application Jobs | |
| 69 | | `WRITE` / `SKIP` / `ULINE` (list output) | Not available — use Fiori UI for output | |
| 70 | | `CALL SCREEN` / `CALL SELECTION-SCREEN` | Not available — use Fiori/UI5 | |
| 71 | | `MESSAGE ... RAIS |