SAP-BTP :(2)RAP-创建数据库表

引言:         

        在 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_BYCREATED_ATLAST_CHANGED_BYLAST_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.

保存激活后运行类程序

查看数据库表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值