sap-abap-cds について
ABAP CDS ビューを作成・保守する開発者向けのリファレンススキルです。構文、アノテーション、アクセス制御、バージョン差異、トラブルシューティングを扱います。
主な機能
- 01従来型ビューとビューエンティティ
- 02アソシエーションとパラメーター
- 03UI・セマンティックアノテーション
- 04DCL アクセス制御
- 05バージョン互換性ガイド
- 06コンパイラーエラーの調査
活用シーン
- 01ABAP アプリ用 CDS ビューの作成
- 02通貨・数量セマンティクスの追加
- 03アソシエーションとアクセス規則の定義
- 04CDS コンパイル問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ secondsky/ sap-skills --skill sap-abap-cdsインストール後、Claude Code で/sap-abap-cdsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdagents/openai.yamlreferences/access-control-reference.mdannotations-reference.mdassociations-reference.mdexpressions-reference.mdfunctions-reference.mdtroubleshooting.mdtemplates/basic-view.mddcl-template.mdparameterized-view.md詳細
SAP ABAP CDS(Core Data Services)
関連スキル
- sap-abap:CDS で使用する ABAP プログラミングパターン、または ABAP で EML ステートメントを実装する場合に使用します
- sap-btp-cloud-platform:BTP への CDS デプロイシナリオ、または ABAP Environment の設定に使用します
- sap-fiori-tools:CDS ビューを利用する Fiori Elements アプリケーションの構築、または UI アノテーションの作業に使用します
- sap-cap-capire:ABAP と CAP の CDS 構文を比較する場合、または ABAP CDS を CAP サービスと統合する場合に使用します
- sap-api-style:CDS ベースの OData サービスを文書化する場合、または API ドキュメントの標準に従う場合に使用します
このスキルを使用する場面
ABAP CDS ビューまたはビューエンティティの作成、アソシエーションとカーディナリティの定義、UI アノテーションまたはセマンティックアノテーションの追加、DCL アクセス制御の実装、通貨/単位フィールドの処理、CDS コンパイラーエラーのトラブルシューティング、従来の CDS ビューと新しいビューエンティティの比較を行う場合に、このスキルを使用してください。
クイックリファレンス:https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/abencds.html | SAP チートシート:https://github.com/SAP-samples/abap-cheat-sheets/blob/main/15_CDS_View_Entities.md
バージョン互換性
このスキルでは、7.40 SP8 から ABAP Cloud までの CDS 機能を扱います。主なバージョン境界は次のとおりです。
| 機能 | 7.40 SP8 | 7.50 | 7.51 | 7.55+ |
|---|---|---|---|---|
CDS ビュー(DEFINE VIEW) | x | x | x | x |
| CDS アソシエーション、パラメーター、組み込み関数 | x | x | x | x |
CDS テーブル関数(DEFINE TABLE FUNCTION) | x | x | x | |
| CDS アクセス制御(DEFINE ROLE / pfcg_auth) | x | x | x | x |
| CDS アクセス制御(暗黙的な評価) | x | x | x | |
セッション変数($session.user/client/system_language) | x | x | x | x |
@Environment.systemField アノテーション | x | x | x | |
UPPER/LOWER 関数 | x | x | ||
$session.system_date | x | x | ||
CDS メタデータ拡張(ANNOTATE VIEW) | x | x | ||
| CDS のクロス結合 | x | x | ||
CDS ビューエンティティ(DEFINE VIEW ENTITY) | x | |||
新しいカーディナリティ構文(to one/to many) | 7.57+ |
7.40 システムの場合:DEFINE VIEW(DEFINE VIEW ENTITY ではありません)を使用してください。CDS テーブル関数は 7.50 より前では利用できません。基本的な DCL(pfcg_auth を使用する DEFINE ROLE)は 7.40 SP08 から利用できますが、ABAP SQL での暗黙的なロール評価には 7.50 以降が必要です。
$session.user/client/system_language は 7.40 SP08 から利用できます。
templates/ のテンプレートには、従来の CDS ビューとビューエンティティの両方のバリエーションが含まれています。
目次
- 1. CDS ビューの基礎
- 2. 必須アノテーション
- 3. 式と演算
- 4. 組み込み関数
- 5. 結合
- 6. アソシエーション
- 7. 入力パラメーター
- 8. 集計式
- 9. アクセス制御(DCL)
- 10. ABAP からのデータ取得
- 11. よくあるエラーと解決方法
- 12. 便利なトランザクションとテーブル
- 同梱リソース
- ソースドキュメント
1. CDS ビューの基礎
ビューの種類
| 種類 | 構文 | データベースビュー | 導入時期 |
|---|---|---|---|
| CDS ビュー | DEFINE VIEW | はい | 7.4 SP8 |
| CDS ビューエンティティ | DEFINE VIEW ENTITY | いいえ | 7.55 |
推奨:新規開発では CDS ビューエンティティを使用してください。
CDS ビューの基本構文
@AbapCatalog.sqlViewName: 'ZCDS_EXAMPLE_V'
@AbapCatalog.compiler.CompareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Example CDS View'
define view ZCDS_EXAMPLE
as select from db_table as t
{
key t.field1,
t.field2,
t.field3 as AliasName
}
CDS ビューエンティティの構文(7.55+)
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Example View Entity'
define view entity Z_CDS_EXAMPLE
as select from db_table as t
{
key t.field1,
t.field2,
t.field3 as AliasName
}
主な違い:ビューエンティティでは @AbapCatalog.sqlViewName を省略します。SQL ビューは生成されません。
Eclipse ADT のセットアップ
- ファイル → 新規 → その他 → Core Data Services → データ定義
- 名前、説明、パッケージを入力します
- テンプレート(ビュー、ビューエンティティなど)を選択します
2. 必須アノテーション
コアアノテーション
CDS 開発に必須のアノテーション:
@AbapCatalog.sqlViewName- SQL ビュー名(最大 16 文字)@AbapCatalog.compiler.CompareFilter- WHERE 句を最適化します@AccessControl.authorizationCheck- #NOT_REQUIRED、#CHECK、#MANDATORY、または #NOT_ALLOWED に設定します@EndUserText.label- ユーザー向けの説明@Metadata.allowExtensions- ビュー拡張を許可します
完全なリファレンス:例を含む 50 以上のアノテーションについては、references/annotations-reference.md を参照してください。
セマンティクスアノテーション(通貨/数量)
エラー SD_CDS_ENTITY105 を回避するため、CURR および QUAN データ型に必須です:
-- Currency fields
@Semantics.currencyCode: true
waers,
@Semantics.amount.currencyCode: 'waers'
amount,
-- Quantity fields
@Semantics.unitOfMeasure: true
meins,
@Semantics.quantity.unitOfMeasure: 'meins'
quantity
UI アノテーション(Fiori Elements)
@UI.lineItem: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
@UI.selectionField: [{ position: 10 }]
field1,
@UI.hidden: true
internal_field
コンシュームアノテーション(値ヘルプ)
@Consumption.valueHelpDefinition: [{
entity: { name: 'I_Currency', element: 'Currency' }
}]
waers
アノテーションの完全なリファレンスについては、references/annotations-reference.md を参照してください。
3. 式と演算
CASE 式
単純 CASE(単一変数の比較):
case status
when 'A' then 'Active'
when 'I' then 'Inactive'
else 'Unknown'
end as StatusText
検索 CASE(複数の条件):
case
when amount > 1000 then 'High'
when amount > 100 then 'Medium'
else 'Low'
end as AmountCategory
比較演算子
標準演算子:=, <>, <, >, <=, >=
特殊演算子:BETWEEN x AND y、LIKE、IS NULL、IS NOT NULL
完全なリファレンス:すべての演算子と式については、references/expressions-reference.md を参照してください。
算術演算
quantity * price as TotalAmount,
amount / 100 as Percentage,
-amount as NegatedAmount
セッション変数
使用可能なシステム変数(SY フィールド相当):
$session.user(SY-UNAME)- 現在のユーザー [7.40 SP08+]$session.client(SY-MANDT)- クライアント [7.40 SP08+]$session.system_language(SY-LANGU)- 言語 [7.40 SP08+]$session.system_date(SY-DATUM)- 現在の日付 [7.51+]
注:
$session.user/client/system_languageは 7.40 SP08 以降で使用できます。$session.system_dateには 7.51 以降が必要です。@Environment.systemFieldには 7.50 以降が必要です。
完全なリファレンス:すべてのシステム変数については、references/expressions-reference.md を参照してください。
$session.user as CurrentUser,
$session.system_date as Today
4. 組み込み関数
CDS には、文字列、数値、日付の操作に対応する包括的な組み込み関数が用意されています。
主な関数カテゴリ
- 文字列関数:concat()、length()、substring()、upper()、lower()、replace()
- 数値関数:abs()、ceil()、floor()、round()、division()
- 日付関数:dats_add_days()、dats_add_months()、dats_days_between()
- CAST 式:ABAP データ型間の変換
注:CDS の
upper()とlower()には 7.51 以降が必要です。7.40/7.50 では、大文字・小文字の変換は選択後に ABAP で行う必要があります(CDS に相当する機能はありません)。
完全なリファレンス:例を含む 50 以上の関数については、references/functions-reference.md を参照してください。
使用例
-- String operations
concat(first_name, last_name) as FullName,
upper(name) as UpperName,
substring(description, 1, 10) as ShortDesc
-- Numeric operations
abs(amount) as AbsoluteAmount,
round(value, 2) as RoundedValue,
division(10, 3, 2) as PreciseDivision
-- Date operations
dats_add_days(current_date, 7) as NextWeek,
dats_days_between(start_date, end_date) as Duration
-- Type conversion
cast(field as abap.char(10)) as TextField,
cast(amount as abap.curr(15,2)) as CurrencyField
**ABAP Types**: `abap.char()`, `abap.numc()`, `abap.int4`, `abap.dats`, `abap.tims`, `abap.curr()`, `abap.cuky`, `abap.quan()`, `abap.unit()`
---
## 5. Joins
### Join Types
```sql
-- INNER JOIN (matching rows only)
inner join makt as t on m.matnr = t.matnr
-- LEFT OUTER JOIN (all from left, matching from right)
left outer join marc as c on m.matnr = c.matnr
-- RIGHT OUTER JOIN (all from right, matching from left) -- [7.51+]
right outer join mvke as v on m.matnr = v.matnr
-- CROSS JOIN (cartesian product) -- [7.51+]
cross join t001 as co
6. アソシエーション
アソシエーションは、エンティティ間の関係を定義します(必要に応じて結合します)。
アソシエーションの定義
define view Z_ASSOC_EXAMPLE as select from scarr as c
association [1..*] to spfli as _Flights
on $projection.carrid = _Flights.carrid
association [0..1] to sairport as _Airport
on $projection.hub = _Airport.id
{
key c.carrid,
c.carrname,
c.hub,
// Expose associations
_Flights,
_Airport
}
カーディナリティ表記
構文の対応:
[0..1]または[1]→association to one(LEFT OUTER MANY TO ONE)[1..1]→association to one(完全一致)[0..*]または[*]→association to many(LEFT OUTER MANY TO MANY)[1..*]→association to many(1 件以上)
完全なリファレンス:カーディナリティの詳細なガイドについては、references/associations-reference.md を参照してください。
新しいカーディナリティ構文(リリース 2302 以降)
association to one _Customer on ... -- [0..1]
association to many _Items on ... -- [0..*]
アソシエーションの使用
-- Expose for consumer use
_Customer,
-- Ad-hoc field access (triggers join)
_Customer.name as CustomerName
フィルター付きパス式
-- Filter with cardinality indicator
_Items[1: Status = 'A'].ItemNo
アソシエーションの完全なリファレンスについては、references/associations-reference.md を参照してください。
7. 入力パラメーター
パラメーターの定義
define view Z_PARAM_EXAMPLE
with parameters
p_date_from : dats,
p_date_to : dats,
@Environment.systemField: #SYSTEM_LANGUAGE
p_langu : spras
as select from vbak as v
{
key v.vbeln,
v.erdat,
v.erzet
}
where v.erdat between :p_date_from and :p_date_to
パラメーターの参照
コロン表記 :p_date_from または $parameters.p_date_from を使用します
ABAP からの呼び出し:
SELECT * FROM z_param_example(
p_date_from = '20240101',
p_date_to = '20241231',
p_langu = @sy-langu
) INTO TABLE @DATA(lt_result).
8. 集約式
集約関数
define view Z_AGG_EXAMPLE as select from vbap as i
{
i.vbeln,
sum(i.netwr) as TotalAmount,
avg(i.netwr) as AvgAmount,
max(i.netwr) as MaxAmount,
min(i.netwr) as MinAmount,
count(*) as ItemCount
}
group by i.vbeln
having sum(i.netwr) > 1000
9. アクセス制御(DCL)
基本的な DCL 構造
@MappingRole: true
define role Z_CDS_EXAMPLE_DCL {
grant select on Z_CDS_EXAMPLE
where (bukrs) = aspect pfcg_auth(F_BKPF_BUK, BUKRS, ACTVT = '03');
}
認可チェックのオプション
利用可能な値:
#NOT_REQUIRED- 認可チェックなし#CHECK- DCL が存在しない場合に警告#MANDATORY- DCL が存在しない場合にエラー#NOT_ALLOWED- DCL が存在しても無視
完全なリファレンス:DCL のパターンの詳細については、references/access-control-reference.md を参照してください。
条件の種類
PFCG 認可:where (field) = aspect pfcg_auth(AUTH_OBJECT, AUTH_FIELD, ACTVT = '03')
リテラル条件:where status <> 'DELETED'
ユーザーアスペクト:where created_by ?= aspect user
組み合わせ:where (bukrs) = aspect pfcg_auth(...) and status = 'ACTIVE'
アクセス制御の完全なリファレンスについては、references/access-control-reference.md を参照してください。
10. ABAP からのデータ取得
標準 SELECT
SELECT * FROM zcds_example
WHERE field1 = @lv_value
INTO TABLE @DATA(lt_result).
SALV IDA(統合データアクセス)
cl_salv_gui_table_ida=>create_for_cds_view(
CONV #( 'ZCDS_EXAMPLE' )
)->fullscreen( )->display( ).
11. よくあるエラーと解決方法
SD_CDS_ENTITY105:参照情報がありません
問題:参照情報のない CURR/QUAN フィールド
解決方法:セマンティクスのアノテーションを追加します
@Semantics.currencyCode: true
waers,
@Semantics.amount.currencyCode: 'waers'
netwr
または、関連テーブルから通貨をインポートします:
inner join t001 as c on ...
{
c.waers,
@Semantics.amount.currencyCode: 'waers'
v.amount
}
カーディナリティに関する警告
問題:カーディナリティが実際のデータと一致しません
解決方法:データモデルに合ったカーディナリティを定義します
association [0..1] to ... -- Use for optional relationships
association [1..*] to ... -- Use for required one-to-many
トラブルシューティングの完全なガイドについては、references/troubleshooting.md を参照してください。
12. 便利なトランザクションとテーブル
主なトランザクション
- SDDLAR - DDL 構造の表示/修復
- RSRTS_ODP_DIS - TransientProvider のプレビュー
- RSRTS_QUERY_CHECK - CDS クエリメタデータの検証
- SE63 - 翻訳(EndUserText)
- SE11 - ABAP ディクショナリ
- SU21 - 認可オブジェクト
重要なテーブル
- DDHEADANNO - ヘッダーレベルのアノテーション
- CDSVIEWANNOPOS - CDS ビューヘッダーのアノテーション
- CDS_FIELD_ANNOTATION - フィールドレベルのアノテーション
- ABDOC_CDS_ANNOS - SAP アノテーション定義
API クラス
CL_DD_DDL_ANNOTATION_SERVICE - アノテーションへのプログラムによるアクセス:
get_annos()- すべてのアノテーションを取得get_label_4_element()- @EndUserText.label を取得
同梱リソース
リファレンスドキュメント
詳しいガイダンスについては、references/ 内のリファレンスファイルを参照してください:
annotations-reference.md- アノテーションの完全なカタログfunctions-reference.md- すべての組み込み関数と例associations-reference.md- アソシエーションとカーディナリティのガイドaccess-control-reference.md- DCL と認可のパターンexpressions-reference.md- 式と演算子troubleshooting.md- よくあるエラーと解決方法
テンプレート
テンプレートについては、templates/ を参照してください:
basic-view.md- 標準 CDS ビューテンプレートparameterized-view.md- 入力パラメーター付きビューdcl-template.md- アクセス制御定義
ソースドキュメント
このスキルを更新する際は、以下を確認してください:
- https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/abencds.html (ABAP Cloud)
- https://help.sap.com/doc/abapdocu_740_index_htm/7.40/en-US/index.htm (7.40 Reference)
- https://help.sap.com/docs/SAP_NETWEAVER_AS_ABAP_752/f2e545608079437ab165c105649b89db/7c078765ec6d4e6b88b71bdaf8a2bd9f.html (NetWeaver 7.52 User Guide)
- https://github.com/SAP-samples/abap-cheat-sheets
- https://github.com/SAP-samples/abap-cheat-sheets/blob/main/33_ABAP_Release_News.md (Release News)
最終確認日:2026-04-02