Sap Abap Cds logo

Sap Abap Cds

Community
secondsky
sap-abap-cds

Comprehensive SAP ABAP CDS (Core Data Services) reference for data modeling, view development, and semantic enrichment. Use when creating CDS views or view entities, defining data models with annotations, working with associations and cardinality, implementing input parameters, using built-in functions, writing CASE expressions, implementing access control with DCL, handling CURR/QUAN data types, troubleshooting CDS errors, querying CDS views from ABAP, or displaying data with SALV IDA. Covers ABAP 7.4+ through ABAP Cloud.

Overview

Publishersecondsky
Repositorysap-skills
Skill namesap-abap-cds
Stars
445
Forks
117
Bundled files
10
LicenseGPL-3.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 10 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by secondsky on GitHub. Read the source before you install it.

Installation

Install the Sap Abap Cds AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/secondsky/sap-skills.git /tmp/sap-skills
mkdir -p .claude/skills
cp -r /tmp/sap-skills/plugins/sap-abap-cds/skills/sap-abap-cds .claude/skills/sap-abap-cds
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Sap Abap Cds in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Sap Abap Cds on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Sap Abap Cds is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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

When to Use This Skill

Use this skill when creating ABAP CDS views or view entities, defining associations and cardinalities, adding UI or semantic annotations, implementing DCL access control, handling currency/unit fields, troubleshooting CDS compiler errors, or comparing classic CDS views with newer view entities.

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

Version Compatibility

This skill covers CDS features from 7.40 SP8 through ABAP Cloud. Key version boundaries:

Feature7.40 SP87.507.517.55+
CDS View (DEFINE VIEW)xxxx
CDS associations, parameters, built-in functionsxxxx
CDS Table Functions (DEFINE TABLE FUNCTION)xxx
CDS Access Control (DEFINE ROLE / pfcg_auth)xxxx
CDS Access Control (implicit evaluation)xxx
Session variables ($session.user/client/system_language)xxxx
@Environment.systemField annotationxxx
UPPER/LOWER functionsxx
$session.system_datexx
CDS Metadata Extensions (ANNOTATE VIEW)xx
Cross Join in CDSxx
CDS View Entity (DEFINE VIEW ENTITY)x
New cardinality syntax (to one/to many)7.57+

On a 7.40 system: Use DEFINE VIEW (not DEFINE VIEW ENTITY). CDS table functions are not available before 7.50. Basic DCL (DEFINE ROLE with pfcg_auth) is available from 7.40 SP08, but implicit role evaluation in ABAP SQL requires 7.50+. $session.user/client/system_language are available from 7.40 SP08. The templates in templates/ include both classic CDS View and View Entity variants.

Table of Contents


1. CDS View Fundamentals

View Types

TypeSyntaxDatabase ViewSince
CDS ViewDEFINE VIEWYes7.4 SP8
CDS View EntityDEFINE VIEW ENTITYNo7.55

Recommendation: Use CDS View Entities for new development.

Basic CDS View Syntax

sql
@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+)

sql
@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. FileNewOtherCore Data ServicesData 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:

sql
-- 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)

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

@UI.hidden: true
internal_field

Consumption Annotations (Value Help)

sql
@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):

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

Searched CASE (multiple conditions):

sql
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

sql
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 [7.40 SP08+]
  • $session.client (SY-MANDT) - Client [7.40 SP08+]
  • $session.system_language (SY-LANGU) - Language [7.40 SP08+]
  • $session.system_date (SY-DATUM) - Current date [7.51+]

Note: $session.user/client/system_language are available from 7.40 SP08. $session.system_date requires 7.51+. @Environment.systemField requires 7.50+.

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

sql
$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

Note: upper() and lower() in CDS require 7.51+. On 7.40/7.50, case conversion must be performed in ABAP after selecting (there is no CDS equivalent).

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

Quick Examples

sql
-- 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. Associations

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

Defining Associations

sql
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+)

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

Using Associations

sql
-- Expose for consumer use
_Customer,

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

Path Expressions with Filter

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

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


7. Input Parameters

Defining Parameters

sql
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:

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

sql
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

sql
@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

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

SALV IDA (Integrated Data Access)

abap
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

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

Or import currency from related table:

sql
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

sql
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: 2026-04-02

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Sap Abap Cds AI skill do?

Comprehensive SAP ABAP CDS (Core Data Services) reference for data modeling, view development, and semantic enrichment. Use when creating CDS views or view entities, defining data models with annotations, working with associations and cardinality, implementing input parameters, using built-in functions, writing CASE expressions, implementing access control with DCL, handling CURR/QUAN data types, troubleshooting CDS errors, querying CDS views from ABAP, or displaying data with SALV IDA. Covers ABAP 7.4+ through ABAP Cloud.

Why use Sap Abap Cds on TypingMind?

Because you install it once and use it with any model. Sap Abap Cds is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Sap Abap Cds in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/secondsky/sap-skills/tree/main/plugins/sap-abap-cds/skills/sap-abap-cds. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Sap Abap Cds?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Sap Abap Cds?

As many as you like. As long as a model supports skills, you can use Sap Abap Cds with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Sap Abap Cds AI skill free?

Yes. It is published on GitHub by secondsky under the GPL-3.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇