abap-cloud-migration — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited abap-cloud-migration (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Guide for systematically migrating classic ABAP custom code to ABAP Cloud (Tier 1) compliance.
ABAP_CLOUD_READINESS or a custom variant with cloud-relevant checks| Message ID | Description | Action |
|---|---|---|
NROB | Use of unreleased number range API | Use CL_NUMBERRANGE_RUNTIME |
BAPI | Direct BAPI call | Use released RAP API or wrapper |
DYNP | Dynpro/screen usage | Replace with Fiori/UI5 |
FUGR | Unreleased function module call | Find released replacement or wrap |
CLAS | Unreleased class usage | Find released replacement or wrap |
TABL | Direct DB table access (not released) | Use released CDS view entity |
LANG | Incompatible language construct | Refactor to use modern ABAP |
| Classic Pattern | ABAP 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 access | Use I_* released CDS views |
| Classic FM | Released 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 |
| Incompatible Construct | Cloud-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 |
When no released API exists, create a wrapper class in Tier 2 (classic ABAP) and release it for Tier 1 consumption.
"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."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.In ADT, open the wrapper class properties:
"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' ).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 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 appBAPI → 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 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)Ctrl+Shift+A → Filter by "Released" APIsFiori app Released Objects (F5865):
"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).I_ApiStateOfRepositoryObject)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]~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.