npx skills add https://github.com/secondsky/sap-skills --skill sap-abap" 基本类型
DATA num TYPE i VALUE 123.
DATA txt TYPE string VALUE `Hello`.
DATA flag TYPE abap_bool VALUE abap_true.
" 内联声明
DATA(result) = some_method( ).
FINAL(immutable) = `constant value`.
" 结构体
DATA: BEGIN OF struc,
id TYPE i,
name TYPE string,
END OF struc.
" 内表
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.
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
" 使用 VALUE 创建
itab = VALUE #( ( col1 = 1 col2 = `a` )
( col1 = 2 col2 = `b` ) ).
" 读取操作
DATA(line) = itab[ 1 ]. " 按索引
DATA(line2) = itab[ col1 = 1 ]. " 按键
READ TABLE itab INTO wa INDEX 1.
READ TABLE itab ASSIGNING FIELD-SYMBOL(<fs>) WITH KEY col1 = 1.
" 修改操作
MODIFY TABLE itab FROM VALUE #( col1 = 1 col2 = `updated` ).
itab[ 1 ]-col2 = `changed`.
" 循环处理
LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>).
<line>-col2 = to_upper( <line>-col2 ).
ENDLOOP.
" 删除
DELETE itab WHERE col1 > 5.
DELETE TABLE itab FROM VALUE #( col1 = 1 ).
" SELECT 到表
SELECT * FROM dbtab INTO TABLE @DATA(result_tab).
" 带条件的 SELECT
SELECT carrid, connid, fldate
FROM zdemo_abap_fli
WHERE carrid = 'LH'
INTO TABLE @DATA(flights).
" 聚合函数
SELECT carrid, COUNT(*) AS cnt, AVG( price ) AS avg_price
FROM zdemo_abap_fli
GROUP BY carrid
INTO TABLE @DATA(stats).
" JOIN 操作
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).
" 修改语句
INSERT dbtab FROM @struc.
UPDATE dbtab FROM @struc.
MODIFY dbtab FROM TABLE @itab.
DELETE FROM dbtab WHERE condition.
" VALUE - 结构体和表
DATA(struc) = VALUE struct_type( comp1 = 1 comp2 = `text` ).
DATA(itab) = VALUE itab_type( ( a = 1 ) ( a = 2 ) ( a = 3 ) ).
" NEW - 创建实例
DATA(dref) = NEW i( 123 ).
DATA(oref) = NEW zcl_my_class( param = value ).
" CORRESPONDING - 结构体/表映射
target = CORRESPONDING #( source ).
target = CORRESPONDING #( source MAPPING target_field = source_field ).
" COND/SWITCH - 条件值
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 - 类型转换
DATA(dec) = CONV decfloat34( 1 / 3 ).
" FILTER - 表过滤
DATA(filtered) = FILTER #( itab WHERE status = 'A' ).
" REDUCE - 聚合
DATA(sum) = REDUCE i( INIT s = 0 FOR wa IN itab NEXT s = s + wa-amount ).
" 类定义
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.
" 接口实现
CLASS zcl_impl DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES zif_my_interface.
ENDCLASS.
TRY.
DATA(result) = risky_operation( ).
CATCH cx_sy_zerodivide INTO DATA(exc).
DATA(msg) = exc->get_text( ).
CATCH cx_root INTO DATA(any_exc).
" 处理任何异常
CLEANUP.
" 清理代码
ENDTRY.
" 抛出异常
RAISE EXCEPTION TYPE zcx_my_exception
EXPORTING textid = zcx_my_exception=>error_occurred.
" 使用 COND/SWITCH
DATA(val) = COND #( WHEN valid THEN result
ELSE THROW zcx_my_exception( ) ).
" 连接
DATA(full) = first && ` ` && last.
txt &&= ` appended`.
" 字符串模板
DATA(msg) = |Name: { name }, Date: { date DATE = ISO }|.
" 函数
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 语句
FIND ALL OCCURRENCES OF pattern IN text RESULTS DATA(matches).
REPLACE ALL OCCURRENCES OF old IN text WITH new.
" 字段符号
FIELD-SYMBOLS <fs> TYPE any.
ASSIGN struct-component TO <fs>.
ASSIGN struct-(comp_name) TO <fs>. " 动态组件
" 数据引用
DATA dref TYPE REF TO data.
dref = REF #( variable ).
CREATE DATA dref TYPE (type_name).
dref->* = value.
" RTTI - 获取类型信息
DATA(tdo) = cl_abap_typedescr=>describe_by_data( dobj ).
DATA(components) = CAST cl_abap_structdescr( tdo )->components.
" RTTC - 动态创建类型
DATA(elem_type) = cl_abap_elemdescr=>get_string( ).
CREATE DATA dref TYPE HANDLE elem_type.
此技能包含 28 个全面的参考文件,涵盖 ABAP 开发的各个方面:
references/skill-reference-guide.md - 所有参考文件的完整指南references/internal-tables.md - 完整的表操作references/abap-sql.md - 全面的 SQL 参考references/object-orientation.md - 类和接口references/constructor-expressions.md - VALUE, NEW, COND, REDUCEreferences/rap-eml.md - RAP 和 EML 操作references/cds-views.md - CDS 视图开发references/string-processing.md - 字符串函数和正则表达式references/unit-testing.md - ABAP Unit 框架references/performance.md - 优化技术" 使用带 OPTIONAL 的 VALUE
DATA(line) = VALUE #( itab[ key = value ] OPTIONAL ).
" 使用带 DEFAULT 的 VALUE
DATA(line) = VALUE #( itab[ 1 ] DEFAULT VALUE #( ) ).
" 访问前检查
IF line_exists( itab[ key = value ] ).
DATA(line) = itab[ key = value ].
ENDIF.
DATA(result) = NEW zcl_builder( )
->set_name( `Test` )
->set_value( 123 )
->build( ).
" 转换表
DATA(transformed) = VALUE itab_type(
FOR wa IN source_itab
( id = wa-id name = to_upper( wa-name ) ) ).
" 带 WHERE
DATA(filtered) = VALUE itab_type(
FOR wa IN source WHERE ( status = 'A' )
( wa ) ).
" 带 INDEX INTO
DATA(numbered) = VALUE itab_type(
FOR wa IN source INDEX INTO idx
( line_no = idx data = wa ) ).
" 仅使用已发布的 API
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.
" 在云中输出 (if_oo_adt_classrun)
out->write( result ).
" 避免使用: sy-datum, sy-uzeit, DESCRIBE TABLE, WRITE, MOVE...TO
原因 : 表表达式访问了不存在的行 解决方案 : 使用 OPTIONAL、DEFAULT,或用 line_exists( ) 检查
原因 : 除数为零 解决方案 : 操作前检查除数
原因 : 无效的子字符串访问或数组越界 解决方案 : 访问前验证偏移量和长度
原因 : 字符串无法转换为数字 解决方案 : 转换前验证输入格式
原因 : 解引用未绑定的引用 解决方案 : 解引用前检查 IS BOUND
所有内容基于 SAP 官方 ABAP 速查表:
每周安装量
149
仓库
GitHub 星标数
162
首次出现
2026年1月24日
安全审计
安装于
opencode141
gemini-cli139
github-copilot139
codex138
amp125
kimi-cli125
" 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.
" 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 ).
" 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 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.
" 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 ).
" 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.
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( ) ).
" 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.
" 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.
This skill includes 28 comprehensive reference files covering all aspects of ABAP development:
references/skill-reference-guide.md - Complete guide to all reference filesreferences/internal-tables.md - Complete table operationsreferences/abap-sql.md - Comprehensive SQL referencereferences/object-orientation.md - Classes and interfacesreferences/constructor-expressions.md - VALUE, NEW, COND, REDUCEreferences/rap-eml.md - RAP and EML operationsreferences/cds-views.md - CDS view developmentreferences/string-processing.md - String functions and regexreferences/unit-testing.md - ABAP Unit frameworkreferences/performance.md - Optimization techniques" 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.
DATA(result) = NEW zcl_builder( )
->set_name( `Test` )
->set_value( 123 )
->build( ).
" 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 ) ).
" 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
Cause : Table expression access to non-existent line Solution : Use OPTIONAL, DEFAULT, or check with line_exists( )
Cause : Division by zero Solution : Check divisor before operation
Cause : Invalid substring access or array bounds Solution : Validate offset and length before access
Cause : String cannot be converted to number Solution : Validate input format before conversion
Cause : Dereferencing unbound reference Solution : Check IS BOUND before dereferencing
All content based on SAP official ABAP Cheat Sheets:
Weekly Installs
149
Repository
GitHub Stars
162
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode141
gemini-cli139
github-copilot139
codex138
amp125
kimi-cli125
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
113,700 周安装
detrack-automation:自动化追踪技能,集成Claude AI提升开发效率
1 周安装
Demio自动化工具包:通过Rube MCP和Composio实现Demio操作自动化
1 周安装
Deel自动化工具:通过Rube MCP与Composio实现HR与薪资操作自动化
1 周安装
Honeycomb (hc) 多智能体任务协调系统使用指南 | 开发者协作与项目管理工具
1 周安装
Liquid Glass 采用参考指南:iOS/macOS 界面材质迁移与无障碍优化
148 周安装
spreadsheets 技能:使用 JavaScript 自动化创建和编辑 Excel 电子表格
1 周安装