Начиная с версии ABAP 7.4. нам стала доступна новая технология описания моделей данных в словаре – ABAP CDS (CDS – Core Data Services). Данная технология позволяет описывать модели данных на более продвинутом уровне, нежели это можно было делать стандартными словарными вьюшками. Она так же позволяет оптимизировать работу с данными за счёт вынесения вычислений на уровень СУБД (Code-to-Data), что актуально для HANA.
Кроме ABAP CDS, есть так же отдельная реализация для HANA – HANA CDS. Как понятно из названия, одна реализация используется в ABAP разработке, другая в HANA Native разработке. Horst Keller в своём блоге более подробно рассматривает разницу в обоих реализациях.
ABAP CDS поддерживается сервером приложений ABAP вне зависимости от того, какая СУБД будет им использована, однако некоторые специфические вещи могут и не поддерживаться (В ABAP 7.4. нет поддержки параметров у CDS для всех СУБД, она появилась только с ABAP 7.5. Кроме того, скорость работы CDS на HANA и Oracle может быть различной).
В статье будет рассмотрена версия ABAP CDS для ABAP 7.4, с некоторыми комментариями относительно ABAP 7.5.
Прежде чем приступать к примерам, рассмотрим основные понятия в контексте ABAP CDS:
- CDS Object – обобщенное понятие объекта репозитория, создаваемого через исходный код CDS. К CDS Object относятся либо CDS Entity (DDL), либо CDS Role (DCL). Найти все DDL в системе можно через таблицу TADIR по следующим ключам: R3TR DDLS <DDL SourceName>. Все DCL можно найти в TADIR по ключам: R3TR DCLS <DCL SourceName>.
- CDS Entity – это CDS объект, управляемый ABAP словарём, создаваемый путём описания на специальном языке — Data Defenition Language (DDL). Объект не переносится транспортом, вместо этого он генерируется в системе во время активации исходного кода DDL с которым он связан. Хранится такой объект в TADIR с ключом: R3TR STOB <EntityName>, где STOB – Structured object. В ABAP 7.4. к CDS Entity относится лишь CDS View, в 7.5. добавили еще CDS Table function (по сути это AMDP, которая реализует CDS и позволяет использовать SQL Script для формирования данных CDS, в статье Table function не рассматриваются). CDS View — это основной объект с которым мы имеем дело в ABAP при чтении данных из словаря. На CDS View можно ссылаться при объявлении ABAP переменных, однако этот объект нельзя использовать при описании словарных объектов. Каждая новая CDS View должна быть описана в отдельном DDL объекте. Имя CDS View определяется сразу после ключевого слова DEFINE VIEW в DDL (пример ниже), рекомендуется использовать имя такое же как у DDL объекта. Создаются они на базе существующих источников данных из словаря – таблиц (поддерживаются только прозрачные таблицы, пул таблиц и кластерные таблицы не поддерживаются), классических словарных вьюшек и других CDS. CDS Entity не доступны из Native SQL, а OpenSQL поддерживает только операции чтения.
- CDS Role – объекты описывающие необходимые проверки полномочий для доступа к CDS View. CDS Role создаются путём их описания в DCL (Data control language) объекте.
- CDS Database View – объект словаря, который как и CDS View генерируется во время активации DDL объекта. Объект в TADIR можно найти по ключу: R3TR VIEW. По сути, это классический read-only database view из словаря. Имя CDS DB View указывается через аннотацию — @AbapCatalog.sqlViewName, а текстовое описание через @EndUserText.label. Просмотреть данное view можно через SE11, но отредактировать только в ADT. В ABAP можно считать данные напрямую из CDS DB View, однако это не рекомендуется делать и данный способ уже считается устаревшим в ABAP 7.5. В отличие от CDS VIew, CDS DB View можно использовать при описании объектов словаря.
Упомянутые выше аннотации это своего рода мета-информация об объекте CDS, которая может в себя включать как настройки (буферизация, ссылочные поля для валюты и т.п.), так и только описательные данные (текстовое описание поля, описание DB View и прочее).
Подробная информация о существующих аннотациях есть в документации (для ABAP 7.5).
В ABAP 7.5 с помощью аннотаций можно даже опубликовать OData сервис на базе CDS View, при этом используя описательные аннотации можно задавать свойства UI элементов в UI5 (Fiori) приложениях (ABAP 7.5 SP01 и выше). Блог, в котором рассматриваются эти и другие возможности аннотаций (ABAP 7.5).
Работа с CDS View
Создание
Создать CDS View можно только из ABAP Development Tools (Eclipse plugin, скачать можно с сайта: https://tools.hana.ondemand.com). Для этого необходимо сначала создать ABAP проект в системе, а затем добавить к нему новый объект:
В 7.5 путь в мастере несколько отличается, CDS вынесены в отдельную папку.
Далее указывается имя DDL объекта CDS:
На следующем шаге необходимо указать настройки транспорта, а после него выбрать шаблон CDS который будет вставлен в DDL по умолчанию:
Eclipse позволяет самим определять шаблоны DDL через настройки:
После выбора шаблона по умолчанию, нажимаем на кнопку finish и имеем следующий результат:
1 2 3 4 5 6 7 |
@AbapCatalog.sqlViewName: 'sql_view_name' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Описание DDL' define view Zddl_Sample as select from data_source_name { } |
В итоге в объекте DDL мы создали CDS View zddl_sample, которая по сути является запросом SQL к источнику данных data_source_name. Кстати синтаксис DDL и DCL позволяет использовать комментарии // (—) — для однострочных и /* … */ — для многострочных. Более подробно о правилах синтаксиса можно почитать в документации.
Начиная с ABAP 7.50 SP01 кроме текстового редактора, доступен графический редактор CDS:
Изменим наш DDL на следующий:
1 2 3 4 5 |
@AbapCatalog.sqlViewName: 'zsql_view' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Описание DDL' define view zstob_ddl_sample as select from spfli { * } |
В данном примере мы определили cds view zstob_ddl_sample, как запрос всех данных из таблицы spfli. Так как поля явным образом не заданы, будут выбраны все ( * ). С некоторыми используемыми аннотациями мы уже знакомы, остальные будут рассмотрены чуть позже.
После активации DDL, в TADIR мы получим следующие объекты:
В словаре (SE11) можем посмотреть на DB View:
Однако просмотр DB View в SE11 не самая лучшая идея, так как в нём вы не увидите некоторых специфичных для CDS вещей, например: UNION ALL, LEFT OUTER JOIN и пр. Для того чтобы их увидеть, необходимо перейти по следующему меню:
Тут вы получите описание на уровне СУБД, поле манданта (клиента) было вставлено автоматически:
Просмотр данных
После того как DDL будет активирован, мы можем посмотреть содержимое CDS VIew. Для просмотра можно нажать F8 (ADT 2.31 / ABAP 7.40 SP08) прямо в редакторе DDL, так выглядит интерфейс просмотра:
Инструмент Data Preview так же позволяет проходить по ассоциациям (о которых будем говорить чуть позже):
Просмотреть данные мы можем и из SQL консоли ADT, оценив одновременно скорость выборки:
Буферизация
Буферизация для CDS View работает по тем же правилам, что и для DB View. Буферизация CDS View возможна только в том случае, если среди источников данных нет других view (DB View или CDS View).
Настройка буферизации осуществляется через следующие аннотации:
AbapCatalog.buffering.status – определяет, активна или нет буферизация, возможные значения:
- #ACTIVE: Буферизация активна.
- #SWITCHED_OFF: Буферизация возможна, но неактивна (по умолчанию).
- #NOT_ALLOWED: Буферизация запрещена.
AbapCatalog.buffering.type – определяет тип буферизации, возможные значения:
- #SINGLE: Отдельная запись
- #GENERIC: Родовая область
- #FULL: Полная буферизация
- #NONE: Буферизация отключена (По умолчанию)
AbapCatalog.buffering.numberOfKeyFields – количество ключевых полей, относительно которых происходит буферизация, только для буферизации по родовой области (Generic). Может принимать значения от 0 до k-1, где k – количество ключевых полей.
CDS View содержат два типа определения ключей:
- Для CDS Entity, ключевое слово KEY может задать семантический ключ. Который используется при неявных проверках полномочий определенных в DCL (ABAP 7.5).
- Ключ для CDS DB View задаётся автоматически по тем же правилам что и для обычных словарных View, данный ключ является техническим.
Для буферизации всегда будет актуальным технический ключ (который можно посмотреть в SE11 к DB View).
В OpenSQL ключевые поля используемые в запросе с ORDER BY PRIMARY KEY будут определены в зависимости от источника, к которому вы обращаетесь, как уже говорилось это может быть DB VIew (не следует использовать) или CDS View.
SAP рекомендует всегда указывать семантический ключ для CDS View, т.к. его наличие необходимо для ABAP фреймворков использующих CDS, например — IDA ALV.
Joins
Одним из отличий CDS View от обычных DB View, является поддержка двух дополнительных типов JOIN’ов, LEFT OUTER JOIN и RIGHT OUTER JOIN.
Применяя эти типы JOIN’oв мы можем столкнуться с ситуацией, когда данные из левой/правой таблицы будут содержать NULL значения. Для обработки NULL значений можно в DDL использовать условие IS [NOT] NULL и функцию COALESCE. Так как в ABAP нет типа обозначающего NULL, это значение будет автоматически преобразовано к INITIAL значению типа столбца.
Пример LEFT OUTER JOIN CDS View:
1 2 3 4 5 6 7 8 9 10 11 12 |
@AbapCatalog.sqlViewName: 'zddl_join' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'LEFT OUTER SAMPLE' define view Zddl_Join_Sample as select distinct from spfli left outer join sgeocity on spfli.countryfr = sgeocity.country and spfli.cityfrom = sgeocity.city { spfli.cityfrom, spfli.countryfr, sgeocity.latitude } where spfli.carrid = 'AZ'; |
На выходе получаем:
На своей системе я специально удалил запись с городом ROME из таблицы sgeocity чтобы показать каким образом будет обработан запрос. В данном случае NULL значение было заменено на начальное для типа столбца latitude.
Обработка клиента
Одним из отличий ABAP CDS от HANA CDS является автоматическая поддержка клиента, то есть Вам не нужно объявлять поле клиента (манданта) при создании View, система сделает это неявным образом (В CDS DB View поле клиента будет вставлено автоматически). Есть возможность отключения автоматической обработки клиента, для этого необходимо использовать аннотацию:
@ClientDependent: false
Вставить её необходимо до определения view (define view). При этом после активации DDL, CDS DB View уже не будет содержать поле клиента по умолчанию.
Еще один способ отключить обработку клиента использовать дополнение CLIENT SPECIFIED в ABAP:
1 2 3 4 5 6 |
TYPES: ty_result TYPE zstob_ddl_sample CLIENT SPECIFIED clnt. DATA: lt_data TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY. SELECT * FROM zstob_ddl_sample CLIENT SPECIFIED zstob_ddl_sample~clnt INTO CORRESPONDING FIELDS OF TABLE @lt_data WHERE clnt = '001'. |
Следует отметить так же важную особенность, если одна CDS View будет использовать в качестве источника данных другую CDS View с зависимостью от клиента, тогда она так же будет зависима от клиента.
Ассоциации
Для упрощения понимания CDS View были введены так называемые ассоциации, которые по своей сути являются теми же JOIN, но в более простой для восприятия форме и с более широкими возможностями.
Рассмотрим пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@AbapCatalog.sqlViewName: 'zsql_view' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Описание DDL' define view zstob_ddl_sample as select from spfli association [1..1] to scarr as airline on spfli.carrid = airline.carrid { spfli.airpfrom, spfli.airpto, spfli.carrid, airline.carrname, spfli.arrtime, spfli.connid }; |
В примере мы создали CDS View на основе данных о расписании авиарейсов (SPFLI) и ассоциации их с данными о компании через соединение по carrid. При активации DDL, ассоциация будет преобразована в JOIN. В примере мы задали имя для ассоциации airline, однако этого можно было и не делать, тогда имя будет неявным образом тем же самым что у привязанного источника данных, в нашем случае это таблица scarr. SAP рекомендует использовать подчёркивание перед именем ассоциации, это необходимо чтобы избежать возможных конфликтов с именами полей таблиц.
В примере ассоциация используется для получения поля CARRNAME, то есть сама не видна извне. Однако CDS View позволяют вынести ассоциацию наверх, чтобы можно её было использовать в других CDS View, пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@AbapCatalog.sqlViewName: 'zsql_view' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Описание DDL' define view zstob_ddl_sample as select from spfli association [1..1] to scarr as airline on spfli.carrid = airline.carrid { spfli.airpfrom, spfli.airpto, spfli.carrid, airline, // Ассоциация будет доступна извне spfli.arrtime, spfli.connid }; |
Используем ассоциацию в другом CDS View:
1 2 3 4 5 6 7 8 9 |
@AbapCatalog.sqlViewName: 'zstob_ex' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'zddl_external_as' define view Zddl_External_As as select from zstob_ddl_sample { zstob_ddl_sample.airline.carrid, zstob_ddl_sample.airline.carrname, zstob_ddl_sample.airline.currcode } |
Начиная с ABAP 7.5, OpenSQL позволяет использовать ассоциации и выбирать из них данные, пример:
1 2 3 4 |
SELECT cityfrom, countryfr, \geoinfo-latitude as latitude FROM Zddl_assoc_Sample. |
Кардинальность ассоциаций
В квадратных скобках ассоциации указывается кардинальность, которая помогает пользователям понять каким образом связаны данные и произвести оптимизацию при создании JOIN’ов для HANA. Синтаксис следующий [<min>..<max>], <min> — может быть опущено, по умолчанию 0. При описании кардинальности может быть использована *, которая означает – любое число записей. Максимальное число не может быть нулевым, а минимальное не может быть — *. Кардинальность не обязательно к указанию, тогда будет выставлена по умолчанию [0..1].
Типы JOIN’ов в описании ассоциаций
По умолчанию тип JOIN определяется от того где в DDL прописана ассоциация: в SELECT, FROM, WHERE, GROUP BY. Если ассоциация указана в FROM по умолчанию будет использован INNER JOIN, в остальных случаях LEFT OUTER JOIN.
Пример в SELECT:
1 |
define view Zddl_assoc_cds as select cityfrom, countryfr, geoinfo.latitude from Zddl_assoc_Sample; |
JOIN:
Пример в FROM:
1 |
define view Zddl_assoc_cds as select latitude from Zddl_assoc_Sample.geoinfo; |
JOIN:
Кроме того тип JOIN’a может быть переопределен когда мы получаем доступ к ассоциации через path expression:
1 2 3 4 5 6 7 8 9 |
@AbapCatalog.sqlViewName: 'zddl_assoc_ex' @AbapCatalog.compiler.CompareFilter: tue @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'association sample' define view Zddl_assoc_cds as select from Zddl_assoc_Sample { cityfrom, countryfr, geoinfo[inner].latitude }; |
Правила переопределения.
Ключевое слово $projection может быть использовано для доступа к полю в ассоциации для которого задан alias:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@AbapCatalog.sqlViewName: 'Ztest_Ddl7_sql' @AbapCatalog.compiler.CompareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'test' define view zstob_ddl_sample7 as select from spfli association [1..1] to sgeocity as _geocity on $projection.city = _geocity.city and spfli.countryfr = _geocity.country { key spfli.carrid, key spfli.connid, spfli.cityfrom as city }; |
Фильтрация в ассоциации
Используя ассоциации, Вы так же можете добавлять свои критерии фильтрации, указывая их в WHERE условии:
1 2 3 4 5 |
define view Zddl_assoc_cds as select from Zddl_assoc_Sample { cityfrom, countryfr, geoinfo[1: inner where country = 'UA'].latitude }; |
Как видно из картинки, фильтр переходит в условие JOIN.
При использовании ассоциации с одним и тем же фильтром или без фильтра, если не указана аннотация CompareFilter со значением true, то для каждого поля из ассоциации генерируется отдельный JOIN:
1 2 3 4 5 |
define view Zddl_assoc_cds as select from Zddl_assoc_Sample { cityfrom, geoinfo[country = 'UA'].country, geoinfo[country = 'UA'].latitude }; |
Если же мы поставим CompareFilter в true, результат будет уже иным:
Это важно с точки зрения оптимизации и лучше чтобы оптимизация всегда была включена.
CDS View с параметрами
Внутрь CDS view можно передавать параметры, основное предназначение которых сделать наши CDS более гибкими с возможностью передача их значений внутрь условий where, внутрь функций и выражений, а так же в условия JOIN.
Определяются параметры с помощью ключевого слова WITH PARAMETERS до ключевого слова SELECT. При определении параметра указывается его имя и тип данных. При указании типа можно ссылаться как на элементы данных, так и на DDIC типы, указав префикс abap (abap.int4). Более подробное описание типов смотрите в документации.
Пример:
1 2 |
define view Zddl_assoc_cds with parameters p_carrid: s_carr_id as select from spfli { * } where carrid = $parameters.p_carrid; |
SQL запрос к CDS View с параметром:
1 |
SELECT * FROM zddl_assoc_cds( p_carrid = 'UA' ) INTO TABLE @DATA(lt_data). |
При выборке данных с передачей параметров в ABAP 7.4. будет показано предупреждение о том, что нужно проверить поддерживает ли СУБД передачу параметров в CDS View:
Можно спрятать предупреждение и выполнить проверку:
1 2 3 4 |
IF cl_abap_dbfeatures=>use_features( VALUE #( ( cl_abap_dbfeatures=>views_with_parameters ) ) ). SELECT * FROM zddl_assoc_cds( p_carrid = 'UA' ) ##DB_FEATURE_MODE[VIEWS_WITH_PARAMETERS] INTO TABLE @DATA(lt_data). ENDIF. |
Если СУБД не поддерживает передачу параметров, при выполнении SQL запроса будет вызвано исключение — CX_SY_SQL_UNSUPPORTED_FEATURE. Напомню что в ABAP 7.5 параметры стали доступны для всех СУБД.
В ABAP 7.5 добавилась возможность использования переменных сессии, например $session.user будет содержать внутри себя sy-uname. Подробнее в документации.
Параметры могут быть использованы как элементы в перечне полей для выбора:
1 2 3 4 5 6 7 8 9 |
@AbapCatalog.sqlViewName: 'SPFLI_PROJECTION' define view spfli_proj with parameters p1 : abap.int4, p2 : abap.int4 as select from scarr { key carrid, :p1 as para1, $parameters.p2 as para2 }; |
Code Pushdown
Code Pushdown подразумевает собой перенос логики расчёта на уровень СУБД, данный подход оправдывает себя (с точки зрения производительности) когда вы например используете SAP HANA или ваш сервер СУБД заметно мощнее чем сервер приложений.
Сам перенос расчёта подразумевает широкое использование выражений SQL в CDS View, которые имеют больше возможностей, чем в OpenSQL (В планах развития OpenSQL поддержка всех функций CDS).
Стандартный пример CDS View с SQL функциями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@AbapCatalog.sqlViewName: 'DEMO_CDS_SQLFUNC' define view demo_cds_sql_functions as select from demo_expressions { abs( num1 ) as abs_num1, ceil( fltp1 ) as ceil_fltp1, floor( dec1 ) as floor_dec1, div( num1, num2 ) as div_num1_num2, mod( num1, num2 ) as mod_num1_num2, division( dec2, dec3, 3 ) as dvision_dec2_dec3, round( dec3, 2 ) as round_dec3, concat( char1, char2 ) as concat_char1_char2, lpad( char1, 10, 'x' ) as lpad_char1, replace( char2, 'GHI', 'XXX' ) as replace_char2, substring( char2, 2, 3 ) as substring_char2 } |
Описание функций можно найти в официальной документации или по F1.
Пример использования функции конвертации валюты:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@AbapCatalog.sqlViewName: 'DEMO_CDS_CRRCONV' define view demo_cds_currency_conversion with parameters to_currency:abap.cuky(5), exc_date:abap.dats as select from demo_prices { id, currency_conversion( amount => amount, source_currency => currency, round => 'X', target_currency => :to_currency, exchange_rate_date => :exc_date, error_handling => 'SET_TO_NULL' ) as amount, :to_currency as currency } |
Кроме непосредственно функций можно так же использовать литералы, арифметические выражения и условный оператор CASE. Пример с CASE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@AbapCatalog.sqlViewName: 'DEMO_CDS_SCASE' define view demo_cds_searched_case as select from spfli { key carrid, key connid, distance, distid, case when distance >= 2000 then 'long-haul flight' when distance >= 1000 and distance < 2000 then 'medium-haul flight' when distance < 1000 then 'short-haul flight' else 'error' end as flight_type } where distid = 'MI' |
В ABAP 7.5. набор возможностей CDS еще шире.
Просмотр в IDA ALV
IDA ALV (List Viewer with Integrated Data Access) – это расширение библиотеки SALV (Simple ALV), которое позволяет обрабатывать большие массивы данных, не передавая все данные разом на сервер приложений (представления). По сути, Вам не требуется заполнять внутреннюю таблицу для передачи её в salv класс, достаточно указать источник данных. IDA ALV используя функции агрегаций будет отображать результат их вычислений.
Простейший пример:
1 |
cl_salv_gui_table_ida=>create( iv_table_name = 'SBOOK' )->fullscreen( )->display( ). |
Во время прокрутки списка в IDA ALV, сервер приложений будет генерировать запросы похожие на следующий:
То есть вместо полной выборки будут использованы команды по смещению. Приведенный выше синтаксис использует СУБД HANA. Более подробные примеры использования IDA ALV можно найти в пакете: SALV_IDA_TEST. Так же доступна документация.
Расширение CDS
Вы можете расширять стандартные CDS View при этом без указания ключа разработчика. Синтаксис расширения является частью DDL и реализован ключевым словом Extend View. Расширение подразумевает создание дополнительных полей, аннотаций, расчётных полей и параметров к расширяемому CDS View.
Технически расширение реализовано за счёт Append View к Database View исходного CDS View, в связи с чем, перед ключевым словом Extend View необходимо указать аннотацию @AbapCatalog.sqlViewAppendName: ‘<ИмяAppendView>’.
На текущий момент нельзя расширять CDS View следующих типов:
- View у которых явно определены имена полей, пример:
1 2 3 4 5 6 7 8 |
@AbapCatalog.sqlViewName: 'BPA_VW' define view business_partner (id, role, company_name, phone_number) as select from snwd_bpa { key snwd_bpa.bp_id, snwd_bpa.bp_role, snwd_bpa.company_name, snwd_bpa.phone_number } |
- View в которых используются агрегатные функции и выражение GROUP BY.
- View в которых используется объединение через UNION.
- View которые сами являются расширениями.
Агрегатные функции так же нельзя использовать в ваших расширениях. Рекомендуется начинать добавляемые поля с префикса Z (Y), чтобы не возникало конфликтов имён. Добавляемые поля не могут быть помечены как семантический ключ через ключевое слово KEY. Так же нельзя переопределить свойства буферизации через соответствующие аннотации.
После того как расширение будет перенесено через транспортную систему, комбинацию имени AppendView и имени расширенного CDS View уже нельзя будет переопределить.
Пример:
1 2 3 4 5 6 |
@AbapCatalog.sqlViewAppendName: 'zddl_append_view' @EndUserText.label: 'Пример расширения CDS View' extend view demo_cds_spfli with zddl_extension { spfli.distance, spfli.distid as unit } |
В примере мы расширили CDS View demo_cds_spfli добавив новые поля, исходный код CDS:
1 2 3 4 5 6 7 8 |
@AbapCatalog.sqlViewName: 'DEMO_CDS_PRJCTN' define view demo_cds_spfli as select from spfli { key spfli.mandt, key spfli.carrid, key spfli.connid, spfli.cityfrom, spfli.cityto } |
Результат расширения, два новых поля:
Если в качестве источника данных в Вашем CDS View прозрачная таблица или DB View, Вы можете указать специальное дополнение $EXTENSION.*, чтобы кроме указанных полей из таблицы выбирались так же те, которые будут добавлены в расширении к этому словарному объекту (Естественное если мы изначально не указали что будем выбирать все поля «*»). После активации расширения, все связанные таким образом CDS View будут автоматически адаптированы.
Подробная документация по расширениям CDS доступна в справке.
Ошибки активации
При активации CDS у Вас могут возникать ошибки активации, для того чтобы их посмотреть нужно перейти по меню Navigate -> Open activation log:
Далее зажав Ctrl щелкаете по журналу, где уже будет более развернутая информация, по которой Вы сможете понять суть ошибки.
Работа с CDS Role
Как уже было упомянуто ранее, CDS в ABAP 7.4 представлено двумя основными сущностями – CDS View и CDS Role. CDS View описывают модели данных, CDS Role определяют полномочия на доступ к этим моделям.
Статья на тему того как работает данный функционал. Обратите внимание, что в ABAP 7.4 оно работает только с определённой версии SP.
Источники
На SCN есть сборный документ, включающий в себя подробное описание CDS. Кроме него есть еще очень любопытный документ, где собраны все возможности CDS в рамках версий систем, позволяющий понять, что можно использовать на вашей версии.
Курсы от SAP в которых рассматриваются ABAP CDS:
- HA400
- S4H410.
Очень интересно и полезно, спасибо.
Я так понимаю на производительности программ и выборок это никак не скажется, но сам процесс написания выборок упрощается, а так же есть возможность использовать одни и те же выборки для разных программ. Смущает конечно использование Eclipse у меня на компе при соединении с SAP он жутко тормозит 🙂