{"id":"801d1732-17ae-4fda-ad59-6b14f9744a56","shortId":"mxZzmG","kind":"skill","title":"abap-cloud-migration","tagline":"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","description":"# ABAP Cloud Migration Patterns\n\nGuide for systematically migrating classic ABAP custom code to ABAP Cloud (Tier 1) compliance.\n\n## Workflow\n\n1. **Assess current state**: Run ATC Cloud Readiness checks on existing code\n2. **Categorize findings**: Group by finding type (unreleased API, language construct, etc.)\n3. **Plan migration**: Prioritize by impact and determine replacement strategy\n4. **Implement replacements**: Apply released API replacements or create wrappers\n5. **Validate**: Re-run ATC checks and test functionality\n\n## Migration Assessment\n\n### Running ATC Cloud Readiness Checks\n\n1. In ADT: Right-click package → **Run As** → **ABAP Test Cockpit**\n2. Use check variant `ABAP_CLOUD_READINESS` or a custom variant with cloud-relevant checks\n3. Review findings in the ATC Results view\n\n### Key ATC Check Messages\n\n| Message ID | Description                           | Action                            |\n| ---------- | ------------------------------------- | --------------------------------- |\n| `NROB`     | Use of unreleased number range API    | Use `CL_NUMBERRANGE_RUNTIME`      |\n| `BAPI`     | Direct BAPI call                      | Use released RAP API or wrapper   |\n| `DYNP`     | Dynpro/screen usage                   | Replace with Fiori/UI5            |\n| `FUGR`     | Unreleased function module call       | Find released replacement or wrap |\n| `CLAS`     | Unreleased class usage                | Find released replacement or wrap |\n| `TABL`     | Direct DB table access (not released) | Use released CDS view entity      |\n| `LANG`     | Incompatible language construct       | Refactor to use modern ABAP       |\n\n## Common API Replacements\n\n### Database Access\n\n| Classic Pattern           | ABAP Cloud Replacement        |\n| ------------------------- | ----------------------------- |\n| `SELECT FROM mara`        | `SELECT FROM i_product`       |\n| `SELECT FROM bkpf / bseg` | `SELECT FROM i_journalentry`  |\n| `SELECT FROM vbak / vbap` | `SELECT FROM i_salesorder`    |\n| `SELECT FROM ekko / ekpo` | `SELECT FROM i_purchaseorder` |\n| `SELECT FROM kna1`        | `SELECT FROM i_customer`      |\n| `SELECT FROM lfa1`        | `SELECT FROM i_supplier`      |\n| `SELECT FROM t001`        | `SELECT FROM i_companycode`   |\n| Direct table access       | Use `I_*` released CDS views  |\n\n### Function Modules → Released Classes\n\n| Classic FM                              | Released Replacement                                 |\n| --------------------------------------- | ---------------------------------------------------- |\n| `GUID_CREATE`                           | `cl_system_uuid=>create_uuid_x16_static( )`          |\n| `CONVERSION_EXIT_ALPHA_INPUT`           | `cl_abap_format=>alpha_input( )`                     |\n| `CONVERSION_EXIT_ALPHA_OUTPUT`          | `cl_abap_format=>alpha_output( )`                    |\n| `POPUP_TO_CONFIRM`                      | Not available — use Fiori UI                         |\n| `NUMBER_GET_NEXT`                       | `cl_numberrange_runtime=>number_get( )`              |\n| `BAPI_TRANSACTION_COMMIT`               | Handled by RAP framework (no explicit commit)        |\n| `SO_NEW_DOCUMENT_ATT_SEND_API1`         | `cl_bcs_mail_message` (send emails)                  |\n| `READ_TEXT` / `SAVE_TEXT`               | Not released — wrap or use custom persistence        |\n| `JOB_OPEN` / `JOB_CLOSE` / `JOB_SUBMIT` | `cl_apj_rt_api` (Application Jobs)                   |\n| `ENQUEUE_*` / `DEQUEUE_*`               | RAP draft / managed locking or `CL_ABAP_LOCK_OBJECT` |\n\n### Language Constructs\n\n| Incompatible Construct                   | Cloud-Compatible Alternative                   |\n| ---------------------------------------- | ---------------------------------------------- |\n| `CALL TRANSACTION`                       | Not available — use API or RAP                 |\n| `SUBMIT ... AND RETURN`                  | Not available — use Application Jobs           |\n| `WRITE` / `SKIP` / `ULINE` (list output) | Not available — use Fiori UI for output        |\n| `CALL SCREEN` / `CALL SELECTION-SCREEN`  | Not available — use Fiori/UI5                  |\n| `MESSAGE ... RAISING`                    | `RAISE EXCEPTION TYPE ...`                     |\n| `CALL FUNCTION ... IN UPDATE TASK`       | RAP saver class / managed save                 |\n| `EXEC SQL` (Native SQL)                  | ABAP SQL or AMDP                               |\n| `GENERATE SUBROUTINE POOL`               | Not available — use strategy/factory pattern   |\n| `DESCRIBE FIELD ... TYPE`                | RTTI: `cl_abap_typedescr=>describe_by_data( )` |\n| `GET/SET PARAMETER ID`                   | Not available — use method parameters          |\n\n## Wrapper Pattern\n\nWhen no released API exists, create a wrapper class in Tier 2 (classic ABAP) and release it for Tier 1 consumption.\n\n### Step 1: Create Wrapper Interface (Tier 2, released for Cloud)\n\n```abap\n\"Released for use in ABAP Cloud (C1 contract)\nINTERFACE zif_text_handler\n  PUBLIC.\n  METHODS read_text\n    IMPORTING iv_id          TYPE thead-tdid\n              iv_name        TYPE thead-tdname\n              iv_object      TYPE thead-tdobject\n              iv_language    TYPE sy-langu DEFAULT sy-langu\n    RETURNING VALUE(rt_text) TYPE tline_tab\n    RAISING   zcx_text_error.\n\n  METHODS save_text\n    IMPORTING iv_id       TYPE thead-tdid\n              iv_name     TYPE thead-tdname\n              iv_object   TYPE thead-tdobject\n              iv_language TYPE sy-langu DEFAULT sy-langu\n              it_text     TYPE tline_tab\n    RAISING   zcx_text_error.\nENDINTERFACE.\n```\n\n### Step 2: Create Wrapper Class (Tier 2, released for Cloud)\n\n```abap\n\"Implementation uses unreleased FMs internally\n\"Released for use in ABAP Cloud (C1 contract)\nCLASS zcl_text_handler DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    INTERFACES zif_text_handler.\nENDCLASS.\n\nCLASS zcl_text_handler IMPLEMENTATION.\n  METHOD zif_text_handler~read_text.\n    \"Uses unreleased FM internally — OK in Tier 2\n    CALL FUNCTION 'READ_TEXT'\n      EXPORTING\n        id       = iv_id\n        name     = iv_name\n        object   = iv_object\n        language = iv_language\n      TABLES\n        lines    = rt_text\n      EXCEPTIONS\n        OTHERS   = 1.\n    IF sy-subrc <> 0.\n      RAISE EXCEPTION TYPE zcx_text_error.\n    ENDIF.\n  ENDMETHOD.\n\n  METHOD zif_text_handler~save_text.\n    DATA ls_header TYPE thead.\n    ls_header-tdid     = iv_id.\n    ls_header-tdname   = iv_name.\n    ls_header-tdobject = iv_object.\n    ls_header-tdspras  = iv_language.\n\n    CALL FUNCTION 'SAVE_TEXT'\n      EXPORTING header = ls_header\n      TABLES    lines  = it_text\n      EXCEPTIONS OTHERS = 1.\n    IF sy-subrc <> 0.\n      RAISE EXCEPTION TYPE zcx_text_error.\n    ENDIF.\n  ENDMETHOD.\nENDCLASS.\n```\n\n### Step 3: Release the Wrapper\n\nIn ADT, open the wrapper class properties:\n\n1. Go to **API State** tab\n2. Add **Use System-Internally (C1)** contract\n3. Set visibility to **Use in ABAP Cloud**\n\n### Step 4: Use in Tier 1 Code\n\n```abap\n\"Tier 1 (ABAP Cloud) code — uses released wrapper\nDATA(lo_text) = NEW zcl_text_handler( ).\nDATA(lt_text) = lo_text->zif_text_handler~read_text(\n  iv_id     = 'ST'\n  iv_name   = lv_doc_name\n  iv_object = 'VBBK' ).\n```\n\n## Migration Strategy by Object Type\n\n### Reports / Programs\n\n```\nClassic Report → Application Job class + CDS view + Fiori app\n1. Extract data logic → CDS view entities\n2. Extract business logic → ABAP Cloud class\n3. Create Application Job catalog entry (CL_APJ_DT_CREATE_CONTENT)\n4. Schedule via Fiori app \"Application Jobs\"\n```\n\n### Dynpro Transactions\n\n```\nDynpro Transaction → RAP BO + Fiori Elements app\n1. Identify CRUD operations → RAP behavior definition\n2. Map screen fields → CDS view entity\n3. Create service definition/binding\n4. Generate Fiori Elements app\n```\n\n### BAPIs\n\n```\nBAPI → RAP BO with custom actions\n1. Map BAPI parameters → CDS abstract entities\n2. Implement as RAP actions or factory actions\n3. Expose via OData service binding\n```\n\n### RFC Function Modules\n\n```\nRFC FM → Released API class or RAP service\n1. If simple logic → Released ABAP class\n2. If CRUD → RAP BO with service binding\n3. If complex → Wrapper class (Tier 2)\n```\n\n## Finding Released Replacements\n\n### In ADT\n\n1. **Released Object Search**: `Ctrl+Shift+A` → Filter by \"Released\" APIs\n2. **API State Filter**: In Project Explorer, filter by C1 release state\n3. **ABAP Element Info**: Hover over unreleased object → see suggestion if available\n\n### Using the Released Objects App\n\nFiori app **Released Objects** (`F5865`):\n\n- Search by classic object name\n- Filter by release state (C1, C2)\n- View successor information\n\n### Programmatic Check\n\n```abap\n\"Check if an object is released for ABAP Cloud\nSELECT SINGLE *\n  FROM i_apistateofrepositoryobject\n  WHERE ObjectType     = 'CLAS'\n    AND ObjectName     = 'CL_NUMBERRANGE_RUNTIME'\n    AND ReleaseState   = 'RELEASED'\n  INTO @DATA(ls_state).\n```\n\n## Step-by-Step Migration Checklist\n\n1. [ ] Run ATC Cloud Readiness check on the package/objects\n2. [ ] Export findings and categorize by type\n3. [ ] For each unreleased API usage:\n   - [ ] Search for released replacement (CDS view `I_ApiStateOfRepositoryObject`)\n   - [ ] If found: replace directly\n   - [ ] If not found: create Tier 2 wrapper\n4. [ ] For each incompatible language construct:\n   - [ ] Refactor to cloud-compatible alternative\n5. [ ] For Dynpro/ALV/list-based UIs:\n   - [ ] Plan Fiori replacement (separate project)\n6. [ ] Move migrated objects to ABAP Cloud language version package\n7. [ ] Re-run ATC checks — all findings must be resolved\n8. [ ] Execute regression tests\n\n## Output Format\n\nWhen helping with migration topics, structure responses as:\n\n```markdown\n## Migration Guidance\n\n### Current Code Analysis\n\n- Unreleased APIs found: [list]\n- Incompatible constructs: [list]\n- Estimated effort: [low / medium / high]\n\n### Replacement Strategy\n\n[For each finding: original → replacement with code]\n\n### Wrapper Requirements\n\n[Objects needing Tier 2 wrappers]\n```\n\n## References\n\n- Custom Code Migration Guide: https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/custom-code-migration\n- ABAP Cloud API Release Info: https://help.sap.com/docs/abap-cloud/abap-rap/released-abap-objects\n- Wrapper Pattern: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/19_ABAP_Cloud.md\n- ATC Cloud Readiness: https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/checking-abap-cloud-readiness","tags":["abap","cloud","migration","skills","likweitan","agent-skills","sap"],"capabilities":["skill","source-likweitan","skill-abap-cloud-migration","topic-abap","topic-agent-skills","topic-sap"],"categories":["abap-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/likweitan/abap-skills/abap-cloud-migration","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add likweitan/abap-skills","source_repo":"https://github.com/likweitan/abap-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (10,462 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T01:03:15.590Z","embedding":null,"createdAt":"2026-04-23T13:03:44.190Z","updatedAt":"2026-04-24T01:03:15.590Z","lastSeenAt":"2026-04-24T01:03:15.590Z","tsv":"'/docs/abap-cloud/abap-development-tools-user-guide/checking-abap-cloud-readiness':1273 '/docs/abap-cloud/abap-development-tools-user-guide/custom-code-migration':1254 '/docs/abap-cloud/abap-rap/released-abap-objects':1262 '/sap-samples/abap-cheat-sheets/blob/main/19_abap_cloud.md':1267 '0':724,786 '1':59,62,123,527,530,719,781,808,835,839,889,930,960,992,1019,1116 '2':74,135,519,535,639,644,695,814,896,937,967,999,1013,1030,1125,1155,1245 '3':86,151,797,822,903,944,975,1007,1042,1132 '4':96,831,914,948,1157 '5':106,1169 '6':1178 '7':1188 '8':1199 'abap':2,9,13,43,52,56,132,139,233,241,326,335,408,476,493,521,539,544,648,658,828,837,840,900,997,1043,1080,1088,1183,1255 'abap-cloud-migr':1 'abstract':965 'access':217,238,298 'action':166,959,971,974 'adapt':18 'add':815 'adt':125,802,1018 'alpha':323,328,332,337 'altern':418,1168 'amdp':479 'analysi':1218 'api':21,82,101,173,185,235,397,424,511,811,987,1029,1031,1136,1220,1257 'api1':370 'apistateofrepositoryobject':1094,1145 'apj':395,910 'app':888,918,929,952,1058,1060 'appli':99 'applic':398,433,882,905,919 'assess':63,117 'atc':29,67,111,119,156,160,1118,1192,1268 'att':368 'avail':343,422,431,441,454,484,502,1053 'bapi':178,180,355,953,954,962 'bcs':372 'behavior':935 'bind':980,1006 'bkpf':253 'bo':926,956,1003 'bseg':254 'busi':898 'c1':546,660,820,1039,1073 'c2':1074 'call':181,198,419,447,449,462,696,767 'catalog':907 'categor':75,1129 'cds':222,302,885,893,941,964,1142 'check':32,70,112,122,137,150,161,1079,1081,1121,1193 'checklist':1115 'cl':175,314,325,334,350,371,394,407,492,909,1100 'clas':204,1097 'class':25,206,307,469,516,642,662,678,806,884,902,988,998,1011 'classic':8,51,239,308,520,880,1066 'click':128 'close':391 'cloud':3,14,30,44,57,68,120,140,148,242,416,538,545,647,659,829,841,901,1089,1119,1166,1184,1256,1269 'cloud-compat':415,1165 'cloud-relev':147 'cockpit':134 'code':11,17,54,73,836,842,1217,1239,1249 'commit':357,364 'common':234 'companycod':295 'compat':417,1167 'complex':1009 'complianc':60 'confirm':341 'construct':36,84,228,412,414,1162,1224 'consumpt':528 'content':913 'contract':547,661,821 'convers':321,330 'creat':104,313,317,513,531,640,669,904,912,945,1153 'crud':932,1001 'ctrl':1023 'current':64,1216 'custom':10,16,53,144,281,386,958,1248 'data':497,738,846,853,891,1107 'databas':237 'db':215 'default':581,624 'definit':666,936 'definition/binding':947 'dequeu':401 'describ':488,495 'descript':165 'determin':93 'direct':179,214,296,1149 'doc':868 'document':367 'draft':403 'dt':911 'dynp':188 'dynpro':921,923 'dynpro/alv/list-based':1171 'dynpro/screen':189 'effort':1227 'ekko':269 'ekpo':270 'element':928,951,1044 'email':376 'endclass':677,795 'endif':731,793 'endinterfac':637 'endmethod':732,794 'enqueu':400 'entiti':224,895,943,966 'entri':908 'error':595,636,730,792 'estim':1226 'etc':85 'except':460,717,726,779,788 'exec':472 'execut':1200 'exist':72,512 'exit':322,331 'explicit':363 'explor':1036 'export':700,771,1126 'expos':976 'extract':890,897 'f5865':1063 'factori':973 'field':489,940 'filter':1026,1033,1037,1069 'final':668 'find':76,79,153,199,208,1014,1127,1195,1235 'fiori':345,443,887,917,927,950,1059,1174 'fiori/ui5':193,456 'fm':309,690,985 'fms':652 'format':327,336,1204 'found':1147,1152,1221 'framework':361 'fugr':194 'function':115,196,304,463,697,768,982 'generat':23,480,949 'get':348,354 'get/set':498 'github.com':1266 'github.com/sap-samples/abap-cheat-sheets/blob/main/19_abap_cloud.md':1265 'go':809 'group':77 'guid':47,312,1251 'guidanc':1215 'handl':33,358 'handler':551,665,676,681,686,736,852,860 'header':740,745,751,757,763,772,774 'header-tdid':744 'header-tdnam':750 'header-tdobject':756 'header-tdspra':762 'help':5,1206 'help.sap.com':1253,1261,1272 'help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/checking-abap-cloud-readiness':1271 'help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/custom-code-migration':1252 'help.sap.com/docs/abap-cloud/abap-rap/released-abap-objects':1260 'high':1230 'hover':1046 'id':164,500,558,601,701,703,748,863 'identifi':19,931 'impact':91 'implement':97,649,682,968 'import':556,599 'includ':15 'incompat':34,226,413,1160,1223 'info':1045,1259 'inform':1077 'input':324,329 'interfac':533,548,673 'intern':653,691,819 'iv':557,563,569,575,600,606,612,618,702,705,708,711,747,753,759,765,862,865,870 'job':388,390,392,399,434,883,906,920 'journalentri':258 'key':159 'kna1':277 'lang':225 'langu':580,584,623,627 'languag':35,83,227,411,576,619,710,712,766,1161,1185 'lfa1':284 'line':714,776 'list':438,1222,1225 'lo':847,856 'lock':405,409 'logic':892,899,995 'low':1228 'ls':739,743,749,755,761,773,1108 'lt':854 'lv':867 'mail':373 'manag':404,470 'map':938,961 'mara':246 'markdown':1213 'medium':1229 'messag':162,163,374,457 'method':504,553,596,683,733 'migrat':4,7,45,50,88,116,873,1114,1180,1208,1214,1250 'migrati':42 'modern':232 'modul':197,305,983 'move':1179 'must':1196 'name':564,607,704,706,754,866,869,1068 'nativ':474 'need':1243 'new':366,849 'next':349 'nrob':167 'number':171,347,353 'numberrang':176,351,1101 'object':28,410,570,613,707,709,760,871,876,1021,1049,1057,1062,1067,1084,1181,1242 'objectnam':1099 'objecttyp':1096 'odata':978 'ok':692 'open':389,803 'oper':933 'origin':1236 'other':718,780 'output':333,338,439,446,1203 'packag':129,1187 'package/objects':1124 'paramet':499,505,963 'pattern':46,240,487,507,1264 'persist':387 'plan':87,1173 'pool':482 'popup':339 'priorit':89 'product':250 'program':879 'programmat':1078 'project':1035,1177 'properti':807 'public':552,667,670,671 'purchaseord':274 'rais':458,459,592,633,725,787 'rang':172 'rap':184,360,402,426,467,925,934,955,970,990,1002 're':109,1190 're-run':108,1189 'read':377,554,698 'readi':31,69,121,141,1120,1270 'refactor':229,1163 'refer':1247 'regress':1201 'releas':100,183,200,209,219,221,301,306,310,382,510,523,536,540,645,654,798,844,986,996,1015,1020,1028,1040,1056,1061,1071,1086,1105,1140,1258 'releasest':1104 'relev':149 'replac':22,94,98,102,191,201,210,236,243,311,1016,1141,1148,1175,1231,1237 'report':878,881 'requir':1241 'resolv':1198 'respons':1211 'result':157 'return':429,585 'review':152 'rfc':981,984 'right':127 'right-click':126 'rt':396,587,715 'rtti':491 'run':66,110,118,130,1117,1191 'runtim':177,352,1102 'salesord':266 'save':379,471,597,769 'saver':468 'schedul':915 'screen':448,452,939 'search':1022,1064,1138 'section':672 'see':1050 'select':244,247,251,255,259,263,267,271,275,278,282,285,289,292,451,1090 'selection-screen':450 'send':369,375 'separ':1176 'servic':946,979,991,1005 'set':823 'shift':1024 'simpl':994 'singl':1091 'skill' 'skill-abap-cloud-migration' 'skip':436 'source-likweitan' 'sql':473,475,477 'st':864 'state':65,812,1032,1041,1072,1109 'static':320 'step':39,41,529,638,796,830,1111,1113 'step-by-step':38,1110 'strategi':95,874,1232 'strategy/factory':486 'structur':1210 'submit':393,427 'subrc':723,785 'subroutin':481 'successor':1076 'suggest':1051 'supplier':288 'sy':579,583,622,626,722,784 'sy-langu':578,582,621,625 'sy-subrc':721,783 'system':315,818 'system-intern':817 'systemat':49 't001':291 'tab':591,632,813 'tabl':213,216,297,713,775 'task':466 'tdid':562,605,746 'tdname':568,611,752 'tdobject':574,617,758 'tdspras':764 'test':114,133,1202 'text':378,380,550,555,588,594,598,629,635,664,675,680,685,699,716,729,735,770,778,791,848,851,855,857,859 'thead':561,567,573,604,610,616,742 'thead-tdid':560,603 'thead-tdnam':566,609 'thead-tdobject':572,615 'tier':58,518,526,534,643,694,834,838,1012,1154,1244 'tline':590,631 'topic':1209 'topic-abap' 'topic-agent-skills' 'topic-sap' 'transact':356,420,922,924 'type':80,461,490,559,565,571,577,589,602,608,614,620,630,727,741,789,877,1131 'typedescr':494 'ui':346,444,1172 'ulin':437 'unreleas':20,27,81,170,195,205,651,689,1048,1135,1219 'updat':465 'usag':190,207,1137 'use':136,168,174,182,220,231,299,344,385,423,432,442,455,485,503,542,650,656,688,816,826,832,843,1054 'uuid':316,318 'valid':107 'valu':586 'variant':138,145 'vbak':261 'vbap':262 'vbbk':872 'version':1186 'via':916,977 'view':158,223,303,886,894,942,1075,1143 'visibl':824 'workflow':61 'wrap':203,212,383 'wrapper':24,105,187,506,515,532,641,800,805,845,1010,1156,1240,1246,1263 'write':435 'x16':319 'zcl':663,679,850 'zcx':593,634,728,790 'zif':549,674,684,734,858 '~read_text':687,861 '~save_text':737","prices":[{"id":"26b1aef4-7493-4a0d-b411-331d5ffd6578","listingId":"801d1732-17ae-4fda-ad59-6b14f9744a56","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"likweitan","category":"abap-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:44.190Z"}],"sources":[{"listingId":"801d1732-17ae-4fda-ad59-6b14f9744a56","source":"github","sourceId":"likweitan/abap-skills/abap-cloud-migration","sourceUrl":"https://github.com/likweitan/abap-skills/tree/main/skills/abap-cloud-migration","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:44.190Z","lastSeenAt":"2026-04-24T01:03:15.590Z"}],"details":{"listingId":"801d1732-17ae-4fda-ad59-6b14f9744a56","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"likweitan","slug":"abap-cloud-migration","github":{"repo":"likweitan/abap-skills","stars":12,"topics":["abap","agent-skills","sap"],"license":"mit","html_url":"https://github.com/likweitan/abap-skills","pushed_at":"2026-04-17T13:44:41Z","description":"Advance Agent Skills for ABAP Developers","skill_md_sha":"2e17648af354a749ba079df9adda620bb000578c","skill_md_path":"skills/abap-cloud-migration/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/likweitan/abap-skills/tree/main/skills/abap-cloud-migration"},"layout":"multi","source":"github","category":"abap-skills","frontmatter":{"name":"abap-cloud-migration","description":"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 migration workflows. Use when users ask about migrating to ABAP Cloud, custom code migration, cloud readiness, unreleased API replacement, wrapper pattern, ATC cloud checks, code adaptation, classic to cloud migration, S/4HANA cloud migration, or clean core compliance. Triggers include \"migrate to ABAP Cloud\", \"cloud readiness check\", \"unreleased API\", \"replace with released API\", \"custom code adaptation\", \"wrapper for unreleased\", \"ATC cloud\", \"clean core migration\", \"move to tier 1\", or \"ABAP Cloud compatibility\"."},"skills_sh_url":"https://skills.sh/likweitan/abap-skills/abap-cloud-migration"},"updatedAt":"2026-04-24T01:03:15.590Z"}}