iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

原文連結:Working with CDS View

ABAP Core Data Services (ABAP CDS)

CDS view簡介

ABAP CDS (Core Data Services),是一個用來定義及存取ABAP語意化資料模型的基礎設施,ABAP用CDS DDL語言來定義 CDS實體,而最重要的CDS實體則是CDS視圖。

CDS視圖具體而言有以下特色:

  • 可重複使用的SQL邏輯:可預先定義好複雜SQL功能,包含簡單的表格欄位mapping,也有複雜的計算、聯集交集等。
  • 訪問資料的關聯(association):CDS視圖也能用來反映資料庫之間的關聯,方便檢索具關聯的資料。
  • metadata註解:使用註解在語意上更豐富視圖的定義,主要根據建構在CDS上的框架來建立,像是後面章節會提及的ABAP RESTful API。

CDS view範例

先來個CDS view的範例:

"CDS視圖實體的Metadata"
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Connection View CDS Data Model'

"參照來源定址"
define view entity /DMO/I_Connection 
   as select from /dmo/connection as Connection

"添加關聯"
association [1..1] to /DMO/I_Carrier as _Airline 
         on $projection. AirlineID = _Airline.AirlineID

{
"CDS視圖欄位的Metadata"
@ObjectModel.text.association: Airline' 

"視圖欄位"
key Connection.carrier_id    as AirlineID,
key Connection.connection_id as ConnectionID, Connection.airport_from_id   as DepartureAirport, Connection.airport_to_id     as DestinationAirport,
...

_Airline

}

參照來源

在範例中, DEFINE VIEW ENTITY 後面接的是CDS view名稱/DMO/I_Connection,FROM之後接的則是資料來源/dmo/connection。額外的可選項AS後則是別名Connection,方便定址資料來源到view內。

關聯

添加關聯(association)可以把當前的CDS視圖關連到另一個CDS視圖,範例中增加了一個一對一關聯到/DMO/I_Carrier這個視圖,並命名為_Airline

_Airline加入到element清單中(大括號內),就可進一步在當前視圖使用該關聯。

CDS註解(Metadata)

CDS的語意化註解(entity annotations)使用@作為開頭,並放置在視圖前方,用來更加豐富CDS的語意化定義,主要拿來定義CDS的metadata。另外,CDS註解也能寫在element的大括號之中,用來定義element的metadata。

檢視CDS

開啟CDS

https://ithelp.ithome.com.tw/upload/images/20240913/20113802tUzKmYGmYj.png

  1. 打開昨天有用到的/dmo/connection表格,按下ctrl+shift+G,打開下方Search面板
  2. 選取filiter圖示
  3. 在跳出的filiter視窗中,在Object Type裡搜尋DDLS/DF
  4. 點擊下方出現的/DMO/I_CONNECTION,即可進入connection表格的CDS物件
  5. 成功開啟後,就能看到下方圖中的/DMO/I_ConnectionCDS定義囉
    https://ithelp.ithome.com.tw/upload/images/20240913/20113802awVCzIW5Tf.png

檢視CDS關聯

1.當開啟CDS後。可以F8開啟該CDS關聯的表格。對表格任一筆右鍵,選擇follow association
https://ithelp.ithome.com.tw/upload/images/20240913/20113802FJha8L8vcG.png
2.接著會列出所有與該CDS有關的association,選擇想檢視的關聯即可
https://ithelp.ithome.com.tw/upload/images/20240913/20113802afNwalpT3U.png
3.該筆資料的關聯資訊
https://ithelp.ithome.com.tw/upload/images/20240913/20113802a06CBk2jxY.png

用SQL操作CDS

DATA airport_from_id TYPE /dmo/airport_from_id.
DATA airport_to_id   TYPE /dmo/airport_to_id.
DATA carrier_name    TYPE /dmo/carrier_name.

SELECT SINGLE
      FROM /dmo/connection
    FIELDS airport_from_id, airport_to_id
     WHERE carrier_id    = @i_carrier_id
       AND connection_id = @i_connection_id
      INTO ( @airport_from_id, @airport_to_id ).

可以參照上圖的SQL SELECT 語法存取CDS,整體和昨天的SQL語法使用相去不遠。從CDS讀表格跟直接讀取原始表格相比,有以下幾個優點:

  • CDS可預設可複用的SQL語法
  • CDS可以用關聯來更方便的讀資料
  • 有時CDS視圖及其元素的名稱可讀性比原始表格更高

明天要介紹ABAP裡的Structured Data!


上一篇
Day16_基礎ABAP SQL SELECT
下一篇
Day18_structure物件介紹與建立
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言