ABAP Dictionary
ABAP Dictionary (DDIC) — репозиторій метаданих про типи та обʼєкти БД. Описуєш типи один раз централізовано, використовуєш всюди в ABAP і SQL. DDIC-обʼєкти активуються (не просто “зберігаються”): після активації стають доступні глобально.
У ABAP Cloud більшість класичних DDIC-обʼєктів (views, search helps, lock objects) замінені на CDS-еквіваленти. Створення/редагування — тільки в ADT.
Built-in типи
Section titled “Built-in типи”Типи, зашиті в ядро DDIC. У CDS/DDIC-визначеннях ідуть через префікс abap. (наприклад, abap.char(3)). Кожен DDIC-тип мапиться на конкретний ABAP-тип:
| DDIC-тип | ABAP | Коментар |
|---|---|---|
abap.int4 | i | 4-байтовий integer |
abap.char(n) | c | fixed-length string (до 1333 символів у таблицях БД) |
abap.numc(n) | n | числовий текст |
abap.string(n) | string | string; n = 0 — без обмеження довжини |
abap.sstring(n) | string | short string, до 1333 символів |
abap.datn / abap.timn | d / t | дата/час; preferred над legacy dats/tims |
abap.utclong | utclong | UTC timestamp |
abap.dec(p,s), abap.curr(p,s), abap.quan(p,s) | p | packed decimal; curr/quan — те саме, що dec, але семантично прив’язані до валюти/одиниці через анотації (@Semantics.amount.currencyCode тощо) |
abap.cuky, abap.unit | c | ключі валюти / одиниці виміру |
abap.raw(n), abap.rawstring | x, xstring | байтові рядки |
abap.clnt | c(3) | спец-тип для поля клієнта |
Повний перелік — у ABAP Keyword Documentation.
Data elements і domains
Section titled “Data elements і domains”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 як структури чи таблиці.
Структури DDIC
Section titled “Структури DDIC”Структура описується у ADT через DDL (data definition language), з анотаціями поверх:
@EndUserText.label : 'Demo flat DDIC structure'@AbapCatalog.enhancement.category : #NOT_EXTENSIBLEdefine 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.
Table types
Section titled “Table types”Глобальний шаблон для внутрішньої таблиці. Описується властивостями: 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( ) ).Database tables (DDIC)
Section titled “Database tables (DDIC)”Таблиця описується 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 : #RESTRICTEDdefine 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 simple types
Section titled “CDS simple types”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.CDS enumerated types
Section titled “CDS enumerated types”Фіксований набір значень. 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 entities як типи
Section titled “CDS entities як типи”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).Lock objects і search helps
Section titled “Lock objects і search helps”Класичні 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.
CRUD на DDIC-таблицях
Section titled “CRUD на DDIC-таблицях”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 table | DDIC 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). Повний перелік нюансів — в оригіналі.