Комментарии по теме

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)
«MVC или как писать отчеты быстро и просто»
Олег Точенюк:
>>"Самое главное - это расположить инклуды с моделью и представлением до инклуда с контроллером"   А может проще написать в начале что-то типа: CLASS: <имя> DEFINITION...

База знаний

ABAP CDS. Определение ракурсов и профилей в репозитарии. (S4D430)

514

Содержание

0. Зачем это нужно

1. Введение

2. Основы CDS view

3. Простые возможности: вычисления, соединения, объединения

3.1. Вычислимые поля

3.2. Агрегатные функции

3.3. Соединения и объединения

4. Дальше — больше

4.1. Передача параметров

4.2. Ассоциации

4.3. Расширения

4.4. Фильтрация по полномочиям

5. Табличные функции. Только для SAP HANA

6. Использование CDS view

7. Заключение

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 (факультативные синтаксические элементы даны в курсивом в квадратных скобках):

Ограниченный доступ

Для прочтения полной версии статьи необходимо зайти как зарегистрированный пользователь.


Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»