引言:
在 RAP 四层架构中,数据建模层(CDS View)直接建立在底层数据库表之上,二者是“视图与基表”的关系,但 CDS 提供了远超普通视图的语义化和建模能力。
表是数据的物理存储,CDS 视图是业务的逻辑抽象。RAP 中,所有上层(行为定义、服务绑定、消费)都只与 CDS 视图打交道,完全不直接读写表。表结构的变动只需向后兼容 CDS 视图的契约,真正实现了持久化与业务逻辑的解耦。
下面将进行创建数据表的实操。
步骤1.右键包New > Other ABAP Repository Object,在搜索字段中输入database,在列表中选择Database table ,然后选择Next。

在弹出的对话框中保留ZRAP_ATRAV_####作为名称,并填写Description,然后选择下一步

分配一个传输请求并选择完成,表格已创建,默认代码显示在新编辑器中。

将默认源代码替换为下方提供的代码片段,并将所有出现的 #### 替换为你选择的后缀(编辑器会出现红色提示)
@EndUserText.label : 'Travel data'
@AbapCatalog.enhancementCategory : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zrap_atrav_#### {
key client : mandt not null;
key travel_uuid : sysuuid_x16 not null;
travel_id : /dmo/travel_id;
agency_id : /dmo/agency_id;
customer_id : /dmo/customer_id;
begin_date : /dmo/begin_date;
end_date : /dmo/end_date;
@Semantics.amount.currencyCode : 'zrap_atrav_####.currency_code'
booking_fee : /dmo/booking_fee;
@Semantics.amount.currencyCode : 'zrap_atrav_####.currency_code'
total_price : /dmo/total_price;
currency_code : /dmo/currency_code;
description : /dmo/description;
overall_status : /dmo/overall_status;
created_by : syuname;
created_at : timestampl;
last_changed_by : syuname;
last_changed_at : timestampl;
local_last_changed_at : timestampl;
}

SQL语法简短说明:
- 使用了 ABAP 飞行参考场景中的一些数据元素(命名空间
/DMO/)。 - 表键由
CLIENT字段和TRAVEL_UUID字段组成,后者是一个技术键(16字节通用唯一识别码)。 - 一个人类可读的行程标识符:
TRAVEL_ID - 字段 CURRENCY_CODE 借助语义注释
@Semantics.amount.currencyCode被指定为金额字段BOOKING_FEE和TOTAL_PRICE的货币键 - 已定义一些标准管理字段:
CREATED_BY、CREATED_AT、LAST_CHANGED_BY、LAST_CHANGED_AT和LOCAL_LAST_CHANGED_AT
激活后按F8预览(没有的话右键->OPEN WITH ->Data Preview),目前数据库表是空的,所以没有显示任何数据。

根据上述同样的步骤创建一张数据库表 ZRAP_ABOOK_KJ(其中 #### 为你选择的后缀),用于存储预订数据SQL语句代码如下:
@EndUserText.label : 'TEST'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zrap_abook_kj {
key client : mandt not null;
key booking_uuid : sysuuid_x16 not null;
travel_uuid : sysuuid_x16 not null;
booking_id : /dmo/booking_id;
booking_date : /dmo/booking_date;
customer_id : /dmo/customer_id;
carrier_id : /dmo/carrier_id;
connection_id : /dmo/connection_id;
flight_date : /dmo/flight_date;
@Semantics.amount.currencyCode : 'zrap_abook_kj.currency_code'
flight_price : /dmo/flight_price;
currency_code : /dmo/currency_code;
created_by : syuname;
last_changed_by : syuname;
local_last_changed_at : timestampl;
}
步骤2.用演示数据填充数据库表
创建一个类,核心代码如下:
METHOD if_oo_adt_classrun~main.
" delete existing entries in the database table
DELETE FROM zrap_atrav_####.
DELETE FROM zrap_abook_####.
" insert travel demo data
INSERT zrap_atrav_#### FROM (
SELECT
FROM /dmo/travel
FIELDS
uuid( ) AS travel_uuid ,
travel_id AS travel_id ,
agency_id AS agency_id ,
customer_id AS customer_id ,
begin_date AS begin_date ,
end_date AS end_date ,
booking_fee AS booking_fee ,
total_price AS total_price ,
currency_code AS currency_code ,
description AS description ,
CASE status
WHEN 'B' THEN 'A' " accepted
WHEN 'X' THEN 'X' " cancelled
ELSE 'O' " open
END AS overall_status ,
createdby AS created_by ,
createdat AS created_at ,
lastchangedby AS last_changed_by ,
lastchangedat AS last_changed_at ,
lastchangedat AS local_last_changed_at
ORDER BY travel_id UP TO 200 ROWS
).
COMMIT WORK.
" insert booking demo data
INSERT zrap_abook_#### FROM (
SELECT
FROM /dmo/booking AS booking
JOIN zrap_atrav_#### AS z
ON booking~travel_id = z~travel_id
FIELDS
uuid( ) AS booking_uuid ,
z~travel_uuid AS travel_uuid ,
booking~booking_id AS booking_id ,
booking~booking_date AS booking_date ,
booking~customer_id AS customer_id ,
booking~carrier_id AS carrier_id ,
booking~connection_id AS connection_id ,
booking~flight_date AS flight_date ,
booking~flight_price AS flight_price ,
booking~currency_code AS currency_code ,
z~created_by AS created_by ,
z~last_changed_by AS last_changed_by ,
z~last_changed_at AS local_last_changed_by
).
COMMIT WORK.
out->write( 'Travel and booking demo data inserted.').
ENDMETHOD.

保存激活后运行类程序

查看数据库表

1248

被折叠的 条评论
为什么被折叠?



