secondsky/sap-skills

sap-abap

Comprehensive ABAP development skill for SAP systems.

查看源码
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

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

When to Use This Skill

Use this skill when writing or reviewing ABAP code, modernizing classic ABAP to ABAP Cloud-compatible patterns, working with RAP or EML, implementing ABAP SQL, designing unit tests, or troubleshooting language/runtime behavior across supported ABAP releases.

Version Compatibility

This skill covers ABAP syntax from 7.40 SP08 through ABAP Cloud. Features requiring a higher release are annotated with inline comments in code examples using the format " [7.xx+] or noted in reference files. The table below summarizes the key version boundaries.

Feature7.40 SP027.40 SP057.40 SP087.507.517.527.54
Inline declarations DATA(...)xxxxxxx
Constructor operators (VALUE, NEW, CONV, COND, SWITCH, REF, EXACT, CAST)xxxxxxx
Table expressions itab[...]xxxxxxx
String templatesxxxxxxx
WITH EMPTY KEYxxxxxxx
line_exists(), line_index()xxxxxxx
ABAP SQL: @ host variablesxxxxxx
ABAP SQL: comma-separated listsxxxxxx
ABAP SQL: SQL expressions in SELECTxxxxxx
CORRESPONDING operatorxxxxxx
Table comprehensions (FOR)xxxxxx
LET expressionsxxxxxx
REDUCE operatorxxxxx
FILTER operatorxxxxx
BASE additionxxxxx
LOOP AT ... GROUP BYxxxxx
ABAP SQL: dbtab~* in SELECTxxxxx
ABAP SQL: RIGHT OUTER JOINxxxxxx
CDS views with parametersxxxxx
`FINAL(...)` inline declarationxxxx
Host expressions `@( expr )`xxxx
`UNION` in SELECTxxxx
`IS INSTANCE OF` / `CASE TYPE OF`xxxx
`int8` typexxxx
CDS table functionsxxxx
CDS access control (implicit)xxxx
`$session.user/client/system_language`xxxx
Test seams (`TEST-SEAM`)xxxx
Common Table Expressions (`WITH`)xxx
`OFFSET` in SELECTxxx
`UPPER`/`LOWER` in CDSxxx
Enumerated typesxxx
Internal tables as data source `FROM @itab`xx
`WITH PRIVILEGED ACCESS`xx
`utclong` type and functionsx

On a 7.40 system: Replace any FINAL(...) with DATA(...), and avoid 7.50+ features marked in bold above. Most modern ABAP syntax (VALUE, NEW, CONV, inline declarations, table expressions, REDUCE, FILTER, GROUP BY) is available since 7.40 SP08.

Table of Contents

Quick Reference

Data Types and Declarations

abap
" 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`.              " [7.50+] Use DATA(...) on 7.40

" 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

abap
" 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

abap
" SELECT into table
SELECT * FROM dbtab INTO TABLE @DATA(result_tab).   " @ syntax: 7.40 SP05+

" SELECT with conditions
SELECT carrid, connid, fldate                          " comma syntax: 7.40 SP05+
  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 a~carrid, a~connid, b~carrname
  FROM zdemo_abap_fli AS a
  INNER JOIN zdemo_abap_carr AS b ON a~carrid = 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

abap
" 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

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

abap
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

abap
" 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

abap
" 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)

abap
" 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

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

FOR Iteration Expressions

abap
" 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

abap
" 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

ABAP 7.40 Compatibility

When targeting ABAP 7.40 systems, replace 7.50+ syntax with these patterns:

abap
" Instead of FINAL (7.50+):
FINAL(value) = `constant`.              " 7.50+
DATA(value) = `constant`.               " 7.40 compatible

" Instead of host expressions (7.50+):
SELECT * FROM dbtab WHERE col = @( lv_val ).   " 7.50+
SELECT * FROM dbtab WHERE col = @lv_val.        " 7.40 compatible

" Instead of UNION (7.50+):
SELECT a FROM tab1 UNION SELECT a FROM tab2.    " 7.50+
" Use two separate SELECTs on 7.40 and combine in ABAP:
SELECT a FROM tab1 INTO TABLE @DATA(r1).
SELECT a FROM tab2 INTO TABLE @DATA(r2).
DATA(combined) = VALUE itab_type( FOR l1 IN r1 ( l1 )
                                  FOR l2 IN r2 ( l2 ) ).

" Instead of IS INSTANCE OF (7.50+):
IF oref IS INSTANCE OF zcl_my_class.    " 7.50+
" 7.40 alternative — use typed CAST with exception handling:
TRY.
    DATA(lo) = CAST zcl_my_class( oref ).  " 7.40+
  CATCH cx_sy_move_cast_error.
    " oref is not compatible with zcl_my_class
ENDTRY.

" Instead of CTEs WITH (7.51+):
WITH +cte AS ( SELECT ... ) SELECT ...  " 7.51+
" Use subqueries or temporary tables on 7.40

Error Catalog

CXSYITABLINENOT_FOUND

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

CXSYZERODIVIDE

Cause: Division by zero Solution: Check divisor before operation

CXSYRANGEOUTOF_BOUNDS

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

CXSYCONVERSIONNONUMBER

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

CXSYREFISINITIAL

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


Performance Tips

  1. Use SORTED/HASHED tables for frequent key access
  2. Prefer field symbols over work areas in loops for modification
  3. Use PACKAGE SIZE for large SELECT results
  4. Avoid SELECT in loops - use FOR ALL ENTRIES or JOINs
  5. Use secondary keys for different access patterns
  6. Minimize CORRESPONDING calls - explicit assignments are faster

Source Documentation

All content based on SAP official ABAP Cheat Sheets:

来自同一仓库

更多 Skills

全部 Skills
secondsky
社区

sap-fiori-tools

Develops SAP Fiori applications using SAP Fiori tools extensions for VS Code and SAP Business Application Studio. Use when: generating Fiori Elements or Freestyle SAPUI5 applications, configuring Page Editor for List Report or Object Page, working with annotations and Service Modeler, setting up deployment to ABAP or Cloud Foundry, creating adaptation projects, using Guided Development, previewing with mock data or live data, configuring SAP Fiori launchpad, or using AI-powered generation with P

安装量
1
GitHub Stars
462
最近更新
10月5日
secondsky
社区

dependency-upgrade

Secure dependency upgrades with supply chain protection, cooldowns, and staged rollout. Use when upgrading deps, configuring security policies, or preventing supply chain attacks.

安装量
1
GitHub Stars
458
最近更新
9月28日
secondsky
社区

sap-ai-core

Guides development with SAP AI Core and SAP AI Launchpad for enterprise AI/ML workloads on SAP BTP. Use when: deploying generative AI models, building orchestration workflows with templating/filtering/grounding, implementing RAG with vector databases, managing ML training pipelines with Argo Workflows, configuring content filtering and data masking for PII protection, using the Generative AI Hub for prompt experimentation, managing prompt templates via the Prompt Registry, or integrating AI capa

安装量
1
GitHub Stars
458
最近更新
9月28日
secondsky
社区

sap-btp-cloud-transport-management

Comprehensive skill for SAP Cloud Transport Management service on SAP BTP. Use when setting up transport landscapes, configuring transport nodes and routes, managing import queues, deploying MTAs across Cloud Foundry environments, integrating with CI/CD pipelines, configuring ABAP environment transports, troubleshooting deployment errors, or implementing change management workflows. Covers entitlements, subscriptions, role collections, service instances, destinations, and API integrations.

安装量
1
GitHub Stars
458
最近更新
9月28日