CDS View Entities
ABAP CDS (Core Data Services) — інфраструктура для декларативного опису семантично багатих моделей даних на стандартній базі AS ABAP. CDS view entity — модерний наступник класичних DDIC views: запит описується в DDL, активується як CDS-сутність, доступний з ABAP SQL, може бути джерелом інших CDS-моделей і основою RAP.
На відміну від класичних views, CDS view entity підтримує анотації, асоціації, параметри, касти, вирази, session variables. Створюється тільки в ADT.
Мінімальний синтаксис
Section titled “Мінімальний синтаксис”@AccessControl.authorizationCheck: #NOT_REQUIRED@EndUserText.label: 'Demo CDS view entity'define view entity zdemo_cds_ve with parameters p_carrid : s_carr_id as select from zdemo_abap_flsch{ key carrid, key connid, cityfrom, cityto, fltime, :p_carrid as passed_carrid}where carrid = :p_carrid@AccessControl.authorizationCheck— обовʼязкова.#NOT_REQUIRED— тільки для демо; у продакшні#CHECKз DCL (Data Control Language).with parameters— вхідні параметри, доступні в тілі через:p_name.key— ключові поля. Визначають унікальність і працюють як основа для подальших joinʼів.
Поля, літерали, session variables
Section titled “Поля, літерали, session variables”{ key carrid, -- поле джерела 'some text' as note, -- нетипований літерал char`X` as flag, -- типований літерал abap.int4`42` as magic, $session.system_date as today, -- session variable $session.user as uname}Типовані літерали перевіряються на етапі активації. У ABAP Cloud — рекомендовані замість нетипованих.
Cast і арифметика
Section titled “Cast і арифметика”{ key connid, cast( fltime as abap.dec( 8, 2 ) ) as fltime_dec, price + 10 as price_plus_10, division( seatsocc, seatsmax, 2 ) as occupancy_rate}cast змінює тип колонки у результаті. Звертай увагу на правила конверсії — не кожен тип можна привести до будь-якого.
Case-вирази
Section titled “Case-вирази”{ key carrid, case currcode when 'EUR' then 'A' when 'USD' then 'B' else 'C' end as curr_group,
case when length( carrname ) <= 5 then 'short' when length( carrname ) <= 10 then 'mid' else 'long' end as name_size}Простий case — порівняння значень операнда. Complex case — евалюація логічних виразів. Без else результат — null.
Built-in functions
Section titled “Built-in functions”Числові (abs, ceil, floor, round, div, division, mod), рядкові (concat, concat_with_space, upper, lower, left, right, length, substring, replace, instr), coalesce, дата/час.
{ key carrid, upper( carrname ) as name_up, concat_with_space( carrid, carrname, 1 ) as full, coalesce( cityto, 'N/A' ) as city}Агрегація
Section titled “Агрегація”define view entity zdemo_cds_agg as select from zdemo_abap_flsch{ key carrid, sum( fltime ) as total_fltime, avg( fltime as abap.dec( 14, 2 ) ) as avg_fltime, max( fltime ) as max_fltime, count(*) as cnt}group by carridПідтримуються inner join, left outer join, right outer join, cross join.
define view entity zdemo_cds_joins as select from zdemo_abap_flsch as fs inner join zdemo_abap_carr as c on c.carrid = fs.carrid left outer join zdemo_abap_fli as fl on fl.carrid = fs.carrid and fl.connid = fs.connid{ key fs.carrid, key fs.connid, c.carrname, fl.fldate, fl.seatsocc}Асоціації
Section titled “Асоціації”Асоціація — “відкладений join”. Декларується у CDS, але фактично виконується тільки тоді, коли поле з асоційованої сутності реально використовується.
define view entity zdemo_cds_assoc as select from zdemo_abap_flsch as fs association [1..1] to zdemo_abap_carr as _carr on $projection.carrid = _carr.carrid association [0..*] to zdemo_abap_fli as _fli on $projection.carrid = _fli.carrid and $projection.connid = _fli.connid{ key fs.carrid, key fs.connid, fs.cityfrom, fs.cityto, _carr.carrname, -- експліцитне вживання, join виконується _carr, -- експонуємо назовні _fli}Cardinality ([1..1], [0..*]) задає очікувану кратність. $projection — посилання на поточне projection view в ON-умові.
Використання експонованої асоціації в ABAP SQL через path expression (оператор \):
SELECT carrid, connid, \_carr-carrname FROM zdemo_cds_assoc INTO TABLE @DATA(result).Використання в ABAP SQL
Section titled “Використання в ABAP SQL”CDS view entity виступає як будь-яке інше джерело даних у SELECT:
" Запит з параметромSELECT * FROM zdemo_cds_ve( p_carrid = 'LH' ) INTO TABLE @DATA(result).
" Типізація локальних змінних через CDS view entityDATA ls_row TYPE zdemo_cds_ve.DATA lt_tab TYPE TABLE OF zdemo_cds_ve WITH EMPTY KEY.Анотації
Section titled “Анотації”Анотації задають метадані, які керують поведінкою CDS в UI, OData, RAP, авторизації, пошукових допомогах.
| Анотація | Призначення |
|---|---|
@AccessControl.authorizationCheck | #CHECK / #NOT_REQUIRED / #NOT_ALLOWED |
@EndUserText.label | Опис для tooling і UI |
@Semantics.amount.currencyCode | Звʼязати amount-поле з currency key |
@Semantics.quantity.unitOfMeasure | Звʼязати quantity-поле з unit key |
@ObjectModel.* | Метадані RAP бізнес-обʼєктів |
CRUD через CDS
Section titled “CRUD через CDS”Базові view entities — read-only. Для CRUD (створення/оновлення/видалення) потрібна CDS table entity + RAP behavior definition, або writable projection view поверх RAP BO. Це тема окремого довідника з RAP.
Адаптовано з 15_CDS_View_Entities.md (Apache 2.0). Повний перелік нюансів — в оригіналі.