mcpField
S
sap-abap

sap-abap

github.com/secondsky開発4801.3k 回インストール3 週間前に更新
リポジトリ

sap-abap について

sap-abapは、7.40 SP08からABAP Cloudまでを対象に、ABAPの作成、レビュー、問題調査を支援する開発リファレンススキルです。構文ガイド、一般的なパターン、互換性の注記、専門的なリファレンスをまとめています。

主な機能

  1. 01リリース別のABAP構文
  2. 02ABAP SQLと内部テーブル
  3. 03RAPとEMLのガイド
  4. 04ユニットテストと性能リファレンス
  5. 05ABAP Cloud互換パターン

活用シーン

  1. 01クラシックABAPコードのモダナイズ
  2. 02ABAP SQLとテーブル操作の実装
  3. 03実行時や構文の問題調査
  4. 04リリース互換性のコードレビュー

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/sap-skills --skill sap-abap

インストール後、Claude Code で/sap-abapを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
agents/
openai.yaml
references/
abap-dictionary.md
abap-sql.md
amdp.md
authorization.md
bits-bytes.md
builtin-functions.md
cds-views.md
cloud-development.md
constructor-expressions.md
date-time.md
design-patterns.md
dynamic-programming.md
exceptions.md
generative-ai.md
internal-tables.md
numeric-operations.md
object-orientation.md
performance.md
program-flow.md
rap-eml.md
released-classes.md
sap-luw.md
skill-reference-guide.md
sql-hierarchies.md
string-processing.md
table-grouping.md
unit-testing.md
where-conditions.md

詳細

SAP ABAP 開発スキル

関連スキル

  • sap-abap-cds:ABAP バックエンドの Fiori アプリケーション向けに CDS ビューを開発する場合、またはアノテーションを使用してデータモデルを定義する場合に使用します
  • sap-btp-cloud-platform:BTP 上の ABAP Environment を使用する場合、または ABAP アプリケーションをクラウドにデプロイする場合に使用します
  • sap-cap-capire:ABAP システムを CAP アプリケーションに接続する場合、または OData サービスと統合する場合に使用します
  • sap-fiori-tools:ABAP バックエンドを使用して Fiori アプリケーションを構築する場合、または ABAP システムの OData サービスを利用する場合に使用します
  • sap-api-style:ABAP API を文書化する場合、または SAP API ドキュメントの標準に準拠する場合に使用します

このスキルを使用する場合

ABAP コードの作成やレビュー、従来の ABAP を ABAP Cloud 互換のパターンに近代化する作業、RAP や EML の使用、ABAP SQL の実装、ユニットテストの設計、またはサポート対象の ABAP リリース全体にわたる言語やランタイムの動作のトラブルシューティングで、このスキルを使用します。

バージョン互換性

このスキルでは、7.40 SP08 から ABAP Cloud までの ABAP 構文を扱います。より高いリリースを必要とする機能には、コード例内のインラインコメントで " [7.xx+] の形式を使用して注記するか、リファレンスファイルに記載しています。以下の表に、主なバージョンの境界をまとめています。

機能7.40 SP027.40 SP057.40 SP087.507.517.527.54
インライン宣言 DATA(...)xxxxxxx
コンストラクター演算子(VALUE、NEW、CONV、COND、SWITCH、REF、EXACT、CAST)xxxxxxx
テーブル式 itab[...]xxxxxxx
文字列テンプレートxxxxxxx
WITH EMPTY KEYxxxxxxx
line_exists()、line_index()xxxxxxx
ABAP SQL:@ ホスト変数xxxxxx
ABAP SQL:カンマ区切りリストxxxxxx
ABAP SQL:SELECT 内の SQL 式xxxxxx
CORRESPONDING 演算子xxxxxx
テーブル内包表記(FOR)xxxxxx
LET 式xxxxxx
REDUCE 演算子xxxxx
FILTER 演算子xxxxx
BASE 追加xxxxx
LOOP AT ... GROUP BYxxxxx
ABAP SQL:SELECT 内の dbtab~*xxxxx
ABAP SQL:RIGHT OUTER JOINxxxxxx
パラメーター付き CDS ビューxxxxx
FINAL(...) インライン宣言xxxx
ホスト式 @( expr )xxxx
SELECT 内の UNIONxxxx
IS INSTANCE OF / CASE TYPE OFxxxx
int8 型xxxx
CDS テーブル関数xxxx
CDS アクセス制御(暗黙的)xxxx
$session.user/client/system_languagexxxx
テストシーム(TEST-SEAM)xxxx
共通テーブル式(WITH)xxx
SELECT 内の OFFSETxxx
CDS 内の UPPER/LOWERxxx
列挙型xxx
データソースとしての内部テーブル FROM @itabxx
WITH PRIVILEGED ACCESSxx
utclong 型と関数x

7.40 システムの場合:FINAL(...) をすべて DATA(...) に置き換え、上記で太字になっている 7.50 以降の機能は使用しないでください。最新の ABAP 構文(VALUE、NEW、CONV、インライン宣言、テーブル式、REDUCE、FILTER、GROUP BY)のほとんどは、7.40 SP08 から使用できます。

目次

クイックリファレンス

データ型と宣言
" 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.
内部テーブル - 基本操作
" 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 の基本
" 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.
コンストラクター式
" 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 ).
オブジェクト指向 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.
例外処理
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.

同梱リソース

このスキルには、ABAP 開発のあらゆる側面を網羅する 28 個の包括的なリファレンスファイルが含まれています。

関連スキル
  • sap-abap-cds: CDS ビュー開発と ABAP Cloud データモデリング向け
  • sap-btp-cloud-platform: ABAP Environment のセットアップと BTP へのデプロイ向け
  • sap-cap-capire: CAP サービスの統合と ABAP システム接続向け
  • sap-fiori-tools: ABAP バックエンドを使用した Fiori アプリケーション開発向け
  • sap-api-style: API ドキュメントの標準とベストプラクティス向け
クイックアクセス
  • リファレンスガイド: references/skill-reference-guide.md - すべてのリファレンスファイルを網羅したガイド
  • 内部テーブル: references/internal-tables.md - テーブル操作の全般
  • ABAP SQL: references/abap-sql.md - 包括的な SQL リファレンス
  • オブジェクト指向: references/object-orientation.md - クラスとインターフェース
開発トピック
  • references/constructor-expressions.md - VALUE、NEW、COND、REDUCE
  • references/rap-eml.md - RAP および EML の操作
  • references/cds-views.md - CDS ビュー開発
  • references/string-processing.md - 文字列関数と正規表現
  • references/unit-testing.md - ABAP Unit フレームワーク
  • references/performance.md - 最適化手法
  • ... その他 18 個の専門リファレンス

よく使われるパターン

安全なテーブルアクセス(例外を回避)
" 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( ).
FOR 反復式
" 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 との互換性
" 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 との互換性

ABAP 7.40 システムを対象とする場合は、7.50 以降の構文を次のパターンに置き換えてください。

" 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

エラーカタログ

CX_SY_ITAB_LINE_NOT_FOUND

原因: 存在しない行へのテーブル式アクセス 解決策: OPTIONAL、DEFAULT を使用するか、line_exists( ) で確認します

CX_SY_ZERODIVIDE

原因: ゼロ除算 解決策: 演算前に除数を確認します

CX_SY_RANGE_OUT_OF_BOUNDS

原因: 無効な部分文字列アクセスまたは配列の範囲外アクセス 解決策: アクセス前にオフセットと長さを検証します

CX_SY_CONVERSION_NO_NUMBER

原因: 文字列を数値に変換できない 解決策: 変換前に入力形式を検証します

CX_SY_REF_IS_INITIAL

原因: バインドされていない参照のデリファレンス 解決策: デリファレンスの前に IS BOUND を確認します


パフォーマンスのヒント

  1. 頻繁なキーアクセスには SORTED/HASHED テーブルを使用します
  2. 変更を伴うループでは、ワークエリアより フィールドシンボルを優先します
  3. 大規模な SELECT 結果には PACKAGE SIZE を使用します
  4. ループ内の SELECT は避けます - FOR ALL ENTRIES または JOIN を使用します
  5. アクセスパターンが異なる場合は セカンダリキーを使用します
  6. CORRESPONDING の呼び出しを最小限にします - 明示的な代入のほうが高速です

ソースドキュメント

すべての内容は SAP 公式 ABAP Cheat Sheets に基づいています。

コメント