ABAP CDS. Определение ракурсов и профилей в репозитарии. (S4D430)
Начиная с версии 7.4 в SAP Net Weaver можно создавать в репозитарии новые категории объектов — описания Core Data Services (CDS).
Содержание
3. Простые возможности: вычисления, соединения, объединения
4.4. Фильтрация по полномочиям
5. Табличные функции. Только для SAP HANA
0. Зачем это нужно
Начиная с версии 7.4 в SAP Net Weaver можно создавать в репозитарии новые категории объектов — описания Core Data Services (CDS), позволяющие:
— элегантно описывать ракурсы (представления, CDS view) в том числе использующие в качестве источников другие ракурсы;
— расширять существующие CDS view, в том числе поставляемые SAP или другими поставщиками, описания ролей доступа;
— создавать роли доступа, фильтрация по которым будет происходить на уровне базы данных, а не на уровне ABAP-приложения.
Подавляющее большинство нововведений платформенно независимы и могут использоваться со всеми теми базами данных, с которыми может работать SAP Net Weaver. В настоящее время таких баз данных 9. Особый интерес представляет использование ABAP CDS с базой данных SAP HANA (High Performance Analytic Appliance), поскольку в таком случае можно использовать особенности, присущие этой базе данных.
Концепции, основные возможности, синтаксические конструкции, наиболее интересные способы применения Core Data Services (в первую очередь CDS view) изучаются в трехдневном семинаре S4D430. Создание ракурсов Core Data Services ABAP (CDS ABAP) .
Стандартный язык структурированных запросов SQL(structured query language) содержит в себе 4 важных подмножества: язык манипулирования данными (Data Manipulation Language, DML), язык определения данных (Data Definition Language, DDL), язык доступа к данным (Data Control Language, DCL), язык управления транзакциями (Transaction Control Language, TCL).
Реализованное в ABAP подмножество SQL — OpenSQL — включает в себя часть возможностей языка манипулирования данными: команды ABAP: SELECT, DELETE, INSERT, UPDATE, OPEN CURSOR, FETCH CURSOR, CLOSE CURSOR, дополнительную команду MODIFY, комбинирующую возможности INSERT и UPDATE и языка управления транзакциями: команды ABAP: COMMIT WORK и ROLLBACK WORK (а также COMMIT CONNECTION и ROLLBACK CONNECTION).
Возможности языков манипулирования данными и доступа к данным в ABAP не реализованы. Создание, изменение и удаление объектов базы данных возможны средствами Словаря Данных (пишу с прописной буквы в знак моего особого уважения к этому инструменту) при активации созданных или измененных таблиц или ракурсов (представлений, view) на сервер базы данных действительно посылаются команды CREATE, ALTER или DROP, но непосредственно в ABAP коде эти команды не поддерживаются. Словарю Данных посвящен очень важный трехдневный семинар BC430 .
Проверка полномочий осуществляется командой языка ABAP AUTHORITY CHECK. Важно, что эта проверка происходит не на уровне базы данных, а именно на сервере в приложений в ABAP программе. С одной стороны, это позволяет описывать в ABAP программе различные сценарии реакции на отсутствие полномочий, но с другой стороны - для этого нужно предварительно получить данные до проведения проверки. То есть, приходится либо получать из базы данных лишние данные, либо устраивать лишние выборки. А это может существенно снизить производительность. За гибкость платим производительностью.
Вот эти недостатки и разрешаются с помощью нового средства Core Data Services (CDS), в CDS можно создать DDL- и DCL-описания. В итоге ABAP Open SQL и CDS ABAP покрывают основные возможности SQL.
1. Введение
ABAP Core Data Services создаются средствами ABAP Development Tools (ADT) в среде разработке Eclipse (перспектива “ABAP”). CDS нельзя создать с помощью транзакций разработчика, подобных SE11 или SE80, хотя во многих случаях в этих транзакциях можно увидеть (некоторые, часто многие) результаты. При работе в ADT сначала создается проект, в котором указывается, в какой SAP системе, в каком манданте и каким пользователем ведется работа. Все, что ABAP-разработчик может сделать с помощью «разработческих» транзакций (например SE80) можно сделать с помощью ADT, помимо собственных инструментов ADT позволяет использовать транзакции, но кроме того ADT предоставляет инструменты для создания, ведения и других объектов разработки. Часть таких возможностей изучается на семинаре HA400. Программирование для SAP HANA на ABAP . Подробнее об этом семинаре можно прочесть в статье ABAP для HANA. (HA400); следует заметить, что с момента выхода этой статьи из семинара HA400 был исключен ряд тем и семинар стал трехдневным.
CDS включает в себя описания в нотации, близкой к SQL и кроме того аннотации, содержащие особенные, SAP-специфические, возможности, например, тексты и семантические (смысловые) свойства полей, и различные свойства всего сервиса в целом. Выглядеть это может, например, так:
@AbapCatalog.sqlViewName: 'ZQK1_A'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '2.05. Annotations'
@ClientDependent: true
@AbapCatalog.buffering.type: #GENERIC
@AbapCatalog.buffering.numberOfKeyFields: 1
@AbapCatalog.buffering.status: #ACTIVE
define view ZQK1_B as
select from spfli as a
inner join sflight as b
on a.carrid = b.carrid
and a.connid = b.connid
{ key a.carrid
, key b.connid
, key b.fldate
, paymentsum @<Semantics.amount.currencyCode: 'CURRENCY'
, currency @<Semantics.currencyCode: true
, @Semantics.amount.currencyCode: 'CURRENCY'
price @<EndUserText.label: 'Price(label)'
@<EndUserText.quickInfo: 'Price(quickInfo)'
} where currency = 'JPY'
Первый символ аннотации всегда @. Аннотации могут предшествовать тому, что они аннотируют, а могут следовать за аннотируемым, в последнем случае, они начинаются с двух символов @<. В ADT весьма удобно сделано выделение цветом различных элементов. Нотация CDS-описания соответствует, но не совпадает с SQL, например, приведенной выше CDS соответствует следующий SQL-оператор,
CREATE VIEW "ZQK1_A" AS SELECT
"A"."MANDT" AS "MANDT",
"A"."CARRID",
"B"."CONNID",
"B"."FLDATE",
"B"."PAYMENTSUM",
"B"."CURRENCY",
"B"."PRICE"
FROM "SPFLI" "A" INNER JOIN "SFLIGHT" "B" ON (
"A"."CARRID" = "B"."CARRID" AND
"A"."CONNID" = "B"."CONNID" AND
"A"."MANDT" = "B"."MANDT"
)
WHERE "B"."CURRENCY" = N'JPY'
2. Основы CDS view
При активации вышеописанного CDS в репозитарии создаются три объекта.
(1) Описание самого сервиса как это описано во фразе define view ZQK1_B;
(2) Описание CDS view в Словаре Данных, как это указано в описание самого сервиса @AbapCatalog.sqlViewName: 'ZQK1_A' и в SQL‑операторе CREATE VIEW "ZQK1_A". Результаты этого CDS view можно посмотреть, например в транзакции SE11 или получить в ABAP‑программе командой SELECT;
(3) Объект репозитария типа DDLS (Data Definition Language Source).
В транзакции SE80 выглядеть это будет примерно так:
Обычно не существует резонов различать имена сервиса (самого CDS) и объект типа DDLS, а вот имя CDS view непременно должно от них отличаться.
Объект типа DDLS (Data Definition Language Source) является носителем языково-зависимых свойств: ярлычков, текстов всплывающих подсказок, названия CDS. Эти тексты могут переводится с помощью транзакции SE63. Аннотации, в том числе и языково-зависимые могут быть получены в ABAP методами класса СL_DD_DDL_ANNOTATION_SERVICE.
3. Простые возможности: вычисление, соединения, объединения
Вычислимые поля и агрегатные функции позволяют перенести вычисления с уровня приложения на уровень базы данных, что может быть особенно выгодно для высокопроизводительных баз данных.
3.1. Вычислимые поля
Выражение приведение типа CAST позволяет изменить тип операнда.
В строковых вычислениях применяются строковые функции в том числе функции конкатенации и конкатенации с пробелами. В арифметических вычислениях возможны обычные арифметические операторы + , - , * , / и широкий набор арифметических функций. Непосредственно делить целые числа нельзя, поскольку деление выводит за пределы множества целых чисел, поэтому перед делением придется приводить целочисленные операнды к подходящему типу данных, например к типу c плавающей точкой abap.fltp.
Особенно приятна возможность преобразования единиц измерения и курсов валют на уровне базы данных. Для этого существуют функции unit_conversion и currency_conversion. Конечно, различные базы данных ничего не знают об этих функциях SAP, но соответствующие преобразования все равно будут проводится на уровне базы данных. Например CDS-определению:
select from spfli
{ carrid
, connid
, distance
, distid
, case distid
when 'KM' then distance
when 'MI' then unit_conversion( quantity => distance
, source_unit => distid
, target_unit => cast( 'KM' as abap.unit ) )
end as dist_km
}
может соответствовать такой SQL-оператор:
CREATE VIEW "ZQK1_A" AS SELECT
"SPFLI"."MANDT" AS "MANDT",
"SPFLI"."CARRID",
"SPFLI"."CONNID",
"SPFLI"."DISTANCE",
"SPFLI"."DISTID",
CASE "SPFLI"."DISTID" WHEN N'KM' THEN "SPFLI"."DISTANCE" WHEN N'MI' THEN (
CAST(
ROUND(
CAST(
CONVERT_UNIT(
"QUANTITY" => "SPFLI"."DISTANCE",
"SOURCE_UNIT" => "SPFLI"."DISTID",
"TARGET_UNIT" => CAST(
N'KM' AS NVARCHAR(000003)
),
"CLIENT" => "SPFLI"."MANDT",
"ERROR_HANDLING" => N'FAIL_ON_ERROR',
"SCHEMA" => CURRENT_SCHEMA
) AS DECIMAL
),
000014
) AS DECIMAL(000031,000014)
)
)
END AS "DIST_KM"
FROM "SPFLI" "SPFLI"
В вычислимых полях возможны две формы CASE (факультативные синтаксические элементы даны в курсивом в квадратных скобках):
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти