乐趣区

关于sap:SAP-CDS-view-源代码中的-projection

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

在 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 这样的代码。

退出移动版