sap-abap-cds

📁 secondsky/sap-skills 📅 8 days ago
23
总安装量
5
周安装量
#16325
全站排名
安装命令
npx skills add https://github.com/secondsky/sap-skills --skill sap-abap-cds

Agent 安装分布

github-copilot 4
codex 4
kimi-cli 4
gemini-cli 4
opencode 4
amp 4

Skill 文档

SAP ABAP CDS (Core Data Services)

Related Skills

  • sap-abap: Use for ABAP programming patterns used with CDS or when implementing EML statements in ABAP
  • sap-btp-cloud-platform: Use for CDS deployment scenarios on BTP or ABAP Environment configurations
  • sap-fiori-tools: Use when building Fiori Elements applications that consume CDS views or working with UI annotations
  • sap-cap-capire: Use for comparing CDS syntax between ABAP and CAP or when integrating ABAP CDS with CAP services
  • sap-api-style: Use when documenting CDS-based OData services or following API documentation standards

Quick Reference: https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/abencds.html | SAP Cheat Sheets: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/15_CDS_View_Entities.md

Table of Contents


1. CDS View Fundamentals

View Types

Type Syntax Database View Since
CDS View DEFINE VIEW Yes 7.4 SP8
CDS View Entity DEFINE VIEW ENTITY No 7.55

Recommendation: Use CDS View Entities for new development.

Basic CDS View Syntax

@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 View Entity Syntax (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
}

Key Difference: View entities omit @AbapCatalog.sqlViewName – no SQL view generated.

Eclipse ADT Setup

  1. File → New → Other → Core Data Services → Data Definition
  2. Enter name, description, and package
  3. Select template (view, view entity, etc.)

2. Essential Annotations

Core Annotations

Essential annotations for CDS development:

  • @AbapCatalog.sqlViewName – SQL view name (max 16 chars)
  • @AbapCatalog.compiler.CompareFilter – Optimize WHERE clauses
  • @AccessControl.authorizationCheck – Set to #NOT_REQUIRED, #CHECK, #MANDATORY, or #NOT_ALLOWED
  • @EndUserText.label – User-facing description
  • @Metadata.allowExtensions – Allow view extensions

Complete Reference: See references/annotations-reference.md for 50+ annotations with examples.

Semantics Annotations (Currency/Quantity)

Required for CURR and QUAN data types to avoid error SD_CDS_ENTITY105:

-- Currency fields
@Semantics.currencyCode: true
waers,
@Semantics.amount.currencyCode: 'waers'
amount,

-- Quantity fields
@Semantics.unitOfMeasure: true
meins,
@Semantics.quantity.unitOfMeasure: 'meins'
quantity

UI Annotations (Fiori Elements)

@UI.lineItem: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
@UI.selectionField: [{ position: 10 }]
field1,

@UI.hidden: true
internal_field

Consumption Annotations (Value Help)

@Consumption.valueHelpDefinition: [{
  entity: { name: 'I_Currency', element: 'Currency' }
}]
waers

For complete annotation reference, see references/annotations-reference.md.


3. Expressions and Operations

CASE Expressions

Simple CASE (single variable comparison):

case status
  when 'A' then 'Active'
  when 'I' then 'Inactive'
  else 'Unknown'
end as StatusText

Searched CASE (multiple conditions):

case
  when amount > 1000 then 'High'
  when amount > 100 then 'Medium'
  else 'Low'
end as AmountCategory

Comparison Operators

Standard operators: =, <>, <, >, <=, >= Special operators: BETWEEN x AND y, LIKE, IS NULL, IS NOT NULL

Complete Reference: See references/expressions-reference.md for all operators and expressions.

Arithmetic Operations

quantity * price as TotalAmount,
amount / 100 as Percentage,
-amount as NegatedAmount

Session Variables

Available system variables (SY fields equivalent):

  • $session.user (SY-UNAME) – Current user
  • $session.client (SY-MANDT) – Client
  • $session.system_language (SY-LANGU) – Language
  • $session.system_date (SY-DATUM) – Current date

Complete Reference: See references/expressions-reference.md for all system variables.

$session.user as CurrentUser,
$session.system_date as Today

4. Built-in Functions

CDS provides comprehensive built-in functions for string, numeric, and date operations.

Key Function Categories

  • String Functions: concat(), length(), substring(), upper(), lower(), replace()
  • Numeric Functions: abs(), ceil(), floor(), round(), division()
  • Date Functions: dats_add_days(), dats_add_months(), dats_days_between()
  • CAST Expression: Convert between ABAP data types

Complete Reference: See references/functions-reference.md for all 50+ functions with examples.

Quick Examples

-- 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)
right outer join mvke as v on m.matnr = v.matnr

-- CROSS JOIN (cartesian product)
cross join t001 as co

6. Associations

Associations define relationships between entities (join-on-demand):

Defining Associations

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
}

Cardinality Notation

Syntax mapping:

  • [0..1] or [1] → association to one (LEFT OUTER MANY TO ONE)
  • [1..1] → association to one (exact match)
  • [0..*] or [*] → association to many (LEFT OUTER MANY TO MANY)
  • [1..*] → association to many (one or more)

Complete Reference: See references/associations-reference.md for detailed cardinality guide.

New Cardinality Syntax (Release 2302+)

association to one _Customer on ...   -- [0..1]
association to many _Items on ...      -- [0..*]

Using Associations

-- Expose for consumer use
_Customer,

-- Ad-hoc field access (triggers join)
_Customer.name as CustomerName

Path Expressions with Filter

-- Filter with cardinality indicator
_Items[1: Status = 'A'].ItemNo

For complete association reference, see references/associations-reference.md.


7. Input Parameters

Defining Parameters

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

Parameter Reference

Use colon notation :p_date_from or $parameters.p_date_from

Calling 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. Aggregate Expressions

Aggregate Functions

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. Access Control (DCL)

Basic DCL Structure

@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');
}

Authorization Check Options

Available values:

  • #NOT_REQUIRED – No authorization check
  • #CHECK – Warning if no DCL exists
  • #MANDATORY – Error if no DCL exists
  • #NOT_ALLOWED – DCL ignored if exists

Complete Reference: See references/access-control-reference.md for detailed DCL patterns.

Condition Types

PFCG Authorization: where (field) = aspect pfcg_auth(AUTH_OBJECT, AUTH_FIELD, ACTVT = '03')

Literal Condition: where status <> 'DELETED'

User Aspect: where created_by ?= aspect user

Combined: where (bukrs) = aspect pfcg_auth(...) and status = 'ACTIVE'

For complete access control reference, see references/access-control-reference.md.


10. Data Retrieval from ABAP

Standard SELECT

SELECT * FROM zcds_example
  WHERE field1 = @lv_value
  INTO TABLE @DATA(lt_result).

SALV IDA (Integrated Data Access)

cl_salv_gui_table_ida=>create_for_cds_view(
  CONV #( 'ZCDS_EXAMPLE' )
)->fullscreen( )->display( ).

11. Common Errors and Solutions

SD_CDS_ENTITY105: Missing Reference Information

Problem: CURR/QUAN fields without reference

Solution: Add semantics annotations

@Semantics.currencyCode: true
waers,
@Semantics.amount.currencyCode: 'waers'
netwr

Or import currency from related table:

inner join t001 as c on ...
{
  c.waers,
  @Semantics.amount.currencyCode: 'waers'
  v.amount
}

Cardinality Warnings

Problem: Cardinality doesn’t match actual data

Solution: Define cardinality matching data model

association [0..1] to ...  -- Use for optional relationships
association [1..*] to ...  -- Use for required one-to-many

For complete troubleshooting guide, see references/troubleshooting.md.


12. Useful Transactions and Tables

Key Transactions

  • SDDLAR – Display/repair DDL structures
  • RSRTS_ODP_DIS – TransientProvider preview
  • RSRTS_QUERY_CHECK – CDS query metadata validation
  • SE63 – Translation (EndUserText)
  • SE11 – ABAP Dictionary
  • SU21 – Authorization objects

Important Tables

  • DDHEADANNO – Header-level annotations
  • CDSVIEWANNOPOS – CDS view header annotations
  • CDS_FIELD_ANNOTATION – Field-level annotations
  • ABDOC_CDS_ANNOS – SAP annotation definitions

API Class

CL_DD_DDL_ANNOTATION_SERVICE – Programmatic annotation access:

  • get_annos() – Get all annotations
  • get_label_4_element() – Get @EndUserText.label

Bundled Resources

Reference Documentation

For detailed guidance, see the reference files in references/:

  • annotations-reference.md – Complete annotation catalog
  • functions-reference.md – All built-in functions with examples
  • associations-reference.md – Associations and cardinality guide
  • access-control-reference.md – DCL and authorization patterns
  • expressions-reference.md – Expressions and operators
  • troubleshooting.md – Common errors and solutions

Templates

For templates, see templates/:

  • basic-view.md – Standard CDS view template
  • parameterized-view.md – View with input parameters
  • dcl-template.md – Access control definition

Source Documentation

Update this skill by checking:

Last Verified: 2025-11-23