SAP CDS view 源代码中的 $projection

简介: SAP CDS view 源代码中的 $projection

我们看到下图 CDS view 源代码里 association 条件中的 $projection.

fb8614de8ca336e120ce8e0673c07c72.png

SAP CDS(Core Data Services)中,$projection 是一个特殊的关键字,用于在查询中选择特定的字段并创建一个临时视图。它可以在CDS视图的源代码中使用,以对结果集进行处理和转换。通过使用 $projection,可以根据需要过滤和转换数据,将源数据集投影到一个新的、更具体的数据视图中。


假设有一个简单的业务场景,涉及到一个名为 SalesOrder 的数据表,其中包含销售订单的信息,包括订单号、客户名称、产品、数量和金额。我们可以创建一个基本的CDS视图,然后使用 $projection 来创建一个新的视图,仅选择所需的字段。

以下是一个示例,假设我们有一个名为 SalesOrder 的CDS数据表:

@AbapCatalog.sqlViewName: 'ZSALESORDER'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order'
define entity SalesOrder {
    key OrderID   : UUID;
    CustomerName  : String(50);
    Product      : String(50);
    Quantity     : Integer;
    Amount       : Decimal(15, 2);
}


现在,我们可以基于上述 SalesOrder 实体创建一个CDS视图,并使用 $projection 选择所需的字段,如下所示:

@AbapCatalog.sqlViewName: 'ZSalesOrderView'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order View'
define view SalesOrderView as select from SalesOrder {
    key OrderID,
    $projection.CustomerName,
    $projection.Product,
    Quantity,
    $projection.Amount
} 


在上面的示例中,$projection 关键字用于选择 CustomerNameProduct 字段,并保留了原始的 Quantity 字段。Amount 字段也被选择到新的视图中,但没有进行特殊处理,因此它保持不变。


通过使用 $projection,我们可以创建一个新的CDS视图,仅包含我们感兴趣的字段,而不必重新定义所有的字段和逻辑。这有助于简化查询和数据处理,同时还可以提高查询的性能,因为只选择了所需的字段。


再看另一个例子。


在 SAP 的 ABAP 编程环境中,CDS(Core Data Services)视图是一个强大的工具,可以让开发者以更高效、更简洁的方式操作数据库。在 CDS 视图的源代码中,$projection 是一个特殊的关键字,它被用来引用当前的投影列表。也就是说,$projection 引用的是当前 CDS 视图定义中所包含的所有字段。


举例来说,如果你在 CDS 视图中定义了一些字段,例如 idnamestatus,然后你在视图的某个部分(如一个条件表达式或者一个计算表达式)需要引用这些字段,那么你就可以使用 $projection 关键字。


以下是一个使用 $projection 的简单示例:

@AbapCatalog.sqlViewName: 'Z_MY_VIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'My View'
define view ZMyView as select from sflight as flight {
  key flight.carrid as CarrierId,
      flight.connid as ConnectionId,
      flight.fldate as FlightDate,
      flight.price as Price,
      flight.currency as Currency,
      flight.passengers as Passengers,
      flight.distance as Distance,
      flight.distance * $projection.Passengers as TotalDistanceTravelled
} where $projection.TotalDistanceTravelled > 10000


在上面的例子中,CDS 视图 ZMyView 包含了几个字段,如 CarrierIdConnectionIdFlightDatePriceCurrencyPassengersDistance然后我们定义了一个计算字段 TotalDistanceTravelled,这个字段的值是 Distance 字段的值乘以 $projection.Passengers 的值。在这里,$projection.Passengers 就是用来引用 Passengers 字段的。


然后,在 where 子句中,我们又使用了 $projection.TotalDistanceTravelled 来引用 TotalDistanceTravelled 字段。这里的 $projection.TotalDistanceTravelled > 10000 就表示只选择那些 TotalDistanceTravelled 字段的值大于 10000 的记录。


需要注意的是,$projection 只能在 CDS 视图的计算表达式和条件表达式中使用,不能在 select 子句的列表中使用。也就是说,你不能写出像 $projection.someField as SomeField 这样的代码。

相关文章
|
1月前
|
SQL Android开发
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
9 0
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
|
1月前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
30 6
介绍一个 webp 格式转 png 格式的软件:XNConvert
|
1月前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
12 0
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
1月前
|
数据库
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
8 0
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
|
1月前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
11 0
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
1月前
|
数据库 SQL 应用服务中间件
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
24 0
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
|
2月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
32 0
|
2月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
17 0
|
2月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
20 0
|
2月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍
35 0