mcpField
S
sap-abap-cds

sap-abap-cds

github.com/secondskyデータ・データベース480954 回インストール3 週間前に更新
リポジトリ

sap-abap-cds について

ABAP CDS ビューを作成・保守する開発者向けのリファレンススキルです。構文、アノテーション、アクセス制御、バージョン差異、トラブルシューティングを扱います。

主な機能

  1. 01従来型ビューとビューエンティティ
  2. 02アソシエーションとパラメーター
  3. 03UI・セマンティックアノテーション
  4. 04DCL アクセス制御
  5. 05バージョン互換性ガイド
  6. 06コンパイラーエラーの調査

活用シーン

  1. 01ABAP アプリ用 CDS ビューの作成
  2. 02通貨・数量セマンティクスの追加
  3. 03アソシエーションとアクセス規則の定義
  4. 04CDS コンパイル問題の調査

インストール

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

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

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

同梱ファイル

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

README.md
agents/
openai.yaml
references/
access-control-reference.md
annotations-reference.md
associations-reference.md
expressions-reference.md
functions-reference.md
troubleshooting.md
templates/
basic-view.md
dcl-template.md
parameterized-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 SP87.507.517.55+
CDS ビュー(DEFINE VIEW)xxxx
CDS アソシエーション、パラメーター、組み込み関数xxxx
CDS テーブル関数(DEFINE TABLE FUNCTION)xxx
CDS アクセス制御(DEFINE ROLE / pfcg_auth)xxxx
CDS アクセス制御(暗黙的な評価)xxx
セッション変数($session.user/client/system_language)xxxx
@Environment.systemField アノテーションxxx
UPPER/LOWER 関数xx
$session.system_datexx
CDS メタデータ拡張(ANNOTATE VIEW)xx
CDS のクロス結合xx
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 ビューの基礎

ビューの種類
種類構文データベースビュー導入時期
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 のセットアップ
  1. ファイル → 新規 → その他 → Core Data Services → データ定義
  2. 名前、説明、パッケージを入力します
  3. テンプレート(ビュー、ビューエンティティなど)を選択します

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 - アクセス制御定義

ソースドキュメント

このスキルを更新する際は、以下を確認してください:

最終確認日:2026-04-02

コメント