Перейти до вмісту

ABAP Dictionary

ABAP Dictionary (DDIC) — репозиторій метаданих про типи та обʼєкти БД. Описуєш типи один раз централізовано, використовуєш всюди в ABAP і SQL. DDIC-обʼєкти активуються (не просто “зберігаються”): після активації стають доступні глобально.

У ABAP Cloud більшість класичних DDIC-обʼєктів (views, search helps, lock objects) замінені на CDS-еквіваленти. Створення/редагування — тільки в ADT.

Типи, зашиті в ядро DDIC. У CDS/DDIC-визначеннях ідуть через префікс abap. (наприклад, abap.char(3)). Кожен DDIC-тип мапиться на конкретний ABAP-тип:

DDIC-типABAPКоментар
abap.int4i4-байтовий integer
abap.char(n)cfixed-length string (до 1333 символів у таблицях БД)
abap.numc(n)nчисловий текст
abap.string(n)stringstring; n = 0 — без обмеження довжини
abap.sstring(n)stringshort string, до 1333 символів
abap.datn / abap.timnd / tдата/час; preferred над legacy dats/tims
abap.utclongutclongUTC timestamp
abap.dec(p,s), abap.curr(p,s), abap.quan(p,s)ppacked decimal; curr/quan — те саме, що dec, але семантично прив’язані до валюти/одиниці через анотації (@Semantics.amount.currencyCode тощо)
abap.cuky, abap.unitcключі валюти / одиниці виміру
abap.raw(n), abap.rawstringx, xstringбайтові рядки
abap.clntc(3)спец-тип для поля клієнта

Повний перелік — у ABAP Keyword Documentation.

Domain — standalone DDIC-обʼєкт, що описує технічний тип + value range + fixed values. Data element — семантика поля: label, F1-документація, опційно посилається на domain. Поле таблиці посилається на data element, data element — на domain або на built-in тип.

Domain: zdemo_abap_do_id → abap.char(3) (технічний тип + value range)
Data element: zdemo_abap_dtel_id → label "ID", F1 help
Table field: zdemo_abap_tabl1-id TYPE zdemo_abap_dtel_id

В ADT data elements і domains створюються через wizard (New → ABAP Repository Object → Dictionary → Data Element / Domain), а не через текстовий DDL як структури чи таблиці.

Структура описується у ADT через DDL (data definition language), з анотаціями поверх:

@EndUserText.label : 'Demo flat DDIC structure'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
define structure zdemo_abap_struc_flat {
chars : abap.char(3);
num : abap.int4;
cuky : abap.cuky;
@Semantics.amount.currencyCode : 'zdemo_abap_struc_flat.cuky'
curr : abap.curr(8,2);
id : zdemo_abap_dtel_pr;
flag : zdemo_abap_dtel_do;
}

Використання в ABAP:

DATA struc TYPE zdemo_abap_struc_flat.
struc-chars = 'ABC'.

Також можна включати інші структури через include, опційно з трисимвольним суфіксом:

struc2 : include zdemo_abap_carr;
struc3 : include zdemo_abap_fli with suffix _in;

Append-структури — legacy розширення, у новій розробці на ABAP Cloud замінюються extension-механізмами CDS.

Глобальний шаблон для внутрішньої таблиці. Описується властивостями: line type (DDIC-тип або predefined built-in), table category (standard / sorted / hashed), primary key (unique / non-unique), опційні secondary keys.

У ADT створюється через wizard (New → ABAP Repository Object → Dictionary → Table Type), де задається тип доступу, ключ та секції aliases. У ABAP-коді використовується прямо як тип:

DATA tab TYPE zdemo_abap_tt_so.

Або через TYPE TABLE OF з DDIC-структурою, якщо глобальний table type не потрібен:

DATA itab TYPE TABLE OF zdemo_abap_struc_flat WITH EMPTY KEY.

Для інтроспекції категорії/ключів table type — RTTI:

DATA(applies) = CAST cl_abap_tabledescr(
cl_abap_typedescr=>describe_by_name( 'ZDEMO_ABAP_TT_STR' )
)->applies_to_data( VALUE string_table( ) ).

Таблиця описується DDL-інструкцією define table. Технічні атрибути (table category, delivery class, enhancement category, data maintenance, buffering) задаються анотаціями:

@EndUserText.label : 'Demo DDIC database table'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zdemo_abap_tabl1 {
key client : abap.clnt not null;
key num : abap.int4 not null;
chars : abap.char(5);
id : zdemo_abap_dtel_pr;
flag : zdemo_abap_dtel_do;
str : abap.string(0);
cuky : abap.cuky;
@Semantics.amount.currencyCode : 'zdemo_abap_tabl1.cuky'
curr : abap.curr(8,2);
}

Особливості:

  • key client : abap.clnt — клієнт-залежна таблиця; ABAP SQL автоматично фільтрує за sy-mandt.
  • not null для ключових полів встановлюється завжди.
  • #TRANSPARENT — найпоширеніша table category (одне-в-одне до БД-таблиці).
  • @AbapCatalog.deliveryClass визначає transport/customizing-поведінку (A — application, C — customizing, L — temporary тощо).
  • Foreign keys і value checks у ABAP Cloud описуються через CDS-асоціації та @Consumption.valueHelpDefinition.

CDS-альтернатива data element. Обгортає built-in тип, DDIC data element або інший CDS simple type:

@EndUserText.label: 'Demo CDS simple type'
define type zdemo_abap_cds_type : abap.char(5)

Варіанти base type:

  • built-in: define type zdemo_abap_cds_type : abap.char(5)
  • DDIC data element: define type zdemo_abap_cds_type : land1
  • інший CDS simple type: define type zdemo_abap_cds_type : zdemo_abap_cds_st_bt

В ABAP:

TYPES ty_cds_simple TYPE zdemo_abap_cds_type.
DATA dobj TYPE zdemo_abap_cds_type.
DATA itab TYPE TABLE OF zdemo_abap_cds_type WITH EMPTY KEY.

Фіксований набір значень. Base type — один із int1, int2, int4, char, numc (два останні — до 8 символів). Одна константа обовʼязково має бути initial — вона задає initial-значення базового типу:

@EndUserText.label: 'Demo CDS enumerated type'
define type zdemo_abap_cds_enum : abap.char(1) enum
{
enum_constant_1 = initial;
enum_constant_2 = 'X';
enum_constant_3 = 'Y';
enum_constant_4 = 'Z';
}

CDS view entity / table function можна використовувати як тип структури або рядка таблиці — це основний спосіб типізації у ABAP Cloud:

TYPES ty_struc TYPE zdemo_abap_fli_ve.
DATA row TYPE zdemo_abap_fli_ve.
DATA tab TYPE TABLE OF zdemo_abap_fli_ve WITH EMPTY KEY.
SELECT * FROM zdemo_abap_fli_ve INTO TABLE @DATA(itab).

Класичні DDIC-обʼєкти, що супроводжують таблиці:

  • Lock object — генерує ENQUEUE_/DEQUEUE_-функції (SAP LUW concept).
  • Search help — F4-підказка для полів на dynpro.

У ABAP Cloud для нової розробки замінюються на:

  • Lock objects — оголошуються у RAP behavior definition.
  • Search helps — CDS-based search helps, консʼюмяться через @Consumption.valueHelpDefinition.

INSERT/UPDATE/MODIFY/DELETE у ABAP SQL працюють з DDIC-таблицею напряму (у Standard ABAP). У ABAP Cloud для модифікацій рекомендується використовувати writable CDS view entities / CDS table entities через RAP behavior або released APIs — це дає керовану авторизацію, determinations і validations.

Коли що використовувати

Section titled “Коли що використовувати”
ЗадачаІнструмент
Зберігати даніDDIC table + CDS view entity поверх
Типізувати зміннуCDS simple type або existing data element
Структура для параметра методуDDIC structure або inline TYPES BEGIN OF
Шаблон internal tableDDIC table type, CDS view entity або локальний TYPES TABLE OF
F4-підказка@Consumption.valueHelpDefinition (CDS)
Блокування записуRAP lock або класичний lock object
Фіксований набір значеньCDS enum type

Адаптовано з 26_ABAP_Dictionary.md (Apache 2.0). Повний перелік нюансів — в оригіналі.