什么是 SAP CDS view 的 exposed Association

发布时间 2023-08-16 11:07:40作者: JerryWang_汪子熙

SAP CDS 是 SAP HANA 数据库中的一种新的数据定义语言。它允许开发者定义语义富裕的数据模型,这些数据模型可以以数据库独立的方式在 ABAP 服务器上使用。因此,通过 CDS,开发者可以创建复杂的视图来构建 ABAP 程序或应用。

关联(Association)在 CDS 视图中是一个非常重要的概念。它在 CDS 视图中定义了两个实体(例如,两个数据库表或者两个 CDS 视图)之间的关系。这些实体通过某个特定字段(通常是主键和外键)相互连接。在定义关联时,我们需要指定关联的目标(也就是要关联的另一个实体),以及如何通过特定字段建立这两个实体之间的关联。

然后,我们来讨论 "exposed association"。"Exposed association" 是 SAP CDS 的一个特性,允许我们在定义 CDS 视图时明确地暴露或隐藏关联。这意味着,我们可以选择是否将定义的关联公开给 CDS 视图的消费者(例如,其他的 CDS 视图或者 ABAP 程序)。如果我们选择暴露关联,那么消费者就可以直接通过这个关联访问到关联的目标实体的数据。否则,如果我们选择隐藏关联,那么消费者就无法直接访问到关联的目标实体的数据。
下图高亮的 _scarr 就是 exposed association 的一个具体例子。

接下来,我们通过一个例子来详细解释 "exposed association"。假设我们有两个数据库表:Orders(订单)和 Customers(客户)。每个订单都有一个关联的客户。我们希望定义一个 CDS 视图,该视图包含订单的详细信息,以及与每个订单关联的客户的名称。我们可以这样定义这个 CDS 视图:

@AbapCatalog.sqlViewName: `V_ORDERS_AND_CUSTOMERS`
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: `Orders and Customers`
define view Orders_And_Customers as select from Orders as o
  association [0..1] to Customers as _Customer on $projection.CustomerID = _Customer.CustomerID
{
  o.OrderID,
  o.Product,
  o.Quantity,
  o.CustomerID,
  _Customer as Customer
}

在这个例子中,我们在 CDS 视图 Orders_And_Customers 中定义了一个关联 _Customer,它连接了 OrdersCustomers 这两个实体。我们通过 CustomerID 这个字段建立了这个关联。然后,我们在 CDS 视图的输出字段中包含了这个关联 _Customer。这样,我们就暴露了这个关联,使得 CDS 视图的消费者可以直接通过这个关联访问到 Customers 表的数据。