sap-abap

SAP ABAP Development Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "sap-abap" with this command: npx skills add secondsky/sap-skills/secondsky-sap-skills-sap-abap

SAP ABAP Development Skill

Related Skills

  • sap-abap-cds: Use when developing CDS views for ABAP-backed Fiori applications or defining data models with annotations

  • sap-btp-cloud-platform: Use when working with ABAP Environment on BTP or deploying ABAP applications to the cloud

  • sap-cap-capire: Use when connecting ABAP systems with CAP applications or integrating with OData services

  • sap-fiori-tools: Use when building Fiori applications with ABAP backends or consuming OData services from ABAP systems

  • sap-api-style: Use when documenting ABAP APIs or following SAP API documentation standards

Table of Contents

  • Quick Reference

  • Bundled Resources

  • Common Patterns

  • Error Catalog

  • Performance Tips

  • Source Documentation

Quick Reference

Data Types and Declarations

" Elementary types DATA num TYPE i VALUE 123. DATA txt TYPE string VALUE Hello. DATA flag TYPE abap_bool VALUE abap_true.

" Inline declarations DATA(result) = some_method( ). FINAL(immutable) = constant value.

" Structures DATA: BEGIN OF struc, id TYPE i, name TYPE string, END OF struc.

" Internal tables DATA itab TYPE TABLE OF string WITH EMPTY KEY. DATA sorted_tab TYPE SORTED TABLE OF struct WITH UNIQUE KEY id. DATA hashed_tab TYPE HASHED TABLE OF struct WITH UNIQUE KEY id.

Internal Tables - Essential Operations

" Create with VALUE itab = VALUE #( ( col1 = 1 col2 = a ) ( col1 = 2 col2 = b ) ).

" Read operations DATA(line) = itab[ 1 ]. " By index DATA(line2) = itab[ col1 = 1 ]. " By key READ TABLE itab INTO wa INDEX 1. READ TABLE itab ASSIGNING FIELD-SYMBOL(<fs>) WITH KEY col1 = 1.

" Modify operations MODIFY TABLE itab FROM VALUE #( col1 = 1 col2 = updated ). itab[ 1 ]-col2 = changed.

" Loop processing LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>). <line>-col2 = to_upper( <line>-col2 ). ENDLOOP.

" Delete DELETE itab WHERE col1 > 5. DELETE TABLE itab FROM VALUE #( col1 = 1 ).

ABAP SQL Essentials

" SELECT into table SELECT * FROM dbtab INTO TABLE @DATA(result_tab).

" SELECT with conditions SELECT carrid, connid, fldate FROM zdemo_abap_fli WHERE carrid = 'LH' INTO TABLE @DATA(flights).

" Aggregate functions SELECT carrid, COUNT(*) AS cnt, AVG( price ) AS avg_price FROM zdemo_abap_fli GROUP BY carrid INTO TABLE @DATA(stats).

" JOIN operations SELECT acarrid, aconnid, bcarrname FROM zdemo_abap_fli AS a INNER JOIN zdemo_abap_carr AS b ON acarrid = b~carrid INTO TABLE @DATA(joined).

" Modification statements INSERT dbtab FROM @struc. UPDATE dbtab FROM @struc. MODIFY dbtab FROM TABLE @itab. DELETE FROM dbtab WHERE condition.

Constructor Expressions

" VALUE - structures and tables DATA(struc) = VALUE struct_type( comp1 = 1 comp2 = text ). DATA(itab) = VALUE itab_type( ( a = 1 ) ( a = 2 ) ( a = 3 ) ).

" NEW - create instances DATA(dref) = NEW i( 123 ). DATA(oref) = NEW zcl_my_class( param = value ).

" CORRESPONDING - structure/table mapping target = CORRESPONDING #( source ). target = CORRESPONDING #( source MAPPING target_field = source_field ).

" COND/SWITCH - conditional values DATA(text) = COND string( WHEN flag = abap_true THEN Yes ELSE No ). DATA(result) = SWITCH #( code WHEN 1 THEN A WHEN 2 THEN B ELSE X ).

" CONV - type conversion DATA(dec) = CONV decfloat34( 1 / 3 ).

" FILTER - table filtering DATA(filtered) = FILTER #( itab WHERE status = 'A' ).

" REDUCE - aggregation DATA(sum) = REDUCE i( INIT s = 0 FOR wa IN itab NEXT s = s + wa-amount ).

Object-Oriented ABAP

" Class definition CLASS zcl_example DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. METHODS constructor IMPORTING iv_name TYPE string. METHODS get_name RETURNING VALUE(rv_name) TYPE string. CLASS-METHODS factory RETURNING VALUE(ro_instance) TYPE REF TO zcl_example. PRIVATE SECTION. DATA mv_name TYPE string. ENDCLASS.

CLASS zcl_example IMPLEMENTATION. METHOD constructor. mv_name = iv_name. ENDMETHOD. METHOD get_name. rv_name = mv_name. ENDMETHOD. METHOD factory. ro_instance = NEW #( Default ). ENDMETHOD. ENDCLASS.

" Interface implementation CLASS zcl_impl DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES zif_my_interface. ENDCLASS.

Exception Handling

TRY. DATA(result) = risky_operation( ). CATCH cx_sy_zerodivide INTO DATA(exc). DATA(msg) = exc->get_text( ). CATCH cx_root INTO DATA(any_exc). " Handle any exception CLEANUP. " Cleanup code ENDTRY.

" Raising exceptions RAISE EXCEPTION TYPE zcx_my_exception EXPORTING textid = zcx_my_exception=>error_occurred.

" With COND/SWITCH DATA(val) = COND #( WHEN valid THEN result ELSE THROW zcx_my_exception( ) ).

String Processing

" Concatenation DATA(full) = first && && last. txt &&= appended.

" String templates DATA(msg) = |Name: { name }, Date: { date DATE = ISO }|.

" Functions DATA(upper) = to_upper( text ). DATA(len) = strlen( text ). DATA(found) = find( val = text sub = search ). DATA(replaced) = replace( val = text sub = old with = new occ = 0 ). DATA(parts) = segment( val = text index = 2 sep = , ).

" FIND/REPLACE statements FIND ALL OCCURRENCES OF pattern IN text RESULTS DATA(matches). REPLACE ALL OCCURRENCES OF old IN text WITH new.

Dynamic Programming

" Field symbols FIELD-SYMBOLS <fs> TYPE any. ASSIGN struct-component TO <fs>. ASSIGN struct-(comp_name) TO <fs>. " Dynamic component

" Data references DATA dref TYPE REF TO data. dref = REF #( variable ). CREATE DATA dref TYPE (type_name). dref->* = value.

" RTTI - Get type information DATA(tdo) = cl_abap_typedescr=>describe_by_data( dobj ). DATA(components) = CAST cl_abap_structdescr( tdo )->components.

" RTTC - Create types dynamically DATA(elem_type) = cl_abap_elemdescr=>get_string( ). CREATE DATA dref TYPE HANDLE elem_type.

Bundled Resources

This skill includes 28 comprehensive reference files covering all aspects of ABAP development:

Related Skills

  • sap-abap-cds: For CDS view development and ABAP Cloud data modeling

  • sap-btp-cloud-platform: For ABAP Environment setup and BTP deployment

  • sap-cap-capire: For CAP service integration and ABAP system connections

  • sap-fiori-tools: For Fiori application development with ABAP backends

  • sap-api-style: For API documentation standards and best practices

Quick Access

  • Reference Guide: references/skill-reference-guide.md

  • Complete guide to all reference files

  • Internal Tables: references/internal-tables.md

  • Complete table operations

  • ABAP SQL: references/abap-sql.md

  • Comprehensive SQL reference

  • Object Orientation: references/object-orientation.md

  • Classes and interfaces

Development Topics

  • references/constructor-expressions.md

  • VALUE, NEW, COND, REDUCE

  • references/rap-eml.md

  • RAP and EML operations

  • references/cds-views.md

  • CDS view development

  • references/string-processing.md

  • String functions and regex

  • references/unit-testing.md

  • ABAP Unit framework

  • references/performance.md

  • Optimization techniques

  • ... and 18 more specialized references

Common Patterns

Safe Table Access (Avoid Exceptions)

" Using VALUE with OPTIONAL DATA(line) = VALUE #( itab[ key = value ] OPTIONAL ).

" Using VALUE with DEFAULT DATA(line) = VALUE #( itab[ 1 ] DEFAULT VALUE #( ) ).

" Check before access IF line_exists( itab[ key = value ] ). DATA(line) = itab[ key = value ]. ENDIF.

Functional Method Chaining

DATA(result) = NEW zcl_builder( ) ->set_name( Test ) ->set_value( 123 ) ->build( ).

FOR Iteration Expressions

" Transform table DATA(transformed) = VALUE itab_type( FOR wa IN source_itab ( id = wa-id name = to_upper( wa-name ) ) ).

" With WHERE DATA(filtered) = VALUE itab_type( FOR wa IN source WHERE ( status = 'A' ) ( wa ) ).

" With INDEX INTO DATA(numbered) = VALUE itab_type( FOR wa IN source INDEX INTO idx ( line_no = idx data = wa ) ).

ABAP Cloud Compatibility

" Use released APIs only DATA(uuid) = cl_system_uuid=>create_uuid_x16_static( ). DATA(date) = xco_cp=>sy->date( )->as( xco_cp_time=>format->iso_8601_extended )->value. DATA(time) = xco_cp=>sy->time( )->as( xco_cp_time=>format->iso_8601_extended )->value.

" Output in cloud (if_oo_adt_classrun) out->write( result ).

" Avoid: sy-datum, sy-uzeit, DESCRIBE TABLE, WRITE, MOVE...TO

Error Catalog

CX_SY_ITAB_LINE_NOT_FOUND

Cause: Table expression access to non-existent line Solution: Use OPTIONAL, DEFAULT, or check with line_exists( )

CX_SY_ZERODIVIDE

Cause: Division by zero Solution: Check divisor before operation

CX_SY_RANGE_OUT_OF_BOUNDS

Cause: Invalid substring access or array bounds Solution: Validate offset and length before access

CX_SY_CONVERSION_NO_NUMBER

Cause: String cannot be converted to number Solution: Validate input format before conversion

CX_SY_REF_IS_INITIAL

Cause: Dereferencing unbound reference Solution: Check IS BOUND before dereferencing

Performance Tips

  • Use SORTED/HASHED tables for frequent key access

  • Prefer field symbols over work areas in loops for modification

  • Use PACKAGE SIZE for large SELECT results

  • Avoid SELECT in loops - use FOR ALL ENTRIES or JOINs

  • Use secondary keys for different access patterns

  • Minimize CORRESPONDING calls - explicit assignments are faster

Source Documentation

All content based on SAP official ABAP Cheat Sheets:

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

sap-btp-developer-guide

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

sapui5-cli

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

sap-hana-cli

No summary provided by upstream source.

Repository SourceNeeds Review
General

sap-fiori-tools

No summary provided by upstream source.

Repository SourceNeeds Review